/minara-music — スクリプトから音楽+効果音を生成
動画の秒単位スクリプトを音楽キューシートcues.jsonに変換し、BGMと映像同期の効果音をローカルで合成します。合成は純粋なローカルnumpyを使用し、出力は決定論的です(同じキュー+シードから常に同じオーディオが生成されます)。外部サービスを呼び出さず、コストはかかりません。
ソース: Minara V2ローンチフィルムのスコアリング手法を汎用スクリプト化したもの。examples/v2-launch.jsonがそのフィルムのキューシートです。
ワークフロー(順序通り)
- スクリプトを読む: minara-video(またはストーリーボード/ナレーションタイミングシート)から秒単位のスクリプトを取得します。スクリプトに「サウンド・アトモスフィア」や「ミュージック」の列があればそれに従い、なければ映像の雰囲気から判断します。
- キューシートを書く: プロジェクトの
audio-src/cues.jsonに以下を記述します:duration(= 最終的な動画の長さ),bpm(デフォルト120),key(デフォルトA minor、明るくお祝いムードの場合はC major),seed。sections: スクリプトを音楽セクションに分割し、各セクションにenergyを設定、noteに対応する映像の説明を記述します(相互参照しやすくするため)。sfx: スクリプト内の目に見えるアクション(タップ、タイピング、注文完了、通知ポップアップ、トランジション、ロック着地)ごとに効果音を追加し、スクリプトに指定された秒数に合わせて配置します。
- レンダリング前にオペレーターにシートを提示する: マークダウンテーブルで「時間範囲/energy/対応映像」と「効果音時間/種類/対応アクション」をリスト表示し、オペレーターがOKと言うまで待ちます。オペレーターはコードではなくシートを編集します。
- レンダリング:
python3 ~/.claude/skills/minara-music/scripts/make_music.py <project>/audio-src/cues.json -o <project>/assets [--vo <project>/assets/vo.wav] - 自己チェック: スクリプトが各セクションを表示します。その後、セクションごとにラウドネスを測定し、クライマックスが最も大きく、ブレイクダウン/アウトロが明らかに音量を落としていること、ダッキングが機能していることを確認します。聞き取りの問題がある場合(ごちゃごちゃしている、効果音がフォーカスを奪っている)、
level/gainを調整して再レンダリングします。各レンダリングは数秒で完了します。 - 納品:
bgm.wav(またはbgm-duck.wav)へのパスを提示し、open -Rでpreview-mix.wavをハイライト表示して聞いてもらえるようにします。HyperFramesでは、これをオーディオトラックとして追加し、ボイスオーバーは別のトラックに配置します。
出力
| ファイル | 内容 |
|---|---|
bgm.wav | 音楽+効果音、48 kHz ステレオ、-1 dBFS ピーク、開始0.4秒フェードイン、終了3.2秒フェードアウト |
bgm-duck.wav | ボイスオーバーがある場合に生成: 発声中は音楽がduck_db(デフォルト-8 dB)下がります。効果音はダッキングされません |
preview-mix.wav | ボイスオーバーがある場合に生成: 音楽+ボイスオーバーをミックスしたもの。試聴用であり、最終的な動画には使用しません |
energy セクションの種類
| energy | サウンド | 使用場面 |
|---|---|---|
silent | 無音 | 完全な静寂が必要な間 |
intro | 低いドローン+ソフトパッド | オープニング、ロゴ、データ収束 |
light | パッド+軽いアルペジオ+控えめなビート | モバイル操作、軽量な機能デモ |
build | 各ビートにベースとキックを追加、セクション終了時に自動でライザー | 重要な瞬間に向けた徐々の盛り上がり |
full | フルドラムキット+クラップ+ベース+アルペジオ | コア機能の継続的な紹介(バックテスト、稼働、自動化) |
breakdown | ドラムとベースを削除、パッドとソフトアルペジオのみ。最終小節でキックが復帰 | シーンの変更、セキュリティ/プライバシーに関する「呼吸」が必要なセクション |
climax | 最も充実: フルドラムキット+リードメロディ+セクション開始時のクラッシュ。前セクションがbuildでなければ自動でライザーを追加 | 製品名/ローンチクレームが表示される |
outro | トニックコード+ブランドベルの解決音、ミックス全体をフェードアウト | エンドカード、CTA |
各セクションは"level": 0.5–1.3で音量を微調整できます。コードはグローバルな小節パターン(短調: i–VI–III–VII、長調: I–V–vi–IV)に従うため、セクション間で不連続になりません。
効果音の種類(sfx)
| 種類 | サウンド | 典型的なアクション | オプションパラメータ |
|---|---|---|---|
tap | 短いクリック | ボタンタップ、選択 | gain |
typing | 連続的なタイピングのカチカチ音 | 入力フィールドでのタイピング | chars, cps(毎秒文字数、画面のタイピング速度に合わせる) |
success | 2音の上昇するベル音 | 注文完了、戦略実行中 | gain |
notify | 3音のアラート | 通知やリマインダーのポップアップ | gain |
bell | 単音のベル音 | アバター/ロゴ出現 | note(MIDI、デフォルト81) |
blips | 上昇する短い音 | バックテスト進行、データ読み込み | count, step(秒), note |
sparkle | きらめく粒状音+息のようなノイズ | パーティクル収束、オープニング | dur |
riser | 上昇するノイズ | 手動で追加するトランジションの盛り上がり | dur |
whoosh | 逆スイープ | ウィンドウの折りたたみ、プッシュ/プルトランジション | dur |
thud | 低いロック音 | ロック、確認、重い着地 | gain |
crash | シンバル | 追加のアクセント | gain |
すべての効果音はgainで音量を調整できます。
ルール
- 効果音は目に見えるアクションにのみ従う: 画面上に対応するアクションがない場合は、「テキストを軽々しく追加しない」のと同じく、効果音を追加してはいけません。
- タイミングはスクリプトからコピーし、推定しない: 効果音の
tは秒単位スクリプト/アニメーションタイムラインから実際の秒数を使用し、cpsはアニメーションでのタイピング速度を使用します。 - スクリプトの長さや順序が変更された場合は、先に
cues.jsonを更新して再レンダリングする。手動でオーディオを引き伸ばさないでください。 - 外部のAI音楽サービスやWebからダウンロードしたトラックは使用しないでください。商用ライセンスされた音楽が必要な場合は、オペレーターがファイルを提供します。