【问题标题】:InvalidParameter calling waveOutOpen调用 waveOutOpen 的无效参数
【发布时间】:2017-12-02 13:42:02
【问题描述】:

我正在尝试按照 Mark Heath 的博客 here 使用 NAudio 的 BufferedWaveProvider 实现 Mp3 流。

我已经实现了所有的流式传输,但我收到了一个 MmException 消息“InvalidParameter calling waveOutOpen”。

我看到了这个相关问题:InvalidParameter calling waveOutOpen MmException,所以我查看了使用以下代码 sn-p 获得的 WaveFormat:

private WaveFormat CreateWaveFormat(Mp3Frame frame)
{
    var numberOfChannels = frame.ChannelMode == ChannelMode.Mono ? 1 : 2;
    return new Mp3WaveFormat(frame.SampleRate, numberOfChannels, frame.FrameLength, frame.BitRate);
}

这是我从调试器中获取的 WaveFormat:

-       sampleProvider.WaveFormat   {MpegLayer3}    NAudio.Wave.WaveFormat {NAudio.Wave.Mp3WaveFormat}
    AverageBytesPerSecond   32000   int
    BitsPerSample   0   int
    BlockAlign  1   int
    Channels    2   int
    Encoding    MpegLayer3  NAudio.Wave.WaveFormatEncoding
    ExtraSize   12  int
    SampleRate  48000   int
    averageBytesPerSecond   32000   int
    bitsPerSample   0   short
    blockAlign  1   short
    blockSize   768 ushort
    channels    2   short
    codecDelay  0   ushort
    extraSize   12  short
    flags   PaddingIso  NAudio.Wave.Mp3WaveFormatFlags
    framesPerBlock  1   ushort
    id  Mpeg    NAudio.Wave.Mp3WaveFormatId
    sampleRate  48000   int
    waveFormatTag   MpegLayer3  NAudio.Wave.WaveFormatEncoding
+       Static members  

为了测试这一切,我将一个测试 Mp3 文件加载到 FileStream 中。当我使用 Mp3FileReader 读取整个流时,我决定看看 WaveFormat 的样子,有趣的是,我得到了一个完全不同的 WaveFormat:

-       format  {16 bit PCM: 48kHz 2 channels}  NAudio.Wave.WaveFormat
    AverageBytesPerSecond   192000  int
    BitsPerSample   16  int
    BlockAlign  4   int
    Channels    2   int
    Encoding    Pcm NAudio.Wave.WaveFormatEncoding
    ExtraSize   0   int
    SampleRate  48000   int
    averageBytesPerSecond   192000  int
    bitsPerSample   16  short
    blockAlign  4   short
    channels    2   short
    extraSize   0   short
    sampleRate  48000   int
    waveFormatTag   Pcm NAudio.Wave.WaveFormatEncoding

我查看了这两种情况下流的前 16 个字节,它们是相同的。有什么想法我哪里出错了吗?还是不同的 WaveFormats 是一个红鲱鱼?会不会是其他问题?

感谢您的宝贵时间!

【问题讨论】:

    标签: c# naudio waveout


    【解决方案1】:

    我发现了问题。问题是我使用的是 Mp3Frame 中的 WaveFormat,而不是 Mp3 解压缩器提供的 WaveFormat。 WaveOut 需要完全解压缩的音频格式。

    【讨论】:

      猜你喜欢
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      相关资源
      最近更新 更多