このページは英語から機械翻訳されています。英語の原文を読む。

ブログ

AIでゲーム音楽を作曲 — AI Game Developerの中のSuperCollider

SuperColliderでAIとゲーム音楽や効果音を作曲。メニューテーマからループ可能なステムまで作り、WAVをUnity、Godot、Unrealへ直接書き出せます。

AIでゲーム音楽を作曲 — AI Game Developerの中のSuperCollider

音楽と効果音はゲームプロトタイプの最後になりがちで、しかもプレイヤーが最初に気づく部分でもあります。AI Game DeveloperのMusicパッケージを使えば、AIと一緒にゲーム音楽を作曲できます。エージェントがSuperColliderのスコアをあなたと一緒に書き、WAVにレンダリングし、アプリ内で試聴でき、できあがった音声をUnity、Godot、Unrealのプロジェクトへ書き出します。

これはブラックボックスな曲生成ツールではありません。音楽は読めて、バージョン管理でき、変更できるコードなので、「同じテーマを、もっとゆっくり、リバーブ少なめで」と頼めば、そのとおりのものが返ってきます。この記事では、デモゲームSkyward Keepのメニューテーマを1回のセッションで作曲し、その後、ループ可能なステム、自分のサンプルから作る効果音、ゲームへの書き出しを見ていきます。映像はアプリの実際の録画です。エージェントの返答はデモ用に台本化されていますが、そこでのツール呼び出しはすべて実際に実行されています。このページのクリップは音なしで再生されます。テーマ自体は穏やかなオルゴール曲で、同じリクエストを使えば自分のプロジェクトでもレンダリングできます。

1回のセッションで作曲、レンダリング、プレビュー、書き出しまでを行った24秒のメニューテーマ。

ゲームオーディオにSuperColliderを使う理由

SuperColliderは、音の合成とアルゴリズム作曲のための成熟したオープンソースのプラットフォームです。すべての音はスコア、つまり楽器とその演奏タイミングを記述したテキストファイルから生まれます。これはAIエージェントによく合っています。

  • エージェントが書いたり編集したりするのはテキストであり、それはまさにスコアそのものです。
  • 変更は正確で再現可能です。テンポ、キー、楽器、エフェクト、長さはすべて明示されています。
  • ソースファイルはプロジェクト内にあってコードと同じようにGitにコミットできますが、レンダリングされた音声は使い捨ての出力です。

各レンダリングは実行前にソースのハッシュ、シード、設定を記録するので、どのWAVがどのスコアから生まれたかをたどれます。

ステップ1: セッションでMusicをオンにする

Musicはパッケージとしてアプリに同梱されています。デフォルトでインストールされており、使いたいセッションではセッションのTools行から有効化します。Unity、Godot、Unrealのエディタに接続したセッションを開くと、短いヒントがMusicの有効化を提案し、続けて8秒のサンプルテーマを作曲するか、自分のアイデアを説明するかを選べます。選ぶまでは何もインストール、レンダリング、送信されません。

実際に初めて使うときに、パッケージが必要なSuperColliderランタイムをセットアップします。固定され検証済みのバージョンです。いつでも /supercollider と入力すれば、状態と短いガイドが表示されます。現時点でランタイムはWindowsとmacOSで利用できます。

ステップ2: メニューテーマを作曲する

作曲家に依頼するときと同じように音楽を説明します。雰囲気、長さ、使われ方、そして基にしたい音楽的素材があればそれも伝えます。デモのリクエストはこうです。

「Skyward Keepのメニューテーマを作曲して。穏やかで温かみがあり、20秒くらいで、うちのkeepモチーフを基にして。まず聴かせて、それからゲームに追加して」

エージェントはまず、Knowledge Baseにあるプロジェクトのオーディオメモを確認します。そこにはkeepモチーフが書き留められており、それを穏やかなオルゴール版にすることを決めます。ゲームフォルダにポータブルなAudioSourceプロジェクトを作成し、それからスコアを書きます。オルゴールがD、A、B、Fシャープの4音モチーフを奏で、D、A、Bマイナー、Gのコードの上に柔らかいパッド、丸みのあるベース、共有リバーブが重なり、テンポは90 BPMです。

メニューテーマのために書いているSuperColliderスコアを説明するエージェントのメッセージ
エージェントは書きながらスコアを説明します

スコアはローカルでレンダリングされ、エージェントがプレビューを開くので、波形とプレーヤー付きでアプリ内でそのまま聴けます。結果は2つのファイルです。バージョン管理に残る編集可能なSuperColliderソースの menu-theme.scd と、リバーブの余韻を含む24秒・48 kHzステレオのレンダリング menu-theme.wav です。

アプリのオーディオプレビューで波形とともに再生される、レンダリング済みのメニューテーマ
レンダリング結果をアプリ内でそのまま聴く

レンダリングはモノラルまたはステレオの16ビットWAVで、44.1、48、96 kHz、最長10分です。エージェントはレンダリングを分析して、長さ、ピークとRMSレベル、クリッピングの有無を報告することもでき、ミックスが静かすぎたり大きすぎたりするときに役立ちます。

作曲家相手と同じように反復する

聴いてから、焦点を絞った変更を頼みます。

  • 「メロディを1オクターブ下げて、パッドのアタックをもっと遅くして」
  • 「後半に軽いパーカッションのレイヤーを足して」
  • 「16小節に短くして、終わり方はそのまま残して」

スコアはコードなので、どの変更でも曲の他の部分はそのまま保たれます。前のバージョンのほうがよければ、Gitに残っています。

ステップ3: アダプティブミュージックのためのループ可能なステム

ゲームでは、アクションに合わせてフェードインやフェードアウトするレイヤー状の音楽が必要になることがよくあります。同じ長さと同じタイミングを共有するステムを頼みましょう。

「レベルテーマをドラム、ベース、メロディの3つのステムに分けて。長さとテンポを揃えて、一緒にループするようにして」

ステムは同じ長さ、サンプルレート、シードでレンダリングされ、正確なフレーム数に切り揃えられるので、サンプル単位で揃い、きれいにループします。エンジン側では、戦闘が始まったらドラムを上げ、終わったら下げる、といったことができます。

ステップ4: 手持ちのサンプルから効果音を作る

SuperColliderは効果音でも同じように力を発揮します。自分のWAV録音をサンプルとしてインポートできます。16、24、32ビットのモノラルまたはステレオPCM、8〜192 kHzです。インポートは各サンプルのハッシュを記録するので、プロジェクトはスコアがどの音声に依存しているかを正確に把握できます。

「 footstep.wav をサンプルとしてインポートして、砂利用のバリエーションを4つ作って。それぞれ少しずつピッチと長さを変えて、短い余韻を付けて」

こうしたバリエーションは、繰り返される音が機械的に聞こえるのを防ぎますし、スコアさえあれば作るのにほとんど手間はかかりません。

ステップ5: ゲームへ書き出す

レンダリングの準備ができたら、エージェントは好きな名前を付けてゲームプロジェクトへ書き出します。

  • Unity: Assets/Audio に書き出し、ファイルを置き換えるときは .meta ファイルとGUIDを保持するので、シーン内の参照が壊れません。
  • Godot: res://Audio/ に書き出し、オーサリング用フォルダはGodotのインポートから除外されます。
  • Unreal: エディタ接続を通じて /Game/Audio 以下に SoundWave としてインポートされます。
  • プレーンなフォルダ: AudioSource のエクスポートフォルダに書き出します。

書き出しを置き換えるときは、置き換えるファイルが想定どおりのものかを確認するので、新しいファイルが誤って上書きされることはありません。

現時点で得意なこと

Musicパッケージはプロトタイプやインディーゲームのオーディオに最適です。メニューやレベルテーマ、環境音のベッド、勝敗のスティンガー、UIサウンド、効果音のバリエーションなどです。スコアはライブシンセシスではなくオフラインでレンダリングされ、結果は曲をどれだけうまく説明できるかに左右されるので、短い曲から始めて積み上げていくとよいでしょう。

Musicはリリース0.20.0で登場し、0.23.0以降はインストールされたままですが、有効化したときだけ新しいセッションに加わります (https://ai-game.dev/releases/0.23.0)。試すには ai-game.dev/download でアプリをダウンロードし、ゲームプロジェクトを開いてサンプルテーマを依頼してください。ワークフローの残りについては、 ai-game.dev/blog/build-game-with-ai-claude-code のウォークスルーで、同じエージェントがこの音楽が流れるシーンをどう作るかを示しています。

ブログのその他の記事

すべての記事