重新创建 WAV 文件
re-creating WAV file
我对 python 和 FFT 还很陌生,所以提前致歉 - 我正在尝试获取 WAV 文件并仅使用特定频率重新创建它(过滤掉不需要的频率)
我可以直观地绘制出所有内容,但很难根据结果重新创建可播放的 WAV 文件。
我已将我的问题最小化 - 如果我采用原始信号,我可以重新创建 WAV 文件。
如果我通过 rfft 运行 信号,然后立即通过 irfft 并尝试从结果中重新创建 WAV 文件,则该文件是在我尝试播放它时创建的 (Windows 10) 我得到一个错误
This item was encoded in a format that's not supported.
我正在使用的代码(减少到最低限度)
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)
我注意到的一件事是,创建的第一个文件为 5,619 KB(略低于原始文件的大小),而创建的第二个文件为 22,473 KB
我错过了什么?
您可能正在读取 16 位有符号整数样本并写出 64 位双精度浮点样本(scipy fft 函数的结果),因此最终得到一个大 4 倍的文件。
检查原始文件的WAV格式样本类型,并与你的两个scipy信号的矢量长度和数字类型进行比较。
我对 python 和 FFT 还很陌生,所以提前致歉 - 我正在尝试获取 WAV 文件并仅使用特定频率重新创建它(过滤掉不需要的频率)
我可以直观地绘制出所有内容,但很难根据结果重新创建可播放的 WAV 文件。 我已将我的问题最小化 - 如果我采用原始信号,我可以重新创建 WAV 文件。 如果我通过 rfft 运行 信号,然后立即通过 irfft 并尝试从结果中重新创建 WAV 文件,则该文件是在我尝试播放它时创建的 (Windows 10) 我得到一个错误
This item was encoded in a format that's not supported.
我正在使用的代码(减少到最低限度)
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)
我注意到的一件事是,创建的第一个文件为 5,619 KB(略低于原始文件的大小),而创建的第二个文件为 22,473 KB
我错过了什么?
您可能正在读取 16 位有符号整数样本并写出 64 位双精度浮点样本(scipy fft 函数的结果),因此最终得到一个大 4 倍的文件。
检查原始文件的WAV格式样本类型,并与你的两个scipy信号的矢量长度和数字类型进行比较。