2010-11-20 20 views
2

Muhasebe kanunlarında kodlanmış sesi pcm sesine dönüştürmek için NAudio kullanmaya çalışıyorum. Hizmetim raw mu-law kodlanmış ses baytlarını POSTed ve NAudio'dan bir RIFF üstbilgisine sahip olmayan bir hata alıyorum. Bunu bir şekilde eklemem gerekir mi? Ben kullanıyorum kodudur:Muhasebe hukukunun kodunu çözmek için NAudio'yu kullanma

WaveFileReader reader = new WaveFileReader(tmpMemStream); 
using (WaveStream convertedStream = WaveFormatConversionStream.CreatePcmStream(reader)) 
{ 
    WaveFileWriter.CreateWaveFile(recordingsPath + "/" + outputFileName, convertedStream); 
} 

Ben de diske ham veri kaydetme ve hiçbir sorun ile çalışıyor Matlabda çözme yapıyorum. Teşekkürler.

cevap

3

Yalnızca ham mu-law verileriniz olduğundan, üzerinde bir WaveFileReader kullanamazsınız. Bunun yerine, WaveStream'den devralan yeni bir sınıf oluşturun.

Read yönteminde, verileri tmpMemStream'den döndürür. Bir WaveFormat olarak bir mu-law WaveFormat döndürün.

var waveFormat = WaveFormat.CreateMuLawFormat(8000, 1); 
var reader = new RawSourceWaveStream(tmpMemStream, waveFormat); 
using (WaveStream convertedStream = WaveFormatConversionStream.CreatePcmStream(reader)) 
{ 
    WaveFileWriter.CreateWaveFile(recordingsPath + "/" + outputFileName, convertedStream); 
} 
+0

Teşekkür: En girdi olarak RawSourceWaveStream ileterek

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

Şimdi daha önce yaptığı gibi dönüştürülen dosya oluşturmak için devam edebilirsiniz: İşte

Kullanabileceğin genel yardımcı sınıfı var İşaretle! Bu mükemmel çalıştı. – Sean

+0

tmpMemStream'im bir dosyaysa ne olur? – Har

İlgili konular