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
コメント