スポンサーリンク

【Python】すべてのwavファイルを読み込んで、リサンプリングして書き出す

librosa

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に書き出すサンプリング周波数を指定する。

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

関連記事

コメント