【问题标题】:How to normalize a raw audio file with python如何使用 python 规范化原始音频文件
【发布时间】:2019-09-13 14:13:00
【问题描述】:

我正在处理来自机器人的音频流。我正在使用 python,并将流式传输结果保存在 .raw 文件中。当我尝试重现文件时,它非常嘈杂。我需要标准化原始音频并将新清理的音频保存在我将保存到新原始文件中的 ndarray 中。

我看到,如果我将原始文件导入 Audacity,然后应用效果归一化,则噪声会被移除并且音频完全听得见。(在 Audacity 效果归一化中,我将归一化最大振幅设置为 -1.0 dB)

这是原始数据的内容(out_1_2.raw 是包含我在 Audacity 中导入的音频的文件)

A = np.fromfile('out_1_2.raw', dtype='int16')
print(A.shape)
print("A MAX --> "+ str(max(abs(A))))

这段代码的输出是:

(1638400,)
[    0     0  7168 16560     0     0  1024 16561     0     0]
A MAX --> 32704

在 Audacity 中导入 out_1_2.raw 并应用上述规范化效果后,我从 Audacity 将新的可听波导出到新的原始文件 (out_1_2_normalized.raw),生成的文件具有以下内容:

B = np.fromfile('out_1_2_normalized.raw', dtype='int16')
print(B.shape)
print("B MAX --> "+ str(max(abs(B))))

这段代码的输出是:

(1638400,)
[     0 -16384 -22494  16316      0   8192  17813  16318      0  24576]
B MAX --> 32767

我希望知道必须用于此转换的算法是什么,以便我可以在我的 python 代码中应用它。如果我需要从零开始实现算法,或者是否有可以使用的python库。

这是raw audio file的示例

【问题讨论】:

  • 我真的不明白Normalize 是如何消除您音频中的噪音的!你能上传一个音频文件的样本吗?
  • 我添加了音频文件的样本。
  • 首先,原始原始文件中出现的不是噪音。您确定仅规范化就可以解决所有问题吗?规范化后你听过文件吗?
  • 是的,单独规范化可以解决我的问题。音频完全听得见。如果您能听到结果,只需将附加的原始音频文件导入 audacity(它是一个单声道轨道,这些是导入编码的参数:64 位浮点数,字节顺序:小端,通道:1 Channell(单声道),起始偏移量:0 字节,导入量:100%,采样率:44100 Hz)。然后在导入之后,您只需应用效果标准化,音频就变得完全可听了。(在 Audacity 效果标准化中,我将标准化最大振幅设置为 -1.0 dB)

标签: python audio normalization


【解决方案1】:

您的 wav 信号是一个数字 16 位信号,范围为 -32768 到 +32767。归一化后得到的最大值告诉我您正在归一化以使峰值等于范围的最大值。为了在 numpy 中做到这一点,您通常可以简单地执行以下操作:


not_normalized_signal = np.array([np.random.randint(-32768, 32767) for sample in range(16)], np.int16)  # Just a random 16 sample signal in the wav range with appropriate type.
print(np.max(np.abs(not_normalized_signal)))

normalized_signal = np.array([(not_normalized_signal / np.max(np.abs(not_normalized_signal))) * 32767], np.int16)

print(np.max(np.abs(normalized_signal)))

归一化首先将信号除以其最大绝对值。这会将其投影到 [-1, 1] 空间,然后乘以 wav 范围的最大值,将其投影回来。最后,我创建了一个具有适当 dtype 的新数组,以确保我们仍然有一个有效的 16 位 wav 数组。

我希望这会有所帮助!

【讨论】:

  • 你应该打印max(abs()),而不仅仅是max()
  • 你说得对。只是代码调试部分有点偷懒,现在调整一下。
猜你喜欢
  • 2021-02-21
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2017-08-30
  • 2023-04-05
相关资源
最近更新 更多