Python wave:从* .wav文件中分别提取立体声通道

时间:2015-02-19 11:16:07

标签: python audio struct wav unpack

我有一个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)解释波的结构,以及我错误使用的函数是如何正确使用的。

1 个答案:

答案 0 :(得分:3)

立体声文件中的左右声道是交错的。您可以在线找到大量有关此内容的信息,例如看看数字here

因此,如果你已经将整个音频数据放在一个列表中,你只需得到第二个立体声样本,每四个样本用于quadro等等。你可以用列表拼接来做到这一点:

data_per_channel = [data[offset::nchannels] for offset in range(nchannels)]