更快速地从24位wav pcm格式转换为浮点数?

时间:2012-03-19 23:25:38

标签: python wav pcm

我需要从24位pcm格式的wav文件中读取数据,并转换为float。我正在使用Python 2.7.2。

wave包以字符串形式读取数据,所以我尝试过:

import wave
import numpy as np
import array
import struct

f = wave.open('filename.wav')
# read in entire wav file
wdata = f.readframes(nFrames) 
f.close()

# unpack into signed integers and convert to float      
data = array.array('f')
for i in range(0,nFrames*3,3):
    data.append(float(struct.unpack('<i', '\x00'+ wdata[i:i+3])[0]))

# normalize sample values
data = np.array(data)
data = data / 0x800000

这比我之前的方法快一点,但仍然很慢。任何人都可以提出更有效的方法吗?

1 个答案:

答案 0 :(得分:1)

这似乎非常快,它处理24位值,并进行规范化:

from scikits.audiolab import Sndfile
import numpy as np

f = Sndfile(fname, 'r')
data = np.array(f.read_frames(f.nframes), dtype=np.float64)
f.close()
return data