使用NAudio压缩音频WAV - 错误AcmNotPossible调用acmStreamOpen

时间:2012-12-19 13:58:53

标签: c# codec naudio wave

我必须使用NAudio压缩具有最佳编解码器的音频WAV。 我使用WaveFormatConversionStream,但我总是收到此错误:
"AcmNotPossible calling acmStreamOpen" 我已经阅读了很多关于此错误的答案,但我找不到解决方案。

这是我的代码,我错在哪里?

所有帮助都会很好并且欢迎:)

private void InvokeOnNewAudioData(byte[] data, AudioFormat audioFormat)
{
    WaveFormat waveFormat = new WaveFormat(audioFormat.NumberSamplesPerSec, audioFormat.NumberBitsPerSample, audioFormat.NumberChannels);

    WaveFormat targetFormat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.Vorbis1,
                                                            22000, //SampleRate
                                                            audioFormat.NumberChannels,     //Channels
                                                            48000,    //Average Bytes per Second
                                                            2,     //Block Align
                                                            16);    //Bits per Sample   


    using (MemoryStream dataStream = new MemoryStream(data))
    {
        using (WaveStream inputStream = new RawSourceWaveStream(dataStream, waveFormat))
        {
            try
            {
                using (WaveFormatConversionStream converter = new WaveFormatConversionStream(targetFormat, inputStream))
                {

                }
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

这意味着系统上没有可以执行请求转换的ACM编解码器。您可以使用NAudio附带的NAudioDemo应用程序来检查系统上安装的所有ACM编解码器及其支持的输入和输出格式。 Windows肯定没有Vorbis ACM编解码器,这可能是您的代码不起作用的原因。即使您安装了Vorbis ACM编解码器,也需要正确地使用WaveFormat ,否则您将无法获得ACM错误。

在任何情况下,尝试使用NVorbis附带的NAudio支持可能会更好。