2010-11-20 15 views
2

NAudioを使用して、mu-lawでエンコードされたオーディオをpcmオーディオにデコードしようとしています。私のサービスはraw mu-lawでエンコードされたオーディオバイトをPOSTしています。データにRIFFヘッダーがないというNAudioからのエラーが発生しています。何とかこれを追加する必要がありますか?私が使用しているコードは次のとおりです。NAudioを使用してmu-lawオーディオをデコードする

生データをディスクに保存し、問題なく動作しているMatlabでデコードしています。ありがとう。

答えて

3

生のmu-lawデータがあるだけなので、WaveFileReaderを使用することはできません。代わりに、WaveStreamから継承する新しいクラスを作成します。

Readメソッドでは、tmpMemStreamからデータを返します。 WaveFormatは、mu-law WaveFormatを返します。

ここでは使用することができ、一般的なヘルパークラスです:

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); 
} 
+0

感謝あなたはマーク!これは完全に機能しました。 – Sean

+0

私のtmpMemStreamがファイルの場合はどうなりますか? – Har

関連する問題