我想重新實現一個現有的Matlab 8波段均衡器GUI,我在上週用C#爲一個項目創建了GUI。在Matlab中,歌曲會作爲一個動態數組加載到內存中,在那裏它們可以自由操作,播放和聲音(數組)一樣容易。使用NAudio操作Mp3作爲數組使用NAudio
我發現了NAudio庫,它方便地已經有Mp3提取器,播放器,並定義了卷積和FFT。我能夠打開MP3並將其所有數據讀取到一個數組中(儘管我不確定我是否正確地進行了處理)。但是,即使查看了幾個示例,我也很難弄清楚把這個數組寫回流中,以便正確播放它(我不需要寫入文件)。
之後我才發現,我讀我的MP3是這樣的例子:
private byte[] CreateInputStream(string fileName)
{
byte[] stream;
if (fileName.EndsWith(".mp3"))
{
WaveStream mp3Reader = new Mp3FileReader(fileName);
songFormat = mp3Reader.WaveFormat; // songFormat is a class field
long sizeOfStream = mp3Reader.Length;
stream = new byte[sizeOfStream];
mp3Reader.Read(stream, 0, (int) sizeOfStream);
}
else
{
throw new InvalidOperationException("Unsupported Exception");
}
return stream;
}
現在我有大概包含原始音頻數據,我打算最終隱蔽到彩車,以貫穿字節數組DSP模塊。不過,現在我只是想看看我是否可以播放字節數組。
Stream outstream = new MemoryStream(stream);
WaveFileWriter wfr = new WaveFileWriter(outstream, songFormat);
// outputStream is an array of bytes and a class variable
wfr.Write(outputStream, 0, (int)outputStream.Length);
WaveFileReader wr = new WaveFileReader(outstream);
volumeStream = new WaveChannel32(wr);
waveOutDevice.Init(volumeStream);
waveOutDevice.Play();
在WaveFileReader(outstream)拋出的現在,我收到錯誤這不能不說無法讀取超過了流的末尾。我懷疑這不是我唯一不正確的做法。任何見解?