我试图设置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层可以正确播放。
答案 0 :(得分:0)
此代码示例似乎来自很长一段时间。你不需要\r\n
或BlockAlignReductionStream
,你应该远离WaveFormatConversionStream
中的函数回调。这应该足以从内存流中播放:
WaveOut