【发布时间】:2012-04-30 15:45:49
【问题描述】:
我一直在使用 FFT,目前正在尝试使用 FFT 从文件中获取声音波形(最终修改它),然后将修改后的波形输出回文件。我得到了声波的 FFT,然后在其上使用了逆 FFT 函数,但输出文件听起来根本不对。我没有对波形进行任何过滤——我只是在测试获取频率数据,然后将其放回文件中——听起来应该是一样的,但听起来却大不相同。
从那以后,我一直在研究这个项目,但还没有得到想要的结果。输出的声音文件很嘈杂(更大声,以及原始文件中不存在的额外噪音),并且来自一个通道的声音泄漏到另一个通道(之前是静音的)。输入声音文件是立体声、2 声道文件,声音仅来自一个声道。这是我的代码:
import scipy
import wave
import struct
import numpy
import pylab
from scipy.io import wavfile
rate, data = wavfile.read('./TriLeftChannel.wav')
filtereddata = numpy.fft.rfft(data, axis=0)
print(data)
filteredwrite = numpy.fft.irfft(filtereddata, axis=0)
print(filteredwrite)
wavfile.write('TestFiltered.wav', rate, filteredwrite)
我不太明白为什么这不起作用。
我已经压缩了问题 .py 文件和音频文件,如果这可以帮助解决问题here。
【问题讨论】:
-
在保存之前尝试添加
filteredwrite = numpy.round(filteredwrite).astype('int16') -
@Bago - 非常感谢!这完全解决了问题。我想知道,将过滤后的 ifft 强制为“int16”是否意味着它将是一个 16 位深度的声音文件?
-
我对 wav 文件了解不多,我一直认为它们是未压缩的原始数据,但您必须阅读 wav 格式规范才能确定。
-
@Bago - 我明白了。好的,非常感谢!
标签: python audio numpy fft audio-processing