python – 如何将wav文件转换为浮动幅度

所以我问标题中的所有内容:

我有一个wav文件(由输入音频由PyAudio编写),我想将其转换为对应声级(幅度)的浮点数据,以进行一些傅立叶变换等…

任何人都有想法将WAV数据转换为浮点数?

解决方法:

我已经确定了两种不错的方法.

方法1:使用wavefile模块

使用这种方法如果你不介意安装一些额外的库,这些库在我的Mac上有点乱,但在我的Ubuntu服务器上很容易.

https://github.com/vokimon/python-wavefile

import wavefile

# returns the contents of the wav file as a double precision float array
def wav_to_floats(filename = 'file1.wav'):
    w = wavefile.load(filename)
    return w[1][0]

signal = wav_to_floats(sys.argv[1])
print "read "+str(len(signal))+" frames"
print  "in the range "+str(min(signal))+" to "+str(min(signal))

方法2:使用波形模块

如果您想减少模块安装麻烦,请使用此方法.

从文件系统读取一个wav文件,并将其转换为-1到1范围内的浮点数.它适用于16位文件,如果它们是> 1个通道,将以与文件中相同的方式交错样本.对于其他位深度,请根据本页底部的表将参数中的’h’更改为struct.unpack:

https://docs.python.org/2/library/struct.html

它不适用于24位文件,因为没有24位数据类型,因此无法告诉struct.unpack要做什么.

import wave
import struct
import sys

def wav_to_floats(wave_file):
    w = wave.open(wave_file)
    astr = w.readframes(w.getnframes())
    # convert binary chunks to short 
    a = struct.unpack("%ih" % (w.getnframes()* w.getnchannels()), astr)
    a = [float(val) / pow(2, 15) for val in a]
    return a

# read the wav file specified as first command line arg
signal = wav_to_floats(sys.argv[1])
print "read "+str(len(signal))+" frames"
print  "in the range "+str(min(signal))+" to "+str(min(signal))
上一篇:痞子衡嵌入式:语音处理工具pzh-speech诞生记(4)- 音频录播实现(PyAudio)


下一篇:WIFI、蓝牙、射频、Zigbee 浅谈智能家居的几种控制协议