باستخدام Naudio لفك تشفير الصوت MU-LAW
سؤال
أحاول استخدام Naudio لفك تشفير الصوت المشفر في صوت PCM. تم نشر خدمتي بايت الصوت المشفر في LAW MU-LAW وأتلقى خطأ من NAUDIO بأن البيانات لا تحتوي على رأس RIFF. هل أحتاج إلى إضافة هذا بطريقة ما؟ الرمز الذي أستخدمه هو:
WaveFileReader reader = new WaveFileReader(tmpMemStream);
using (WaveStream convertedStream = WaveFormatConversionStream.CreatePcmStream(reader))
{
WaveFileWriter.CreateWaveFile(recordingsPath + "/" + outputFileName, convertedStream);
}
أنا أيضًا أقوم بحفظ البيانات الأولية على القرص وأقوم بفك التشفير في Matlab الذي يعمل دون أي مشكلة. شكرًا.
المحلول
نظرًا لأن لديك فقط بيانات قانون MU RAW ، لا يمكنك استخدام A WaveFilereader عليه. بدلاً من ذلك ، قم بإنشاء فئة جديدة ترث من Wavestream.
فيها Read
الطريقة ، إرجاع البيانات من TMPMemstream. ك WaveFormat
إرجاع الموجة الموجية Mu-Law.
إليك فئة مساعدة عامة يمكنك استخدامها:
public class RawSourceWaveStream : WaveStream
{
private Stream sourceStream;
private WaveFormat waveFormat;
public RawSourceWaveStream(Stream sourceStream, WaveFormat waveFormat)
{
this.sourceStream = sourceStream;
this.waveFormat = waveFormat;
}
public override WaveFormat WaveFormat
{
get { return this.waveFormat; }
}
public override long Length
{
get { return this.sourceStream.Length; }
}
public override long Position
{
get
{
return this.sourceStream.Position;
}
set
{
this.sourceStream.Position = value;
}
}
public override int Read(byte[] buffer, int offset, int count)
{
return sourceStream.Read(buffer, offset, count);
}
}
الآن يمكنك المتابعة لإنشاء الملف الذي تم تحويله كما فعلت من قبل ، ويمر في RawSourceWaVestream كمدخلاتك:
var waveFormat = WaveFormat.CreateMuLawFormat(8000, 1);
var reader = new RawSourceWaveStream(tmpMemStream, waveFormat);
using (WaveStream convertedStream = WaveFormatConversionStream.CreatePcmStream(reader))
{
WaveFileWriter.CreateWaveFile(recordingsPath + "/" + outputFileName, convertedStream);
}
لا تنتمي إلى StackOverflow