概要
import glob import librosa import soundfile import shutil import sys import os # コマンドライン引数で指定されたディレクトリに存在するすべての .ogg のファイルパスを取得 files = glob.glob(sys.argv[1] + "/*.ogg") for file in files: # .ogg を読み込む y, sr = librosa.load(file, sr=None, mono=False) # 読み込んだ .ogg の最初と最後に存在する無音区間を削除 # top_db で無音区間の閾値を調整可能 yt, index = librosa.effects.trim(y, top_db=30) # 無音区間を削除した .ogg を保存 # data に yt.T ではなく yt を渡すと `Format not recognised.` が発生して保存に失敗するので注意 # https://github.com/bastibe/python-soundfile/issues/276 soundfile.write(file=file, data=yt.T, samplerate=sr)
上記のような .ogg の最初と最後に存在する無音区間を削除する Python を
並列化したかった
import glob import librosa import soundfile import shutil import sys import os import concurrent.futures # コマンドライン引数で指定されたディレクトリに存在するすべての .ogg のファイルパスを取得 files = glob.glob(sys.argv[1] + "/*.ogg") def process_file(file): # .ogg を読み込む y, sr = librosa.load(file, sr=None, mono=False) # 読み込んだ .ogg の最初と最後に存在する無音区間を削除 # top_db で無音区間の閾値を調整可能 yt, index = librosa.effects.trim(y, top_db=30) # 無音区間を削除した .ogg を保存 # data に yt.T ではなく yt を渡すと `Format not recognised.` が発生して保存に失敗するので注意 # https://github.com/bastibe/python-soundfile/issues/276 soundfile.write(file=file, data=yt.T, samplerate=sr) # with 文で ThreadPoolExecutor を使い、各ファイルの処理を並列実行する with concurrent.futures.ThreadPoolExecutor() as executor: futures = [executor.submit(process_file, file) for file in files] # 各処理の完了を待つ concurrent.futures.wait(futures)
concurrent.futures
モジュールを使用して上記のように書き換えることで並列化できた