【Python】wavファイルを分割する方法 wavio

WAVファイルを特定のファイルサイズ(10Mバイト)で分割する必要があったので、切り出し方を探しました。
WAVEモジュールを使ってファイルを読み込んでも、エラーが発生しました。そこで、wavioに切り替えて、読み込んでいます。

WAVファイルをwavioで読み込み

WAVファイルを読み込むと、クラスWavに格納されます。読み込んだファイルは分割前のものです。

wav = wavio.read(wave_path)
wav.data: ndarray   # サウンド本体
wav.rate: int     # サンプリング周波数[Hz]
wav.sampwidth: int  # サンプル幅[Byte]

wav.dataの中から、10Mバイト分を取りだして新たなWAVファイルとして出力すれば目的が達せられます。data: ndarrayから切り取る長さは、チャンネル数とサンプル幅によります。

ch = len(wav.data[0, :])     # チャンネル数
new_data_len:int = 10*1024*1024/wav.sampwidth/ch # wav.dataから10Mバイト分を切り取る長さ

new_data_len分をdataから切り取って新たなファイルとして書き出します。下のサンプルでは、20Mバイトを超えたWAVファイルを10Mで分割しています。

WAVファイルを10Mバイト分ずつ切り出し、ファイル出力

new_data = wav.data[0:new_data_len]
wavio.write(new_file_0.wav, _wav_data, wav.rate, scale=None, sampwidth=wav.sampwidth)

new_data = wav.data[new_data_len:2*new_data_len]
wavio.write(new_file_1.wav, _wav_data, wav.rate, scale=None, sampwidth=wav.sampwidth)

インストール

githubのwavioにはサンプルも載っています。

$ pip install wavio

コメント

タイトルとURLをコピーしました