【问题标题】:Handle setting up WaveFormat for mp3 memory stream in NAudio处理在 NAudio 中为 mp3 内存流设置 WaveFormat
【发布时间】:2015-09-25 18:56:57
【问题描述】:

我正在尝试设置 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 层。

【问题讨论】:

    标签: c# audio mp3 naudio pcm


    【解决方案1】:

    此代码示例似乎来自很久以前。你不需要BlockAlignReductionStreamWaveFormatConversionStream,你应该远离WaveOut 中的函数回调。这应该足以从内存流中播放:

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

    【讨论】:

      猜你喜欢
      • 2013-10-10
      • 2013-10-04
      • 1970-01-01
      • 2021-03-06
      • 2013-10-25
      • 2013-01-22
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      相关资源
      最近更新 更多