2012-07-16 76 views
4

我有一個程序,需要在一個字節數組中的MP3數據。它必須將該mp3數據轉換爲wav格式並將其存儲在一個字節數據中。我正在嘗試爲此使用NAudio。我正在使用下面的代碼來達到這個目的。如何將NAudio WaveStream寫入內存流?

Stream inputStream = ...; 
Stream outputStream = ...; 

using (WaveStream waveStream = WaveFormatConversionStream.CreatePcmStream(new Mp3FileReader(inputStream))) 
using (WaveFileWriter waveFileWriter = new WaveFileWriter(outputStream, waveStream.WaveFormat)) 
{ 
    byte[] bytes = new byte[waveStream.Length]; 
    waveStream.Read(bytes, 0, waveStream.Length); 
    waveFileWriter.WriteData(bytes, 0, bytes.Length); 
    waveFileWriter.Flush(); 
} 

當我運行上面的代碼時,我收到的所有字節數組都是0。但是如果使用WaveFileWriter將數據直接寫入文件,則文件將接收到正確的數據。有什麼理由?

+0

你試過設置位置爲0,讀它之前?只是一個想法。 – 2012-07-16 08:19:14

+0

@ChrisGessler WaveFileWriter不允許搜索。 – gibraltar 2012-07-16 09:23:36

+0

不指WaveFileWriter,WaveStream應該能夠尋找。 – 2012-07-16 09:44:04

回答

4

試試這個:

using (WaveStream waveStream = WaveFormatConversionStream.CreatePcmStream(new Mp3FileReader(inputStream))) 
using (WaveFileWriter waveFileWriter = new WaveFileWriter(outputStream, waveStream.WaveFormat)) 
{ 
    byte[] bytes = new byte[waveStream.Length]; 
    waveStream.Position = 0; 
    waveStream.Read(bytes, 0, waveStream.Length); 
    waveFileWriter.WriteData(bytes, 0, bytes.Length); 
    waveFileWriter.Flush(); 
}