python-3.x - 重新创建 WAV 文件
问题描述
我对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
我错过了什么?
解决方案
您可能正在读取 16 位有符号整数样本并写出 64 位双浮点样本(scipy fft 函数的结果),因此最终文件会大 4 倍。
检查原始文件的WAV格式样本类型,并与您的两个scipy信号的向量长度和数字类型进行比较。
推荐阅读
- java - 从 arrayList 中删除对象并打印出剩余的对象
- javascript - 为什么参数 multi 在 mongo 请求中不起作用?
- jpa - Kotlin JPA 继承建议
- java - 对象构造在实践中是否保证所有线程都看到初始化的非最终字段?
- amazon-web-services - AWS Cloud9 ...很好,但我只能从默认 VPC 中的根账户启动它
- javascript - 使用本地存储来保持侧边栏的位置
- node.js - 使用 Node.js 控制多个 MAX7219
- python - 如何在 Python 中压缩文件而不是文件夹/目录
- python-3.x - 错误:'builtin_function_or_method' 对象不可迭代
- python - Discordpy Selfbot 不加入服务器但不引发错误