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

标签 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;
            }
        }
    }
}

最佳答案

这意味着您的系统上没有可以执行请求的转换的ACM编解码器。您可以使用NAudio随附的NAudioDemo应用程序来检查系统上安装的所有ACM编解码器及其支持的输入和输出格式。 Windows当然不会随附Vorbis ACM编解码器,这可能就是为什么您的代码无法正常工作的原因。即使已安装Vorbis ACM编解码器,也需要正确获取WaveFormat,否则将出现ACM不可能的错误。

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

关于c# - 使用NAudio压缩音频WAV-错误AcmNotPossible调用acmStreamOpen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953991/

相关文章:

maven - 如何只编译Hadoop的压缩模块?

c# - 我收到以下错误“找不到ADSDS90002租户授权”。

c# - Entity Framework Eager and Lazy load

c# - 获取连接属性尚未设置错误

c# - 如何多次录制和播放音频,替换音频文件NAdio

NAudio - 将音频录制到内存中,对其进行更改,然后保存到磁盘

c# - 音频可视化工具C#

c# - 在 C# 中转换日期

opencv - 使用 OpenCV : ffmpeg? 打开 avi 文件

video - 如何从我的家庭电影文件中获取原始捕获时间戳:AVI 和 MPG4?