簡體   English   中英

處理NAudio中mp3內存流的WaveFormat設置

[英]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();

我不確定是否將波形流設置為與mp​​3數據的格式匹配,是否還需要轉換任何內容。

注意:我嘗試使用WaveFormatStream.CreatePcmStream,但某些mp3卻出現“靜態/白噪聲”。 它們似乎是16位44,100立體聲,但被標記為版本1,第1層,與版本1,第3層正確播放相反。

此代碼示例似乎來自很久以前。 您不需要BlockAlignReductionStreamWaveFormatConversionStream ,並且應遠離WaveOut函數回調。 這足以從內存流中播放:

var reader = new Mp3FileReader(ms)
var waveOut = new WaveOutEvent();
waveOut.Init(reader);
waveOut.Play();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM