n音訊庫WAV文件:http://naudio.codeplex.com/麻煩的MP3文件轉換爲使用n音訊
我想要一個MP3文件轉換爲WAV文件,但我在一個小的錯誤運行。我知道發生了什麼問題,但我不知道如何去修復它。
這裏是我跑了一段代碼:
private void button1_Click(object sender, EventArgs e) {
using(Mp3FileReader reader = new Mp3FileReader(@"path\to\MP3")) {
using(WaveFileWriter writer = new WaveFileWriter(@"C:\test.wav", new WaveFormat())) {
int counter = 0;
while(reader.Read(test, counter, test.Length + counter) != 0) {
writer.WriteData(test, counter, test.Length + counter);
counter += 512;
}
}
}
}
reader.Read()進入Mp3FileReader類和方法是這樣的:
public override int Read(byte[] sampleBuffer, int offset, int numBytes)
{
if (numBytes % waveFormat.BlockAlign != 0)
//throw new ApplicationException("Must read complete blocks");
numBytes -= (numBytes % waveFormat.BlockAlign);
return mp3Stream.Read(sampleBuffer, offset, numBytes);
}
mp3Stream是一個對象Stream類。
問題是:我得到一個ArgumentException。 MSDN說這是因爲offset和numBytes的總和大於sampleBuffer的長度。
文檔:http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx
這是因爲我每次都增加計數器,但該字節數組test
的大小保持不變。
我一直在想的是:我是否需要動態增加數組的大小,還是需要在開始時查找所需的大小並立即設置它?
而且,而不是512,Mp3FileReader中的方法第一次返回365。這是一個整塊的大小。但我正在寫滿512.我基本上只是用讀取來檢查我是否還沒有結束文件。我是否需要抓住回報價值並做一些事情,還是我在這裏很好?
好吧,我現在這樣做,結果是很多靜態噪聲。不過,這是一個完全不同的問題。 – KdgDev 2010-05-08 18:59:57
嘗試更改byte [] buf = new byte [4096];而不是字節buf =新字節[4096]; – fyasar 2011-06-15 07:14:06
這不適用於我嘗試的Windows 8.1 Store應用程序。你可以發佈更新的方法或指導我正確的鏈接? – Wajahat 2014-02-14 16:50:23