如何在python中将16位PCM数据转换为float?

时间:2014-10-30 13:52:33

标签: python audio numpy raspberry-pi unpack

我是python和Raspberry pi的新手。我参与了一个项目,我必须在wav文件中嵌入一点流。起初我打开了wav文件,它是一个2通道,16位的wav文件。为了更改样本值,我应该将这些样本值转换为float。我试过一个代码。但是当我运行模块时,它会给出错误,因为“name struct”没有定义。而且在这里我试图将数据转换为整数,因为我不知道如何转换成float。如果有人可以帮我纠正这个程序或建议另一个代码,那么这将是一个很大的帮助。谢谢。

from struct import unpack
import numpy as np
import wave

wavfile = wave.open('/home/pi/desktop/codes/mysong.wav','r')
number_of_frames = wavfile.getnframes()
no_channels = wavfile.getnchannels()
raw_data = wavfile.readframes(number_of_frames)

total_samples = number_of_frames * no_channels
fmt = "%ih" % total_samples
integer_data = struct.unpack(fmt,raw_data)

1 个答案:

答案 0 :(得分:0)

正如@jonrsharpe所说,你要么:

# if using from ... import ...
from struct import unpack
...
# then change this to
integer_data = unpack(fmt,raw_data)

...

# if using import ...
import struct
...
# then this will work fine
integer_data = struct.unpack(fmt,raw_data)

但请勿混合使用一起匹配进口。