我有一个32位* .wav文件44100Hz采样。我使用use wave和python struct.unpack将数据传递给数组。但是我希望将两个立体声通道中的每一个作为单独的阵列。我该如何尽可能简单地做到这一点?这是我的代码:
def read_values(filename):
wave_file = open(filename, 'r')
nframes = wave_file.getnframes()
nchannels = wave_file.getnchannels()
sampling_frequency = wave_file.getframerate()
T = nframes / float(sampling_frequency)
read_frames = wave_file.readframes(nframes)
wave_file.close()
data = unpack("%dh" % nchannels*nframes, read_frames)
return T, data, nframes, nchannels, sampling_frequency
你是否能够(1)修改代码,使其返回两个数组,每个通道一个,以及(2)解释波的结构,以及我错误使用的函数是如何正确使用的。
答案 0 :(得分:3)
立体声文件中的左右声道是交错的。您可以在线找到大量有关此内容的信息,例如看看数字here。
因此,如果你已经将整个音频数据放在一个列表中,你只需得到第二个立体声样本,每四个样本用于quadro等等。你可以用列表拼接来做到这一点:
data_per_channel = [data[offset::nchannels] for offset in range(nchannels)]