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)]
我有一个 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)]