こんにちは
ふと、フォルダ内に複数入っているmp3ファイルを1つのファイルにまとめたくなったので、ついでにここに残しておきます。
今回の仕様は
・フォルダ内のmp3ファイル(以下sound)をn個分結合して書き出し
・soundはランダムに選ばれる
・soundごとにmミリ秒の無音をインターバルとして挿入
・l%の確率で別フォルダ内のmp3ファイルを選択
以下が実装です
import os from pydub import AudioSegment import random AtariDir = "./音源/あたり" HazureDir = "./音源/はずれ" # get mp3 path def getFileList(dirName): fileList = os.listdir(dirName) for i in range(len(fileList)): fileList[i] = dirName + "/" + fileList[i] # reset seed random.seed() # shuffle random.shuffle(fileList) return fileList # Combine n songs at random # m[ms] intervals def combineSounds(n,m,l): interval = AudioSegment.silent(duration=m) concated_sound = interval for i in range(n): # There is a l% chance that "Hazure" will be chosen. if random.randint(1, 100) >= l: concated_sound += AudioSegment.from_mp3(getFileList(AtariDir)[0]) concated_sound += interval else: concated_sound += AudioSegment.from_mp3(getFileList(HazureDir)[0]) concated_sound += interval concated_sound.export("result.mp3", format="mp3") # run combineSounds(n,m,l)
展望としては
・連続して同じ音源が選択されないようにする
・無音を本当の無音にするのではなく、音源内のホワイトノイズ自動検出して用いる(もしくは予め都合の良い無音ファイルを用意しておく)
余談ですが、Github Copilotのおかげで一度もググることなく作成できました。
私レベルだと調べてる時間のほうが多いので、非常に時間短縮ができました。