# BGM Forge

> ジャンルや用途を選ぶだけでオリジナルBGMを自動生成し、書き出せるツール。

- 制作: [ワカメ](https://wakame.dev/)（個人で企画・開発）
- ステータス: 制作済み
- 制作期間: 制作済み
- カテゴリ: Tool, AI, Video, Python
- 使用技術: Python, MIDI, FluidSynth, JavaScript, LUFS
- 担当: 企画, 生成ロジック設計, 音作り・用途プリセット設計, 書き出し機能の実装

## 概要

動画やゲームに使うBGMを、権利を気にせず自分で用意できるようにするために作った自動作曲ツールです。MIDIを自動作曲してFluidSynth（GM SoundFont）で鳴らし、WAV / MP3 / OGGに書き出します。Pythonで動くローカルアプリで、画面はブラウザで操作します（FluidSynthを使うため、Web上では公開していません）。ゲーム・動画・配信・ポッドキャスト・店舗・作業用・CMなど14の用途を選ぶだけで設定が決まるようにし、継ぎ目のない完全ループ、LUFSでのラウドネス調整、ナレーションの下に敷く前提の音作り、秒数ぴったりの書き出し、パート別ステム出力、CLIでのバッチ生成まで対応させました。

## ジャンルではなく「何に使うか」から選ばせる

BGM生成ツールの多くはジャンルから選ばせますが、実際に必要なのは「YouTubeのナレーションの下で流す曲」や「15秒ぴったりで終わるCMの曲」であって、ジャンル名ではありません。ジャンルから入ると、できた曲が用途に合わず作り直しになります。

BGM Forge は用途を最初に選ばせ、その時点で長さ・ループの有無・音量・音の作り方の既定値がまとめて決まり、その用途に向いているジャンルだけが並ぶようにしました。用途ごとに出口の要件が違うので、そこを既定値として先に固定してしまう設計です。

- ゲーム制作: 継ぎ目のない完全ループのWAV（ループ点の情報を埋め込み済み）とパート別のステム
- ポッドキャスト・ラジオ: -16 LUFS に合わせた30秒のジングル
- CM・SNSショート: 15 / 30 / 60秒ぴったりで終わる、決めのある曲
- 配信の待機画面: 5分以上の、聞き続けても飽きにくい長尺ループ
- 店舗・カフェ、作業用、睡眠・瞑想: 会話や集中の邪魔をしない方向に振った曲

## AI生成モデルを使わず、決定論的な作曲にした

生成はアルゴリズムによる自動作曲で、AIの生成モデルは使っていません。同じ設定と同じシード値を与えれば、いつでもまったく同じ曲が再生成されます。

この方式を選んだ理由は2つあります。1つは、既存の楽曲やサンプル素材を一切使っていないため、できた曲をゲーム・動画・配信・店舗・商用のどれに使っても権利の心配がいらないこと。もう1つは、「あの時の曲をもう少しだけ長く」といった作り直しが確実にできることです。

出力はMIDIを作ってからFluidSynthで音源化し、WAV／MP3／OGGに書き出します。MIDIファイルもそのまま残すので、DAWに持ち込んで手で直すこともできます。

## 環境構築でつまずかせない

音声まわりのツールは、導入手順の長さだけで使われなくなります。そこで付属のバッチファイルをダブルクリックすると、FluidSynth（約3MB）とGM SoundFont（約38MB）をツール用のフォルダの中にだけ展開する形にしました。システム側には何も入れないので、不要になったらそのフォルダを消すだけで元に戻ります。

さらに、外部ツールが無い場合でも止まらないようにしています。FluidSynthが無ければ内蔵のソフト音源で代替し（音質は落ちますが動きます）、ffmpegが無ければWAVだけを書き出します。

## 成果

- 14用途のプリセットから自動作曲・書き出しが可能
- 継ぎ目のない完全ループとLUFSラウドネス調整に対応
- パート別ステム出力とCLIバッチ生成に対応

## リンク

- [GitHub](https://github.com/bluewakame/bgm-forge)

## このサイトについて

- [ワカメの詳細プロフィール](https://wakame.dev/ai-profile/index.html.md)
- [llms.txt](https://wakame.dev/llms.txt)
