我试过四处寻找有关这方面的信息,但我真的不适合这里。我是一个喜欢玩 Python 的人,我想制作一个过滤音频文件的程序。我正在使用 Python 和 NumPy,以及用于导入和导出 Wave 文件的 scipy.io.wavfile 模块。我已经弄乱了音量,但没有过滤。这是我到目前为止所拥有的。
rate, data = wavfile.read('./TriLeftChannel.wav')
filtereddata = numpy.fft.rfft(data) # FFT Filtered data
freqdata = numpy.fft.fftfreq(data.size) #Frequency data
filtereddata = AudioFunctions.Filter(filtereddata, freqdata, data, rate) # Filter the data
def Filter(filtereddata, freqdata, data, rate):
#fftchunks = (rate / 2)# + 1
x = freqdata[:len(data) / 2]
for f in range(len(x)):
if x[f] > 0.1:
filtereddata[f] = 0.0
filtereddata[len(data) / 2 + f] = 0.0
return filtereddata
在该函数中,filtereddata 是 FFT 数据,freqdata 是我使用 fftfreq() 获得的频率数据,data 是波形文件本身,“裸”。速率是采样率(虽然我不使用它)。这个函数实际上并没有过滤频率(虽然我知道它是一个硬滤波器,没有滤波器真的应该这么苛刻)。完成后,我输出文件
filteredwrite = numpy.fft.irfft(filtereddata)
filteredwrite = numpy.round(filteredwrite).astype('int16') # Round off the numbers, and get ready to save it as 16-bit depth file (?)
wavfile.write('TestFiltered.wav', rate, filteredwrite)
由于即使走到这一步我也有点挣扎,我想知道是否有人可以给我任何指示或 FFT 的初学者教程?当然,任何帮助将不胜感激。
编辑:修复了缩进问题。