Python 3.x 重新创建WAV文件

Python 3.x 重新创建WAV文件,python-3.x,scipy,fft,Python 3.x,Scipy,Fft,我对python和FFT相当陌生,所以请提前道歉-我正在尝试获取一个WAV文件,并仅使用特定频率重新创建它(过滤掉不需要的频率) 我能够直观地绘制所有内容,但我很难根据结果重新创建一个可播放的WAV文件。 我已经最小化了我的问题-如果我接受原始信号,我可以重新创建WAV文件。 如果我通过rfft运行信号,然后立即通过irfft运行信号,并尝试根据结果重新创建WAV文件,则当我尝试播放该文件时(Windows 10),我会得到一个错误 此项的编码格式不受支持 我正在使用的代码(减少到最低限度) 我

我对python和FFT相当陌生,所以请提前道歉-我正在尝试获取一个WAV文件,并仅使用特定频率重新创建它(过滤掉不需要的频率)

我能够直观地绘制所有内容,但我很难根据结果重新创建一个可播放的WAV文件。 我已经最小化了我的问题-如果我接受原始信号,我可以重新创建WAV文件。 如果我通过rfft运行信号,然后立即通过irfft运行信号,并尝试根据结果重新创建WAV文件,则当我尝试播放该文件时(Windows 10),我会得到一个错误

此项的编码格式不受支持

我正在使用的代码(减少到最低限度)

我注意到的一点是,创建的第一个文件是5619KB(刚好低于原始文件的大小),而创建的第二个文件是22473KB


我错过了什么

您可能正在读取16位有符号整数样本,并写出64位双浮点样本(scipy fft函数的结果),因此最终会得到一个大4倍的文件


检查原始文件的WAV格式样本类型,并将其与两个scipy信号的矢量长度和数字类型进行比较。

谢谢@hotpaw62,您的回答非常正确。公平地说,我确实做了到int的转换,但是我需要Int16而不是Int23。谢谢
fs_rate, signal = wavfile.read(filename)
FFT = scipy.fft.rfft(signal)
recreated_signal = scipy.fft.irfft(FFT)
scipy.io.wavfile.write('recreated file1.wav',fs_rate,signal)
scipy.io.wavfile.write('recreated file2.wav',fs_rate,recreated_signal)