python - 使用 Python 从原始 WAV 音频文件中去除噪音(嘶嘶声)

标签 python matlab audio signal-processing wav

我想从波形音频文件中去除噪音(嘶嘶声)。全波音频图在这里:

我正在使用以下代码。这可能是一个愚蠢的尝试,但在 matlab 中我注意到噪声部分的幅度在 0-3000 之间变化。所以我试图将它们全部归零并将新帧保存到新的 wav 文件中。不知何故,它不起作用!

import wave
import sys
ip = wave.open(sys.argv[1], 'r')

op = wave.open(sys.argv[2], 'w')
op.setparams(ip.getparams())

for i in range(ip.getnframes()):
    iframes = ip.readframes(1)
    amp = int(iframes.encode('hex'),16)
    if amp > 32767:
        amp = 65535 - int(iframes.encode('hex'),16)#-ve
        print amp
    else:
        amp = int(iframes.encode('hex'),16)#+ve
        print amp
    if amp < 2000:
        #make it zero
        final_frame = '\x00\x00'
    else:
        #Keep the frame 
        final_frame = iframe
    op.writeframes(final_frame)
op.close()
ip.close()

运行上面的脚本后变成了这样:

噪声部分 (<= 2500 ) 仍然存在..所以请建议我如何去除那些不必要的部分!

最好的问候,

最佳答案

您的第一个问题是您将值解码为大端,而它们是 actually little-endian .您可以使用 struct module 轻松解决此问题.我还添加了 abs 函数,因为振幅通常是距零的距离,它始终为正数。

amplitude = abs(struct.unpack('<h', iframe))

这将使您的代码按照您的预期进行。不幸的是,它并没有解决更大的问题,即这完全是错误的方法。它不查看波形本身,一次只查看一个样本。满刻度运行的简单正弦波将有 许多 样本低于您的阈值,您将通过将它们设置为零来引入明显的失真。

关于python - 使用 Python 从原始 WAV 音频文件中去除噪音(嘶嘶声),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816401/

相关文章:

arrays - 为每个循环导入多个声音, ActionScript 3

python - 非单调数据的三次样条(不是一维函数)

python - 高效的 numpy 零阶保持

c - 通过 mex 传回数组

matlab - 如何在matlab中一次拍摄两个以上矩阵的外积?

javascript - 在 ios 或 android 中使用 safari 或 chrome 播放 mp3 文件

python - np.convolve 与 10**9 有什么问题?

python - 使用 Ubuntu .desktop 文件从 python 脚本显示 Tkinter 窗口

matlab - 您可以在 MATLAB 类的默认值中嵌套匿名函数吗?

javascript - MediaElement.js 音频播放器 - 有趣的移动包装