Python将数组转换为Wav

7
在Python中,我有一个由浮点数组成的数组,表示模拟信号的电压。请问如何将该数组转换为.wav格式?我看到了this。我需要先将数据格式从[1.23,1.24,1.25,1.26](例如)更改为1.231.241.251.26,然后再添加标头以便正确读取吗?最终,我计划对这些值使用FFT来推导基本频率,如果这种情况下有更好的方法来存储这些值吗?谢谢。

你可以查看 wave 模块。 - DreadfulWeather
http://soledadpenades.com/2009/10/29/fastest-way-to-generate-wav-files-in-python-using-the-wave-module/ - KingMak
如果您最终打算执行FFT,那么编写WAV文件有什么意义呢?一个明显的问题是,您的模拟电压级别将会丢失,因为您需要重新缩放数据以达到-1.0至1.0,并且WAV没有本地存储缩放信息的方法(除非您将其嵌入自定义riff块中)。 - jaket
@DreadfulWeather,wave模块的文档在描述writeframes期望数据方面相当不足。 - Mark Ransom
我的信号存在偏差,返回0到5之间的10位结果。 - DonnellyOverflow
我想将其转换为wav格式,以便我可以测试到目前为止的设置,并查看在使用FFT后流是否包含正确的信息。 - DonnellyOverflow
1个回答

8
如果你知道信号的采样频率,并且数据已经通过max(abs(data))适当缩放,则可以使用scipy轻松完成:
from __future__ import print_function
import scipy.io.wavfile as wavf
import numpy as np

if __name__ == "__main__":

    samples = np.random.randn(44100)
    fs = 44100
    out_f = 'out.wav'

    wavf.write(out_f, fs, samples)

你也可以使用标准的wave模块。


能否从numpy中获取wav文件而无需保存? - ERJAN
你可以修改scipy.io.wavfile.write函数,从numpy数组中获取完整wav文件的字节 https://github.com/scipy/scipy/blob/37b650e04f3bf49bc11cfcd18f2848ad4f957a0d/scipy/io/wavfile.py#L699 - khuang834

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接