私が扱っているオーディオ ファイルのいくつかには厄介な特性があります。2 つのチャンネルがありますが、1 つが空です。OS は左右のステレオ スピーカーでモノラル トラックを問題なく再生しますが、これらのファイルは (たとえば) 左スピーカーでしか再生しないため、これはモノラルよりも悪いことです。
これを 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
チャンネルを分割して空のチャンネルを検出する簡単な方法を誰かが提案できますか?