InvalidParameter调用waveOutOpen

时间:2017-06-29 02:08:33

标签: c# naudio waveout

我正试图在Mark Heath的博客here之后使用NAudio的BufferedWaveProvider实现Mp3流媒体。

我已经实现了所有的流媒体,但是我收到了一条MmException,其中包含“InvalidParameter调用waveOutOpen”消息。

我看到了这个相关的问题:InvalidParameter calling waveOutOpen MmException,所以我看了一下使用以下代码片段的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是红鲱鱼?还有其他问题吗?

谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

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