如何用python规范化原始音频文件

如何用python规范化原始音频文件,python,audio,normalization,Python,Audio,Normalization,我在机器人的音频流中工作。我正在使用python,并将流式处理结果保存在.raw文件中。当我试图复制文件时,它非常嘈杂。我需要规范化原始音频,并将新清理的音频保存在一个数据阵列中,然后保存到一个新的原始文件中 我看到,如果我将原始文件导入audacity,然后应用效果normalize,则噪声将被删除,音频将完全可听见。(在audacity效果normalize中,我将normalize maximun振幅设置为-1.0 dB) 这是原始数据的内容(out_1_2.raw是包含我在Audacit

我在机器人的音频流中工作。我正在使用python,并将流式处理结果保存在.raw文件中。当我试图复制文件时,它非常嘈杂。我需要规范化原始音频,并将新清理的音频保存在一个数据阵列中,然后保存到一个新的原始文件中

我看到,如果我将原始文件导入audacity,然后应用效果normalize,则噪声将被删除,音频将完全可听见。(在audacity效果normalize中,我将normalize maximun振幅设置为-1.0 dB)

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

A=np.fromfile('out\u 1\u 2.raw',dtype='int16')
印刷品(A.形状)
打印(“最大值-->”+str(最大值(绝对值(A)))
此代码的输出为:

(1638400,)
[    0     0  7168 16560     0     0  1024 16561     0     0]
A MAX --> 32704
(1638400,)
[     0 -16384 -22494  16316      0   8192  17813  16318      0  24576]
B MAX --> 32767
在Audacity中导入out_1_2.raw并应用上述规格化效果后,我从Audacity将新的audible wave导出到一个新的原始文件(out_1_2_normalized.raw),生成的文件具有以下内容:

B=np.fromfile('out\u 1\u 2\u normalized.raw',dtype='int16')
印刷品(B.shape)
打印(“B最大值-->”+str(最大值(abs(B)))
此代码的输出为:

(1638400,)
[    0     0  7168 16560     0     0  1024 16561     0     0]
A MAX --> 32704
(1638400,)
[     0 -16384 -22494  16316      0   8192  17813  16318      0  24576]
B MAX --> 32767
我希望知道此转换必须使用的算法是什么,以便在python代码中应用它。如果我需要从零开始实现算法,或者如果有可以使用的python库


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


非标准化信号=np.数组([np.random.randint(-32768,32767)用于范围(16)中的样本)],np.int16)#只是具有适当类型的wav范围中的随机16样本信号。
打印(np.max(np.abs(非标准化信号)))
标准化信号=np.array([(非标准化信号/np.max(非标准化信号))*32767],np.int16)
打印(np.max(np.abs(归一化_信号)))
归一化首先将信号除以其最大绝对值。这会将其投影到[-1,1]空间,然后乘以wav范围中的最大值,将其投影回来。最后,我创建了一个具有适当数据类型的新数组,以确保仍然有一个有效的16位wav数组


我希望这有帮助

我真的不明白
规范化
是如何去除音频中的噪音的!你能上传一个音频文件的样本吗?我添加了一个音频文件的样本。首先,它不是你原始文件中存在的噪音。你确定单靠规范化就能解决所有问题吗?你们在规范化文件后听过它吗?是的,只有规范化才能解决我的问题。音频完全听得见。如果您能听到结果,只需将附加的原始音频文件导入audacity(这是一个单声道,这些是导入编码的参数:64位浮点,字节顺序:Little endian,通道:1 Channell(单声道),起始偏移量:0字节,导入量:100%,采样率:44100 Hz)。然后在导入后,您只需应用效果normalize,音频就会完全听得见。(在Audacity effect normalize中,我将normalize maximun振幅设置为-1.0 dB),您应该打印
max(abs())
,而不仅仅是
max()
。您完全正确。我只是在代码的调试部分有点懒,现在将对其进行调整。