我正试图在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是红鲱鱼?还有其他问题吗?
谢谢你的时间!
答案 0 :(得分:1)
我发现了这个问题。问题是我使用的是Mp3Frame中的WaveFormat,而不是Mp3解压缩程序提供的WaveFormat。 WaveOut需要完全解压缩音频的格式。