game-dj-personal-game-music-database
昔のゲーム音楽をAIにDJさせるシステム構想。ゲーム音楽は圧縮された人生データであり、AIが現在の作業状態を読み取って最適なBGMを選曲する。
昔のゲーム音楽を、仕事中にAIが勝手にDJしてくれたら最強なのではないか
――俺の人生を掘り返して「玉川ゲーム音楽DB」を作り、仕事そのものにBGMを付ける計画
最近、妙なことに気がついた。
仕事をするときに音楽を流す。
まあ普通である。
YouTubeの「集中できるLo-Fi」とか、アンビエントとか、クラシックとか、そのへんを流す。
悪くない。
悪くないのだが、昔やったゲームのBGMを流したときだけ、明らかに違う。
なんというか、「集中しよう」という感じではない。気がついたら入っている。仕事に。ターミナルを開いて、AIエージェントと喋って、コードを直して、調べ物をしているうちに、いつの間にか1時間とか2時間とか経っている。
これは何なんだ、と思った。
しかも、最近遊んだゲームより、昔、めちゃくちゃ楽しかったゲームの音楽ほど効く。
ここが重要である。
ということはだ。これは単なる「ゲーム音楽は集中しやすい」という話ではないのではないか。俺自身の記憶とゲーム音楽の間に、何かが埋まっているのではないか。
だったらAIに掘らせればいい。
俺がこれまで遊んできたゲームを全部掘り返す。そのゲームで流れていた、フィールド曲、街の曲、ダンジョン、戦闘、ボス戦、メニュー画面、セーブポイント、レベルアップ、アイテム取得、勝利、宿屋、ゲームオーバー、エンディング、起動音、カーソル音、決定音——なんかを全部整理する。
そして今度は、現在の俺が何をしているかをAIに見せる。
するとAIが、「今は探索だな」「いや、これはボス戦だ」「この作業は街で情報収集している状態だ」「そろそろHPが減っている」と判断して、勝手にBGMを変えてくれる。
これ、できるのではないか。いや。かなりできる。
そういう話である。
ゲーム音楽は「音」ではなく、昔の自分へのショートカットかもしれない
最初は、「ゲーム音楽はループ前提だから集中しやすいんだろう」くらいに考えていた。
もちろん、それもありそうだ。ゲームBGMは、普通のポップソングとは用途が違う。主人公は音楽を鑑賞するために立ち止まっているわけではない。歩く。戦う。装備を選ぶ。地図を見る。迷う。考える。延々とレベル上げする。その裏で流れ続けるための音楽だ。
だからゲーム音楽には、主役になりすぎず、それでいて世界を維持するという特殊な役割がある。実際、ゲーム音楽と作業・注意の関係については研究例もあるし、「自分で選んだ音楽」と課題遂行の関係を調べた研究もある。少なくとも「どんな音楽でも一律に集中力が上がる」という単純な話ではなく、本人の好み、親近性、覚醒度、課題の種類などが絡むらしい。
そして、もっと面白いのが記憶だ。
音楽によってノスタルジーが生じると、自伝的記憶の想起が速くなるという研究がある。親しみの強い音楽ほど自伝的記憶を引き出しやすかったという報告もある。
つまり俺が昔のゲームBGMを聴いたとき、単に「この曲いいなあ」と思っているだけではない可能性がある。その曲と一緒に、当時そのゲームを何時間もやっていた自分の状態そのものが呼び戻されているのかもしれない。
夜。テレビ。ゲーム機。コントローラー。攻略本。セーブデータ。新しい街に着いた感じ。洞窟の奥に進んでいく感じ。あと少しでボスを倒せそうな感じ。経験値を稼いでいる感じ。宝箱を見つけた感じ。「今日はここまで」とセーブした感じ。
こういうもの全部が、BGMの後ろ側にくっついている。
だとすると、ゲーム音楽というのは、圧縮された人生データみたいなものではないか。曲を鳴らすと解凍される。
おお。なんか凄い話になってきた。
ならば「集中用BGM」を探すのではなく、俺自身をデータベース化すればいい
Spotifyには集中用プレイリストが無限にある。YouTubeにもある。「Deep Focus」「Coding Music」「ADHD Focus Music」「Lo-Fi Beats」とか。
しかし今回やりたいのは、それではない。万人向けの集中音楽から、自分に合うものを探すのではない。逆だ。自分の人生から、自分専用の集中音楽システムを作る。
そのために必要なのが、「玉川ゲーム音楽DB」である。
正式名称はどうでもいい。重要なのは、「好きなゲーム一覧」ではないということだ。ゲームごとに、もっと細かく掘る。
たとえば、「このゲーム好きだった?」だけでは足りない。AIにはこう聞いてほしい。
「どこで遊んでいましたか?」「何歳くらいでしたか?」「誰かと一緒でしたか?」「どんな場面を覚えていますか?」「延々とレベル上げしましたか?」「一番好きだった街は?」「怖かったダンジョンは?」「起動音を覚えていますか?」「セーブするときの効果音を覚えていますか?」「徹夜したことがありますか?」「学校から帰って最初に起動していたゲームは?」
こういう質問である。するとゲームのタイトルが、単なるタイトルではなく、人生の座標になってくる。
そしてAIに音楽を探させる
ゲーム歴が出てきたら、次は音源を整理する。ただしここで重要なのは、いきなり何百GBも音楽を吸い出して保存することではない。最初に必要なのはメタデータDBである。
曲名。ゲーム名。場面。作曲者。公式サウンドトラック。Spotify。YouTube公式配信。Apple Music。Steam soundtrack。手元に所有しているOST。自分で合法的に吸い出した音源。
つまり最初は、どのゲームの、どの場面で、どんな音が鳴っていたかを整理すればいい。そして各曲にタグを付ける。
たとえばこんな感じだ。
GAME: XXXXX
TRACK: Field Theme
MEMORY_SCORE: 92/100
NOSTALGIA: 95
AROUSAL: 45
DISTRACTION: 15
LOOPABILITY: 96
TASK_TAGS: RESEARCH, CODING, LONG_SESSION
SCENE_TAGS: FIELD, EXPLORATION
別の曲なら、「Final Boss」で、NOSTALGIA 87、AROUSAL 98、TASK_TAGSがDEBUGGING, DEADLINE, FINAL_PUSHになる。これで急に使えるデータになる。
AIは「曲を選ぶ」のではなく「今がゲームで言えば何の場面なのか」を判断する
ここからが面白い。
俺がAIエージェントと一緒にプログラムを書いているとする。最初は仕様を調べている。これはゲームで言えば、街で聞き込みをしている状態かもしれない。資料を見つけ、GitHubを検索し、READMEを読んでいる。これはフィールド探索でもいい。
方針が決まりコードを書き始める。ここからダンジョン突入である。ビルドする。エラー。直す。またエラー。原因がわからない。同じ箇所を何度も行き来する。完全に、ダンジョンで迷っている。
そしてついに原因を発見。巨大な問題を潰し始める。ここでボス戦。
テスト。失敗。修正。テスト。失敗。修正。そして——PASS、PASS、PASS、PASS。
おおおおおお。ここで勝利ファンファーレですよ。そりゃ鳴らしたい。むしろ、なぜ今まで鳴らしていなかったのか。
Git commitしたらセーブ音を鳴らしたい
ここまで考えて、さらに気がついた。BGMだけではない。ゲームには効果音がある。これが仕事と非常に相性がいい。
たとえば、git commitした。ピロリン。セーブ音。最高である。
テストが全部通った。ジャジャーン。勝利。新しいライブラリを発見した。テレレレッ。アイテム取得。難しい問題の原因を発見。レベルアップ。プロジェクト完成。クエストクリア。一日の仕事終了。宿屋。
これは楽しい。しかし、それだけではない。ここには結構重要な仕組みがある。
仕事というのはゲームに比べて、成功のフィードバックが弱い。コードを200行直しても、画面には「Process exited with code 0」とか出るだけである。地味。大変地味。
しかしゲームなら、同じ程度の達成に対して、光る。鳴る。数字が出る。経験値が増える。宝箱が開く。ファンファーレが鳴る。ゲームというのは、進歩を人間に感じさせる装置として非常によくできている。だったらその部分だけ仕事に移植すればいい。
「仕事のゲーミフィケーション」ともちょっと違う
ゲーミフィケーションという言葉は昔からある。ポイント。ランキング。バッジ。経験値。タスクをこなしたら10XP。そういうやつだ。
しかし俺が欲しいものとは少し違う。俺は仕事をゲームっぽいUIにしたいわけではない。ターミナルはターミナルのままでいい。エディタもそのままでいい。GitHubもそのままでいい。
欲しいのは、現実世界にゲームの音響演出だけを重ねることである。
映画にはサウンドトラックがある。ゲームにもある。だったら、俺が生きている現実にも、リアルタイムのサウンドトラックがあっていい。しかも、それを選ぶのは人間ではない。AIである。
DJエージェントは何を見ればいいのか
これは技術的にも結構おもしろい。たとえばMacなら、ある程度まではローカルでできる。AI側が見るのは、現在のアクティブアプリ、ターミナル、Gitの状態、エディタで開いているプロジェクト、ブラウザのドメイン、タスク管理、作業時間、ビルド結果、テスト結果、エラー回数、曲をスキップした回数——程度でいい。
会話全文を全部クラウドに送る必要はない。ローカルの小さなプログラムで、「ACTIVE_APP = Ghostty、REPO = game-dj、GIT_DIRTY = true、TEST_STATUS = failing、ERROR_COUNT_10MIN = 7、SESSION_LENGTH = 83min」みたいな状態だけ作ればいい。
それをAIが読んで、「TASK_STATE = DEBUGGING、MENTAL_LOAD = HIGH、AROUSAL_REQUIRED = MEDIUM、RECOMMENDATION = familiar dungeon track」と判定する。これだけでもDJになる。
さらに面白いのが「選曲AIが俺を学習していく」こと
最初の選曲は適当でいい。AIが「コーディングだからフィールド曲でしょう」と選ぶ。俺が3分で飛ばした。するとマイナス。別の曲。40分聴き続けた。しかもその間にタスクが進んだ。プラス。次の日も同じ種類の仕事でその曲を流した。また30分集中した。さらにプラス。
こうやって、俺専用の「仕事×ゲーム音楽」モデルができてくる。万人にとって集中できる曲など探さなくていい。重要なのは、「玉川、朝5時、コーディング、調査フェーズ、少し眠い」ときに、何を鳴らすと仕事が進むのか。これである。
数カ月使えば、「この曲は好きだけど仕事には向かない」みたいなことも分かってくるはずだ。これが面白い。「好きな音楽」と「集中できる音楽」は、必ずしも同じではないからだ。
BGMを変えすぎるAIは最悪である
DJと聞くと、AIが次々に気を利かせて曲を変えそうである。それはたぶんダメだ。
集中しているときに、「もっといい曲を見つけました!」とか言って曲を変えてはいけない。うるさい。黙ってろ。
人間が深い集中に入っていると判定したら、AIは何もしない、というのが正しい。ゲームでもそうだ。フィールドを歩くたびに10秒単位で曲が変わったら発狂する。だからGame DJには、「選曲能力」以上に、変えない能力が必要になる。
俺なら基本ルールをこうする。集中が続いている→触るな。曲を飛ばした→状態を再判定。長時間停滞している→少し刺激を変える。疲労が高い→覚醒度を下げる、または休憩へ。重要イベント発生→SEのみ鳴らす。タスク状態が大きく変化→BGM遷移を検討。
これでいい。
つまりこれは「第二の音楽ライブラリ」ではない
ここが結論になる。作りたいのはSpotifyのプレイリストではない。自分の人生の記憶と、現在の行動を接続するシステムなのだ。
過去に何百時間、何千時間と遊んできたゲーム。当時はただ遊んでいただけだった。だがそのとき脳の中には、大量の感情と、集中状態と、探索感と、達成感が、音楽と一緒に保存されている可能性がある。
だったら40年後でも50年後でも、それを再利用すればいい。ゲームに費やした時間が、突然、未来の仕事道具になる。
これ、かなり好きな発想である。
ここから実際に作る
というわけで、構築指示書を書いた。仮称「Tamagawa Game Music DB / Game DJ Agent」。目的はゲーム音楽コレクションを作ることではなく、ユーザーが過去に遊んできたゲーム、その音楽・効果音・場面・感情・自伝的記憶を構造化し、現在行っている仕事に適したBGMと効果音を自動選択するシステムを作ることだ。
全体は13フェーズに分かれている。核心だけ抜き出すとこうだ。
第一に、ゲーム歴を勝手に捏造しない。ユーザーが遊んだことが確認されていないゲームを、「この世代ならやっただろう」という理由で登録してはいけない。候補として提示するのは可。確定データと推測データを分離する。
第二に、インタビューでゲーム人生を発掘する。小学生以前から年代順に、家にあったゲーム機、ゲームセンター、携帯ゲーム、徹夜したゲーム、攻略本を買ったゲーム、音楽を覚えているゲームを聞いていく。
第三に、SQLiteベースでGame Memory DBを作る。games、tracks、sound_effects、memories、play_history等のテーブルを定義し、各曲にnostalgia_score、arousal_score、loopability_score、memory_scoreを持たせる。
第四に、Task Observerを作る。アクティブアプリ、Git状態、ビルド結果、テスト結果、エラー頻度、作業時間を見て、RESEARCH、DEEP_CODING、DEBUGGING、WRITING等のタスク状態を推定する。本文や個人情報は保存しない。
第五に、DJ Selection Engineでスコアリングする。TASK_FIT、MEMORY_SCORE、NOSTALGIA、AROUSAL_FIT、LOOPABILITY等の重み付けで候補曲を評価する。ユーザーの実績データが増えたら重みを自動調整する。
第六に、最重要ルール「集中を壊さない」。現在の曲で集中状態が良好な場合、曲を変更してはいけない。DJの目的は曲をたくさん再生することではなく、ユーザーの作業状態を維持することだ。
第七に、効果音エンジン。git commit=セーブ音、テスト全通過=勝利ファンファーレ、新しいライブラリ発見=アイテム取得、仕事終了=宿屋。ただし希少性を維持する。鳴らしすぎると価値が消える。
第八に、学習する。再生ごとに、曲、タスク状態、再生時間、スキップしたか、タスクが進んだかを記録する。明示的な「良い・普通・ダメ」より、実際の行動を重視する。
最後に、MVP。最初から完全自動化しない。ゲーム歴10〜30本の発掘、各ゲーム3〜10曲の登録、FOCUS/EXPLORATION/BATTLE/CALM/VICTORYの5分類、手動指定CLI、1種類のプレイヤー接続、履歴保存——ここまで動いてから自動Observerへ進む。
成功条件はこうだ。ユーザーが仕事を始めたとき、曲を探す必要も、プレイリストを選ぶ必要も、DJに指示する必要もなく、その人の過去のゲーム人生の中から、現在の仕事に最適な世界が静かに立ち上がること。
ゲームをしていた時間は、本当に「無駄」だったのだろうか
ここまで書いて、ちょっと考え方が変わった。
子供の頃ゲームばかりしていると、「いつまでゲームやってるの」と言われた。大人になってゲームをしていても、「そんなことして何になるの」という話になりがちだった。
しかし、もし。何十年も経ったあと、あのときのゲーム音楽を一音鳴らしただけで、集中していた自分、好奇心に満ちていた自分、何時間でも探索できた自分、失敗しても何度も挑戦した自分を、現在に呼び戻せるのだとしたら。
それは完全な無駄ではなかったのかもしれない。
AIの面白さは、人類の知識を全部知っていることだけではない。これまでコンピューターでは扱えなかった「自分自身」を、少しずつデータとして扱えるようになってきたことにもあると思う。
昔遊んだゲーム。昔聴いた音。昔いた場所。昔好きだったもの。これまでは単なる思い出だった。しかしエージェント時代になると、それらを構造化して、現在の自分を助ける道具に変換できる。
思い出がAPIになる。記憶がデータベースになる。そしてAIがDJになる。
朝、コンピューターの前に座る。ターミナルを開く。今日の仕事を始める。すると、どこからともなく、30年前のあの世界の音が流れ始める。AIは何も言わない。ただ、「今日はここからだ」とでも言うように、フィールドの音楽を鳴らす。
これはちょっと、作ってみたい。