Более быстрый способ конвертирования из 24-битного формата WAV PCM в float? - PullRequest
2 голосов
/ 20 марта 2012

Мне нужно прочитать данные из wav-файла в 24-битном формате pcm и преобразовать их в 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 Ответ

1 голос
/ 20 марта 2012

Это кажется довольно быстрым, он обрабатывает 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
...