如何使用NAudio将PCM音频转换为TrueSpeech

时间:2012-03-21 22:47:22

标签: naudio

我正在尝试使用NAudio将PCM 8位8 KHz单声道文件转换为DSP TrueSpeech 1位8 kHz单声道,我收到以下错误:

NAudio.dll中出现“NAudio.MmException”类型的第一次机会异常 AcmNotPossible调用acmStreamOpen

据我所知,我可能会缺少一个中间步骤 - 任何见解都会受到赞赏。这是我正在使用的代码:

      WaveFormat outWaveFormat;
        outWaveFormat = new TrueSpeechWaveFormat();
        Debug.Print("Sample Rate: " + outWaveFormat.SampleRate); //displays "8000"
        Debug.Print("Bit Rate: " + outWaveFormat.BitsPerSample); //displays "1"

        FileInfo f = new FileInfo(inputFile);
        String outputFileName = this.txtDest.Text + @"\" + f.Name;

        using (WaveFileReader reader = new WaveFileReader(inputFile))
        {
            try
            {
                using (WaveStream convertedStream = new WaveFormatConversionStream (outWaveFormat, reader))
                {
                    WaveFileWriter.CreateWaveFile(outputFileName, convertedStream);

                }
            }
            catch (Exception ex)
            {
                Debug.Print(ex.Message);
            }
        }

1 个答案:

答案 0 :(得分:0)

可能发生的两个原因:

  1. 您没有TrueSpeech编码器。我认为Windows的新版本不再包含TrueSpeech - 它实际上已经过时了。您可以运行NAudioDemo应用程序以查看计算机上的ACM编解码器。

  2. 您的输入格式无法一步转换为目标格式。你确定你的输入是PCM。另外我希望TrueSpeech编解码器想要16位输入而不是8位。

  3. 第三个原因可能会发生,虽然我认为它不会影响TrueSpeech,而且WaveFileWriter.CreateWaveFile假定AverageBytesPerSecond是BlockAlign的精确倍数,但并非总是如此。