سؤال

أحاول استخدام 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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top