Pythonライブラリpydudでwavファイルやmp3などの様々な音声ファイルの加工をしてみます。ffmpegベースで作動するため、様々な音声コーデックに対応し、このライブラリで様々なことができます。音声ファイルの解析の前処理などでは欠かせないライブラリです。
pydudと関連ライブラリのインストール
pydudのインストールには前もってffnpegのインストールが必要です。ffmpegの公式ページからダウンロードします。詳しくはこちらの記事の中でも触れているので、ご参照ください。
最新のpydudはgithubのサイトからインストールできます。(2023年2月現在、pip install pydudがうまく通らないことがあります。。。)
pip install git+https://github.com/jiaaro/pydub.git@master
また、オーディオ再生のためにはsimpleaudioが必要です。
pip install simpleaudio
また、今回はインタラクティブ開発環境で使っていきたいので、JupyterLabをインストールします。
pip install jupyterlab
pydudを使う
JupyterLabをブラウザで起動します。
jupyter-lab
オーディオの再生
音声ファイルの再生ができます。例えば、以下のサンプル音声の再生をしています。(VOICEVOXのずんだもんで生成した音声を使用しています。)
AudioSegmentで音声データの呼び出しができます。
AudioSegment.from_wav(“ファイル名”)・・・wavファイルの呼び出し
AudioSegment.from_mp3(“ファイル名”)・・・mp3ファイルの呼び出し
AudioSegment.from_file(“ファイル名”,format=”ファイルの種類”)・・・ffmpegがサポートする形式
例えば、from_file(“ファイル名”,format=”wav”)でwavファイルを呼び出すことができます。呼び出したファイルはplayで再生できます。
from pydub import AudioSegment
from pydub.playback import play
voice = AudioSegment.from_file("test.wav", format="wav")
play(voice)
オーディオの保存
オーディオの保存はexportで行います。例えば、先ほど呼び出したずんだもんのwavファイルをmp3で保存してみます。
voice.export("test_to_mp3.mp3",format="mp3")
また、ビットレートを指定して、保存することもできます。128kで保存してみました。
voice.export("test_128k.mp3", format="mp3", bitrate="128k")
無音の生成
無音はAudioSegment.silent(duration=時間)で生成できます。時間はmsで指定します。例えば、0.2秒の無音は下のように生成されます。再生しても当たり前ですが、何も出ません。
silent02 = AudioSegment.silent(duration=200)
play(silent02)
音声の長さの取得
lenでAudioSegmentの長さを取得できます。(単位はms)
len(voice)
8779
オーディオの切り貼り
オーディオを切ったり、貼ったり、繰り返したりは簡単にできます。例えば、オーディオのスライスはリストを扱うように[始め:終わり]で行えます。始めを省略すると、オーディオの最初から、また、終わりを省略すると、オーディオの最後までをスライスします。スライスする長さはmsの単位で指定します。例えば、voice[:2300]で最初から2.3秒を切り取ることができます。
sliced_voice = voice[:2300]
play(sliced_voice)
voice[1300:2000]で1.3秒から2秒までを切り取ることができます。
zundamon=voice[1300:2000]
play(zundamon)
また、「+」で足し算のようにすることで音声ファイルをつなげることができます。先ほど生成した無音部分をブランクにしてつなげてみます。
mix1 = zundamon + silent02 +sliced_voice
play(mix1)
「*」で掛け算のように音声を繰り返すこともできます。
mix2 = (zundamon + silent02) *5
play(mix2)
音量の調整
音声ファイルの音量は「+n」でnデシベル大きくして、「-n」でnデシベル小さくします。例えば、5デシベル大きくしてみます。
voice_5 = voice + 5
# 元の音量
play(voice)
# 5デシベル大きくした音量
play(voice_5)
音量を周期的に変化させてみます。
# 100msごとに音量を変える
vib_voice = AudioSegment.silent(duration=10)
for i in range(0, len(voice), 100):
vib_voice += voice[i:i+100] + ((i%1000)-500)//50
play(vib_voice)
オーディオフォーマット変換
例えば、以下のようにmp3からwavへの変換ができます。
from pydub import AudioSegment
AudioSegment.from_file("test.mp3", format="mp3").export("test2.wav", format="wav", bitrate="64k")
まとめ
pydudを使うとオーディオファイルの加工を非常に簡単で直観的に行うことができます。以下のような応用例が考えられます。
・オーディオファイルのフォーマットの変換
・オーディオファイルのボリューム調整
・オーディオファイルの不要部分の削除
・オーディオファイルのリミックス
コメント