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

Python wave: Extracting stereo channels separately from *.wav-file

我有一个 32 位 *.wav 文件 44100Hz 采样。我使用 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) 修改代码,使其 returns 两个数组,每个通道一个,以及 (2) 解释波形的结构以及我错误使用的函数正确使用。

立体声文件中的左右声道是交错的。你可以在网上找到很多关于这个的信息,例如看看数字here.

因此,如果您已经将整个音频数据放在一个列表中,您只需要为立体声获取第 2 个样本,为 quadro 获取第 4 个样本,等等。您可以通过列表拼接来做到这一点:

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