[英]Handle setting up WaveFormat for mp3 memory stream in NAudio
我正在嘗試設置WaveStream,使其使用與傳入的mp3數據相同的格式。我通過讀取幀來獲取格式,但是當我嘗試使用新格式實際創建新的轉換流時, “ AcmNotPossible調用AcmStreamOpen”異常。
這是我嘗試設置新格式的地方:
Mp3Frame f = Mp3Frame.LoadFromStream(ms);
WaveFormat targetFormat = new Mp3WaveFormat(f.SampleRate, f.ChannelMode == ChannelMode.Mono ? 1 : 2, f.FrameLength, f.BitRate);
WaveFormatConversionStream conversionStream;
try
{
using (WaveStream blockAlignedStream =
new BlockAlignReductionStream(conversionStream = new WaveFormatConversionStream(targetFormat,
new Mp3FileReader(ms))))
{
using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
{
waveOut.Init(blockAlignedStream);
waveOut.Play();
我不確定是否將波形流設置為與mp3數據的格式匹配,是否還需要轉換任何內容。
注意:我嘗試使用WaveFormatStream.CreatePcmStream,但某些mp3卻出現“靜態/白噪聲”。 它們似乎是16位44,100立體聲,但被標記為版本1,第1層,與版本1,第3層正確播放相反。
此代碼示例似乎來自很久以前。 您不需要BlockAlignReductionStream
或WaveFormatConversionStream
,並且應遠離WaveOut
函數回調。 這足以從內存流中播放:
var reader = new Mp3FileReader(ms)
var waveOut = new WaveOutEvent();
waveOut.Init(reader);
waveOut.Play();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.