AcmNotPossible调用acmStreamOpen错误

时间:2016-10-13 11:48:24

标签: c# asp.net naudio

在我的应用程序中,我有一些音频文件是 .wav 格式,这里我检查每个音频文件 BitRate ,如果任何文件低于128Kbps,我通过使用以下代码

将这些文件的比特率更改为128kbps
int bitrate;
string FullPath = @Server.MapPath("~/AudioFiles/");
string[] filePaths = Directory.GetFiles(FullPath, "*.wav", SearchOption.AllDirectories);
for (int i = 0; i < filePaths.Length; i++)
{
    string[] FileExt = filePaths[i].Split('\\');
    string[] Ext = FileExt[FileExt.Length - 1].Split('.');
    string ExtFile = Ext[Ext.Length - 1];
    if (ExtFile == "wav" || ExtFile == "WAV")
    {
        using (var reader = new WaveFileReader(filePaths[i]))
        {
            bitrate = reader.WaveFormat.AverageBytesPerSecond * 8;
            reader.Dispose();
        }
        if (bitrate < 128000)
        {
            using (var reader = new WaveFileReader(filePaths[i]))
            {
                var newFormat = new WaveFormat(8000, 16, 1);
                using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
                {
                    WaveFileWriter.CreateWaveFile(Server.MapPath("~/AudioFiles/" + FileExt[FileExt.Length - 1]), conversionStream);
                }
            }
    }
}

上面的代码适用于大多数文件,但是对于某些音频文件,我得到以下错误。enter image description here  我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您通常只能使用ACM一次更改一件事,因此如果您有16kHz立体声文件,则无法一次性转到8kHz单声道文件。

因此,您需要查看WaveFormat WaveFileReader的{​​{1}},并可能执行多个转化步骤。

也可能是您的输入WAV文件正在使用ACM无法解码的编解码器。但是,您需要再次检查输入WaveFormat以了解相关信息。