繁体   English   中英

numpy RFFT / IRFFT音量

[英]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音频流播放音频时,会产生很多噪音。 我尝试搜索此问题的答案并使用了以下解决方案:

rfft或irfft增加python中的wav文件量

这就是为什么在执行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM