曲を6つの楽器に分けるアプリ
概要
曲のファイルを投げると、ドラム・ベース・ギター・ピアノ・ボーカル・その他の6つに分けて返します。複数選んでもZIPでまとめてダウンロードできます。Metaの音源分離モデルDemucs(htdemucs_6s)をGradioでラップして、Hugging Face Spacesに無料で公開しました。1回の推論で6ステム全部を出すので、1つだけ選んでも全部選んでも処理時間は変わりません。
用途
曲の中から特定の楽器だけを取り出して、耳コピ・練習・リミックスの素材として使うためのツールです。
使用技術
- — Python 3.10
- — PyTorch / torchaudio(深層学習フレームワーク)
- — Demucs htdemucs_6s(音源分離モデル)
- — Gradio(Web UI)
- — Hugging Face Spaces(デプロイ先・CPU basic)
工夫点
技術面
6ステム同時推論を1回だけ走らせて、選択分だけ取り出す方式にしました。選んだ楽器の数で処理時間が変わらない構造になっています。リクエストごとに tempfile.mkdtemp で独立ディレクトリを切って、同時アクセス時の書き込み衝突を避けています。/tmp に出力が残り続けてHF Spacesのコンテナ50GB上限に抵触する累積問題には、Spacesのスリープ時 /tmp クリアを活用して累積を断ちました。ML系はAPI変更が速いので、torch==2.1.2 / torchaudio==2.1.2 / numpy<2.0 を明示固定して事故を避けています。
使いやすさ
楽器を1つずつ選ぶたびに何分も待たされるのが旧版で一番ストレスだったので、チェックボックスで複数選択して一括ダウンロードに作り直しました。内部例外は gr.Error で日本語に翻訳しているので、UIが何も言わずに固まることがありません。長尺ファイルでCPUタイムアウトする前に、300秒上限を事前検証して日本語で拒否メッセージを返します。
公開URL
https://huggingface.co/spaces/anthamayfair11/instrument-separator