如何改变.wav格式音频文件的比特率

本文关键字:音频 格式 文件 比特率 wav 何改变 改变 | 更新日期: 2023-09-27 18:17:09

在我的应用程序中,我有一些。wav格式的音频文件,在这里我检查音频文件的比特率通过使用Naudio dll,如果比特率低于128kbps那么我想把它改为高于128kbps,所以我写下面的代码检查比特率,如果它小于128kbps那么它转换为高于128kbps。

int bitrate;
using (var reader = new WaveFileReader(textBox1.Text))
{
    bitrate = reader.WaveFormat.AverageBytesPerSecond * 8;
    reader.Dispose();
}
if (bitrate < 128000)
{
    using (var reader = new WaveFileReader(textBox1.Text))
    {
     var newFormat = new WaveFormat(8000, 16, 1);
        using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
        {
            WaveFileWriter.CreateWaveFile(@"C:'Docs'Files'", conversionStream);
        }
    }
}

对于某些文件,它工作正常,但对于某些文件,我得到以下错误,

类型为'NAudio '的未处理异常。在NAudio.dll中发生MmException附加信息:AcmNotPossible调用acmStreamOpen

我在这里附加错误Snap。错误在这里,我该如何解决这个问题?

如何改变.wav格式音频文件的比特率

我建议您看一下FFmpeg。这是我使用的所有音频/视频转换任务。

它是一个命令行工具,可以从几乎任何东西转换成任何东西,有很多选项。要执行您想要的操作,您可能需要运行如下命令:

$ ffmpeg -i input.wav -ab 128 output.wav

在上面一行中,我们将文件转换为128比特率。

在代码中使用它的最简单方法是在项目中包含FFmpeg可执行文件(或作为环境变量全局安装),并直接使用以下命令调用它:
Process process = new Process();
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.FileName = "ffmpeg";
process.StartInfo.Arguments = $"-i '"{originalFile}'" -ab 128 '"{outputPath}'"";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = false;
process.Start();
process.WaitForExit(); 

有更优雅的解决方案-围绕FFmpeg的包装-但这应该可以达到目的。

WaveFormatConversionStream查找能够执行请求的转换的ACM编解码器。并不是所有的转变都是可能的。例如,你通常不能一次改变采样率、位深度和通道数。因此,可能的转换取决于传入音频的确切WaveFormat。您可能需要在一个步骤中下载样本,并在另一个步骤中从立体声到单声道。MediaFoundationResampler更灵活,可能一步就能完成。