Python標準モジュールのみ14行でwavファイルを指定時間毎に分割する方法

Google Ad

本記事の主旨

Python標準モジュールであるwaveモジュールのみのインポートで、wavファイルを指定時間毎に分割する簡単なコード2つとその解説について記す。

本記事の目的

本記事の目的を以下に記す。

  • Python標準モジュールのみでwavファイルを指定時間毎に分割する簡単なコード2つについて記すこと

本記事の背景

インターネット上でも生成AIでも、Python標準モジュールのみを用いて簡単にwavファイルを指定時間毎に分割する方法がない。

よって、本記事でコードとその解説を記す。

実装

以下にソースを記す。

空行を抜いて14行である。

解説

1行目、「import wave」で、waveモジュールのみをインポートする。

3行目、「FILE_S = 1.0 # 分割後ファイル秒数[s]」で、分割後ファイル秒数を指定する。

ここでは、分割後ファイル秒数が小数でも、指定できるようにしている。

例として、分割後ファイル秒数を100[ms]で指定する場合は、0.1と指定すればよい。

5行目、「with wave.open("Ha_AMM01.wav", 'rb') as rwf:」で、今回は「Ha_AMM01.wav」というファイルを分割するために開く。

6行目、「wwf_n_frames = int(FILE_S * rwf.getframerate()) # 書き込み後ファイルフレーム数を、指定した分割後ファイル秒数間での上限フレーム数に指定。」で、wwf_n_framesに指定した分割後ファイル秒数間での上限フレーム数を計算し設定する。

ここで、「rwf.getframerate()」は、分割したいファイルのフレームレートを取得する関数である。

7~10行目、「rwf.getnframes()」を「wwf_n_frames」で割り切れるか否かで、ループ回数に1を足すか足さないかを決めている。

ここで、「rwf.getnframes()」は、分割したいファイルの全フレーム数を取得する関数である。

そのため、「rwf.getnframes() // wwf_n_frames」は、(全フレーム数)/(分割後ファイル上限フレーム数)の小数点以下切り捨ての値となる。

よって、小数点以下が0でない場合は、この値が分割ファイル数よりも1小さいため1を足す。

11行目、「for i in range(n_loop):」で、iが0から分割ファイル数分ループを回す。

12行目、「rwf.setpos(i * wwf_n_frames) # 今回ファイルを切り出す開始地点に移動」で、今回ファイルを切り出す開始地点に移動する。

ここで、「rwf.setpos()」は、指定したフレームを開始地点とする関数である。

13行目、「with wave.open("Ha_AMM01_" + str(i) + ".wav", 'wb') as wwf:」で、分割するためのループ内で「Ha_AMM01_(分割ファイル番号).wav」というファイルを分割ファイルとして書き込むために開く。

14行目、「wwf.setparams(rwf.getparams())」で、分割したいファイルのパラメータをそのまま分割後のファイルに入れる。

ここで、「rwf.getparams()」は、ファイルのパラメータをタプル型で取得する関数である。

ここで、「wwf.setparams()」は、ファイルのパラメータをタプル型で設定する関数である。

15行目、「wwf.writeframes(rwf.readframes(wwf_n_frames))」で、今回切り出す個所を書き込む。

ここで、「rwf.readframes()」は、ファイルのデータをbytes型で取得する関数である。

このとき、ファイルのデータは「rwf.setpos()」で移動した開始地点から読みだされる。

ここで、「wwf.writeframes()」は、ファイルのデータをbytes型で設定する関数である。

結果

ここで用いているHa_AMM01.wavは、鳥類音声データベースの奄美大島のヒヨドリの個体番号1である。

結果としては、以下のように分割される。

ファイル分割後それぞれのファイル

実行すると、以下のようにエクスプローラー上で見える。

ファイル分割後それぞれの音声波形

Audacityで波形を確認すると、以下のようになった。

ファイルがしっかり分割されていることが、見て取れる。

まとめ

  • Python標準モジュールのみでwavファイルを指定時間毎に分割するコードは、空行を抜いて14行で書ける。

広告

日本野鳥の会会長監修の、音声QRコード付き野鳥図鑑。

広告