我正在处理的一些音频文件有一个令人讨厌的属性:它们有两个通道,但一个是空的。这比单声道更糟糕,因为操作系统很乐意在左右立体声扬声器上播放单声道音轨,但这些文件仅在(例如)左扬声器上播放。
我想用 PyDub 检测到这一点,但我有点卡住了。如果我知道一个文件是坏的,我可以这样做:
import pydub
bad_sample = pydub.AudioSegment.from_mp3('bad_file.mp3')
mono_sample = bad_sample.set_channels(1)
mono_sample.export('mono_file.mp3')
到目前为止,一切都很好。但我不知道如何自动检测一个是否坏。
隔离每个通道并检查其中一个是否为空应该就足够了。我的尝试是做类似的事情:
import numpy as np
assert bad_sample.sample_width == 2 # hence int16
a = np.fromstring(bad_sample._data,
dtype=np.int16)
a = a.reshape((bad_sample.channels, bad_sample.frame_count()))
left = a[0, :]
right = a[1, :]
但是这个坏文件似乎都不是空的,这表明我没有正确阅读格式。
一个例子是: http: //www.newsonair.com/writereaddata/bulletins/Aurangabad-Marathi-Regional-Bulletins-38645.mp3
谁能建议一种简单的方法来拆分通道并检测空通道?