tl;dr
メソッドをモンキーパッチ(?)する
import os
import logging
from audio_separator.separator import Separator
from unittest.mock import patch
# モデルが置いてあるディレクトリを指定
model_file_dir = "./model"
model_filename = "karaoke_bs_roformer_anvuew.ckpt"
# yaml_config_filename = "*.yaml" #モデルと同名.yamlを読むように変更
# 入力/出力 ディレクトリを指定
input_dir = "./original"
output_dir = "./converted"
# MDXC Params
# 他のは https://github.com/nomadkaraoke/python-audio-separator/blob/main/audio_separator/separator/separator.py あたりを見る
mdxc_params={
"segment_size": 2800,
"override_model_segment_size": True,
"batch_size": 2,
"overlap": 17,
"pitch_shift": 0
}
# Separator.download_model_filesの置き換え先
def download_model_files(self, model_filename):
model_type="MDXC" # モデルごとに書き換える
model_friendly_name=model_filename
model_path = os.path.join(self.model_file_dir, f"{model_filename}")
yaml_config_filename=os.path.splitext(model_filename)[0] + ".yaml"
return model_filename, model_type, model_friendly_name, model_path, yaml_config_filename
with patch('audio_separator.separator.Separator.download_model_files', download_model_files):
# パラメタ・出力するstemについては https://github.com/nomadkaraoke/python-audio-separator?tab=readme-ov-file#full-command-line-interface-options とか。
separator = Separator(model_file_dir=model_file_dir, output_dir=output_dir, output_format="m4a", mdxc_params=mdxc_params, output_single_stem="Instrumental")
# モデル読み込み
separator.load_model(model_filename=model_filename)
# <曲名>_(Instruments).m4aにしてほしかったのでこれ。
# separator.separate(ディレクトリ)すれば適当に全部出してくれるのでそれで良い
for filename in os.listdir(input_dir):
if filename.endswith(".m4a") or filename.endswith(".wav"):
input_path = os.path.join(input_dir, filename)
name_without_ext = os.path.splitext(filename)[0]
custom_names = {
"Instrumental": f"{name_without_ext}_(Instruments)"
}
print(f"処理中: {filename} ...")
out_filename = separator.separate(input_path, custom_names)
どうも.yamlのinference:部分より小さい値は無視されるっぽいので注意する。
あと、Overlayを大きくすればそのぶん処理に時間がかかると思ったら、そうでもないらしい。desired_step = int(self.overlap * self.model_data_cfgdict.audio.sample_rate)
結果
一括処理+batch_sizeの設定 ができて良い

コメント