Pythonでディレクトリ内のwavファイルをすべて読みこんでリサンプリングして書き出す方法について記載する。
すべてのwavファイルを読み込んで、リサンプリングして書き出す
globモジュールのglobを用いることで、ファイル名を取得する。引数には、wavファイルが置いてあるpathを指定し、すべてのwavファイルを読み込みたいので、ワイルドカード「*」を用いる。
import glob
sound_list = glob.glob("./input/*.wav")
print(sound_list) # ディレクトリ内のwavファイルのpathがリストに保存される
# ['./input/440.wav', './input/1000.wav']
librosaライブラリのload()を用いて、音声ファイルを読み込み、現在のサンプリング周波数を確認する。ここでの音声ファイルのサンプリング周波数は44100Hzであった。
import librosa
for file_path in sound_list:
y, sr = librosa.load(file_path, sr=None, mono=False)
break # 一つ目のサンプリング周波数のみ確認するため止める
print(sr)
# 44100
リサンプリングはlibrosa.resample()を用いることでできる。引数orig_srに元のサンプリング周波数、target_srにリサンプリングのサンプリング周波数を指定する。ここでは24000Hzを指定した。ファイルの書き出しには、soundfile.write()を用いる。引数fileに書き出すファイル名、引数dataに書き出すnumpy配列、samplerateに書き出すサンプリング周波数を指定する。
- 関連記事 – 【PyTorch/librosa】Pythonで音声/音楽データをリサンプリングする
- 関連記事 – PySoundFileで音声/音楽データを書き出すsoundfile.write【Python】
import librosa
import soundfile
re_sr = 24000 # リサンプリングの周波数
for file_path in sound_list:
y, sr = librosa.load(file_path, sr=None, mono=False)
y_24k = librosa.resample(y=y, orig_sr=sr, target_sr=re_sr)
soundfile.write(file=file_path, data=y, samplerate=re_sr)
先ほどのコードを利用して、サンプリング周波数が変更されたか確認する。24000Hzに変換されていることが確認できた。
for file_path in sound_list:
y, sr = librosa.load(file_path, sr=None, mono=False)
break # 一つ目のサンプリング周波数のみ確認するため止める
print(sr)
# 24000
コメント