2

我必须使用 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;
            }
        }
    }
}
4

1 回答 1

2

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

无论如何,您最好尝试使用 NVorbis 附带的 NAudio支持

于 2012-12-19T15:52:54.660 回答