[英]Numpy RFFT/IRFFT volume
我正在从wave文件执行rfft和irfft:
samplerate, data = wavfile.read(location)
input = data.T[0] # first track of audio
fftData = np.fft.rfft(input[sample:], length)
output = np.fft.irfft(fftData).astype(data.dtype)
因此它从文件读取,然后执行rfft。 但是,当我用py音频流播放音频时,会产生很多噪音。 我尝试搜索此问题的答案并使用了以下解决方案:
这就是为什么在执行irfft时使用.astype(data.dtype)的原因。 但是,它并不能降低噪音,虽然可以降低噪音,但听起来还是不对的。
这是回放,其中p是pyAudio:
stream = p.open(format=pyaudio.paFloat32,
channels=1,
rate=fs,
output=True)
stream.write(output)
stream.stop_stream()
stream.close()
p.terminate()
那我在做什么错呢?
谢谢!
编辑:我也尝试在做irfft时使用.astype(dtype = np.float32),因为pyaudio在流音频时会使用它。 但是仍然很吵。
到目前为止,最好的工作解决方案似乎是使用中位数进行标准化,并使用.astype(np.float32)作为pyAudio输出为float32:
samplerate, data = wavfile.read(location)
input = data.T[0] # first track of audio
fftData = np.fft.rfft(input[sample:], length)
fftData = np.divide(fftData, np.median(fftData))
output = np.fft.irfft(fftData).astype(dtype=np.float32)
如果有人有更好的解决方案,我想听听。 我尝试使用均值归一化,但仍然导致剪辑音频,使用np.max进行归一化会使整个音频太低。 FFT的这种归一化问题总是给我带来麻烦,因此在SO中找不到任何100%有效的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.