gpt4 book ai didi

c# - 使用 NAudio 更改 wav 文件(到 16KHz 和 8bit)

转载 作者:太空狗 更新时间:2023-10-29 19:53:13 25 4
gpt4 key购买 nike

我想使用 NAudio 将 WAV 文件更改为 8KHz 和 8bit。

            WaveFormat format1 = new WaveFormat(8000, 8, 1);
byte[] waveByte = HelperClass.ReadFully(File.OpenRead(wavFile));
Wave
using (WaveFileWriter writer = new WaveFileWriter(outputFile, format1))
{
writer.WriteData(waveByte, 0, waveByte.Length);
}

但是当我播放输出文件时,声音只有滋滋声。我的代码是正确的还是有什么问题?

如果我将 WaveFormat 设置为 WaveFormat(44100, 16, 1),它工作正常。

谢谢。

最佳答案

一些提示:

  • 您需要使用 WaveFormatConversionStream 将一种采样率/位深度实际转换为另一种 - 您只是将原始音频放入具有错误波形格式的新文件中。
  • 您可能还需要分两步进行转换 - 首先更改采样率,然后更改位深度/ channel 数。这是因为底层 ACM 编解码器不能总是在一个步骤中完成您想要的转换。
  • 您应该使用 WaveFileReader 来读取您的输入文件 - 您只希望文件的实际音频数据部分得到转换,但您目前正在将包括 RIFF block 在内的所有内容复制到新文件中,就好像它们是音频数据一样。
  • 8 位 PCM 音频通常听起来很糟糕。使用 16 位,或者如果您必须有 8 位,请使用 G.711 u-law 或 a-law
  • 缩减音频采样率可能会导致混叠。要做好它,您需要先实现一个低通滤波器。不幸的是,这并不容易,但有些网站可以帮助您为您正在进行的特定下采样生成切比雪夫低通滤波器的系数。

下面是一些示例代码,展示了如何从一种格式转换为另一种格式。请记住,根据输入文件的格式,您可能需要分多个步骤进行转换:

using (var reader = new WaveFileReader("input.wav"))
{
var newFormat = new WaveFormat(8000, 16, 1);
using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
{
WaveFileWriter.CreateWaveFile("output.wav", conversionStream);
}
}

关于c# - 使用 NAudio 更改 wav 文件(到 16KHz 和 8bit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6647730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com