【问题标题】:re-creating WAV file重新创建 WAV 文件
【发布时间】:2020-08-07 23:56:00
【问题描述】:

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

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

此项目的编码格式不受支持。

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

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

我错过了什么?

【问题讨论】:

    标签: python-3.x scipy fft


    【解决方案1】:

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

    查看原始文件的WAV格式样本类型,并与你的两个scipy信号的向量长度和数值类型进行比较。

    【讨论】:

    • 感谢@hotpaw62,你很准。公平地说 - 我确实转换为 int,但我需要 Int16 而不是 Int23。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多