【问题标题】:Wav file not in range of -1 to 1 [closed]Wav文件不在-1到1的范围内[关闭]
【发布时间】:2014-02-14 13:28:47
【问题描述】:

我正在记录来自串行端口的字节并使用 NAudio 将它们转换为 wav 文件。但是,当我绘制我的 wav 文件时,它确实具有正确的外观。它的范围是 0 到 1,但其他 wav 文件的范围是 -1 到 1。它与编码或其他有关吗?

WaveFormat waveFormat = new WaveFormat(8000, 8, 1);
using (WaveFileWriter writer = new WaveFileWriter(fileName, waveFormat))
{
     writer.Write(audioBuffer, 0, audioBuffer.Length);
}

【问题讨论】:

  • 这个“坏”文件的出现频率如何?如果它是最新的,也许它只是“abs”'et?
  • 对于所有文件,它始终介于 0 和 1 之间。
  • 传入的音频是什么格式?你创建的 WAV 文件是什么 WaveFormat?
  • 我有一个 STM32F417 并连接了一个模拟麦克风。在 STM 上。它将交流电转换为直流电并向我发送字节值。我已经添加了我正在使用的代码。

标签: c# signal-processing naudio


【解决方案1】:

这取决于“audioBuffer”中的数据类型。

32 位浮点音频样本通常在 -1.0 到 1.0 的范围内。 16 位整数音频样本通常在 -32768 到 32767 范围内有符号。8 位整数音频样本非常普遍是无符号的,范围是 0 到 255,其中 128 与浮点数中的 0.0 相同。

【讨论】:

    【解决方案2】:

    -1 到 +1 范围通常是在将 PCM 数据转换为 32 位浮点数时的工作范围,以便于混合。

    它允许一个很好的、标准化的幅度表示,同时为混音留出足够的头部空间。

    如果您得到 0 到 1 的范围,则转换过程中可能出现问题:wav 通常(但不总是)存储为 16 位有符号整数,转换为浮点数意味着乘以 32768(如果位深度为 16 并且以 16 位有符号整数表示的数据)。查看 wav 的标头以更深入地了解格式 - 有关 wav 标头的更多信息,请点击此处。

    https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

    【讨论】:

    • +1,只是因为我在澳大利亚的海里看到了你的裸体……
    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 2017-11-28
    • 2012-11-22
    • 2021-12-23
    • 2018-06-30
    • 2021-08-26
    • 2019-11-25
    • 1970-01-01
    相关资源
    最近更新 更多