DanceGAIは、AI osu! mania beatmapジェネレーターであるManiaGAIを開発しているチームです。DanceGAIは音楽をプレイできる体験に変えるAIインフラを開発しており、ManiaGAIはその最初のプロダクトです:曲をアップロードすると、タイミング、ノーツ、複数の難易度をそろえた、完全にプレイ可能なosu! mania mapsetを生成し、標準的な.oszにまとめます。曲は、アップロードした音声ファイルでも、リンクしたosu! beatmapsetの曲でも構いません。どちらの場合も使うのは音声だけで、既存の譜面は一切使いません。このサイトではシステムのバージョン2が稼働しています。osu! maniaは最初の出力形式であり、システムは縦スクロール型リズムゲーム(VSRG)全般を対象に作られています。
このページでは、システムの仕組みと、なぜこのように設計したのかを説明します。アーキテクチャと技術的な判断については公開していますが、再構築に必要な詳細は公開していません。まだ公開していない数値については、推測ではなくその旨を記載しています。
技術概要
| タスク | 音声 → プレイ可能なosu! mania mapset(.osz)。1回の実行で複数の難易度をそろえたセット一式 |
|---|---|
| 対象 | 縦スクロール型リズムゲーム(VSRG) — まずはosu! mania。他のVSRG形式も計画中 |
| タイミング | Beat Thisの活性化出力 → 独自のグリッドフィッティング(可変テンポ対応)。ベンチマークでは、テンポ一定のRanked曲2,501曲のうち97.1%で、mapperのタイミングとの差が40 ms以内 |
| 音楽表現 | MERT-v1-95M。タイミンググリッドに合わせて拍ごとに整列 |
| プランナー | セクションごとのゲームプレイ状態を対象とするガウス拡散モデル、約6Mパラメータ |
| ノーツモデル | パターントークンを対象とするMaskGIT型の非自己回帰Transformer、約51Mパラメータ |
| 制御 | 4K–9K · ★1–10の目標値 · 5つのスタイル軸(LN比率、LN inverse、jack、mini LN、delay) |
| 学習データ | 人が作った150,622譜面 · 86,255曲 · 約14,500人のmapper · 4,227時間の音声 |
| 検証 | タイミンググリッドのチェック、不正なノーツの除去、無音ガード、osu!の★レート測定、mapset内の一貫性 |
| 学習 | RTX 4070 Ti SUPER 1枚 · 本番モデルの系譜全体で記録上約580 GPU時間 |
| 生成 | 要求された難易度を1回のバッチGPU処理でまとめて生成 · mapset一式でGPU計算時間約20秒 |
| 提供 | メモリスナップショットから復元されるサーバーレスGPUワーカー。音声の正規化はブラウザで実行 |
beatmapは「書き起こし」ではない
beatmapの自動生成と聞いて真っ先に思いつくのは、「音声を入れて、ニューラルネットワークを通して、ノーツが出てくる」という形です。しかし実際には、その考え方では、技術的には音楽に沿っていても遊んでいて気持ちよくない譜面ができあがります。良いosu! mania譜面は、書き起こしというより編曲に近いものです:mapperは、どの音にノーツを置くべきか、各セクションをどれくらいの密度に感じさせるか、どこにjackやロングノーツを置くか、パターンが両手の間でどう流れるか、そしてそれらすべてがEasyとExpertの難易度でどう変わるかを判断します。
そこでManiaGAIは、beatmap生成をいくつかの独立した問題の連なりとして扱います — 音楽を理解し、ゲームプレイを設計し、ノーツを配置し、結果をチェックする:
- 音楽
- 理解
- 設計
- 生成
- 改良
- Beatmap
1. 音楽の理解
後段のすべては、曲を正確に捉えられているかどうかにかかっています。最初の段階では、生の音声を2つのものに変換します:タイミンググリッドと、曲のあらゆる瞬間の高解像度な音楽表現です。
タイミング。拍と小節頭の活性化出力は、オープンソースのビートトラッキングモデルBeat Thisから得ています。その活性化出力をosu!のタイミンググリッド — テンポが変わる曲を含むBPMとオフセット — に変換するのは私たち独自のグリッドフィッティング手法で、生成モデルが学習したのと同じ系統のグリッドを出力します。タイミングはプレイヤーが最初に気づく部分です:拍から数ミリ秒ずれた譜面は、パターンがどれほど良くてもプレイできません。だからこそ、前処理の一工程ではなく、最重要の課題として扱っています。
音楽的特徴。音声は自己教師あり学習による音楽表現モデルMERT-v1-95Mでエンコードされ、タイミンググリッドに整列されます — これにより、モデルは音楽を拍ごとに捉えます:発音、質感、強さ、そしてそれらが曲を通してどう変化するか。無音部分は別途検出され、そこには何も配置されません。
2. beatmapの設計
ManiaGAIの設計の中心にあるのは、「何が起きるべきか」と「ノーツをどう置くか」を分けるという選択です。
専用の設計モデルが音楽表現を読み取り、ノーツが一つも存在しない段階で、曲全体のゲームプレイ構造を決めます:各セクションの密度、どの種類のパターンをどこに置くか、難易度をどう上げ下げするか、そしてそれらすべてを要求された難易度とスタイルにどう合わせるか。出力はノーツではなく、譜面をセクションごとに記述したプラン — 局所的な難易度と、ロングノーツ、jack、その他のパターンの配合 — です。
プランナーはガウス拡散モデル(約6Mパラメータ)です。音楽、キー数、目標の難易度とスタイルを条件として、曲のすべてのセクションのプランをまとめて生成します。拡散モデルはこの役割に向いています:プランは曲の滑らかで連続的な記述であり、それを全体として生成することで、プランナーは曲全体のバランスを一度に取ることができます。
このレベルで設計することで、ノーツを一つずつ置くモデルにはないもの — 曲全体を見渡す視点 — がシステムに備わります。サビをその前のAメロより激しくするよう設計したり、ブレイクダウンで一息つけるよう設計したりできるのです。
3. ノーツ生成
2つ目のモデルがプランを実際のノーツ配置に変換します — どのレーンか、どのノーツが単ノーツでどれがロングノーツか、パターンがどうつながるか。設計が構造を決め、ノーツ生成がその構造を、プランと音声の両方に沿ったプレイ可能なノーツに変えます。
ノーツモデルはMaskGIT型の非自己回帰Transformer(約51Mパラメータ)です。譜面は離散的なパターントークンとして表現され、最初から最後まで一つずつ書いていくのではなく、モデルは譜面全体を埋めてから、何回かのパスで改良していきます — 確信の持てるノーツを確定させ、残りを見直すのです。どのパスでも各セクションの前後両方の文脈が見えるため、曲全体を通してパターンの一貫性が保たれます。これらのパスを曲全体にどう割り当てるかは、私たち独自の改良手法です。
ManiaGAI が Planner + Noter を採用した理由(英語)→
4. 制御可能な生成
ManiaGAIは「生成して運任せ」のシステムではありません。同じ曲を明示的な制御のもとで生成でき、その制御はモデルが従うよう学習した内容の一部です:
- キー数 — 4Kから9Kまで。
- 難易度 — ★1から★10までの★レートを自由に選択。1曲から、EasyからExpertまでのmapset一式を1回の実行で生成します。
- スタイル — ロングノーツの割合や、jack、inverse LN、短いLN、delayのパターンがどれくらい含まれるかといったゲームプレイ上の特徴。それぞれジェネレーターで調整できます。
- 密度 — 固定のルールではなく、目標の難易度とプランから決まります。
すべての難易度は曲に対する同じ理解から生成されるため、mapsetは無関係な譜面の寄せ集めではなく、一つのファミリーとしてまとまります。次は、学習によるスタイル表現 — 少数のスライダーではなく、例を示すことで譜面のスタイルを指定する仕組み — に取り組んでいます。
5. 検証と品質管理
譜面があなたに届く前に、システムが次の点をチェックします:
- タイミング — 書き出されたタイミングポイントを、検出したグリッドと照合します。
- 不正なノーツ・プレイ不能なノーツ — 重なったノーツ、壊れたロングノーツ、ゲームで表現できない配置を解消し、明らかに無音の部分には何も配置しません。
- 難易度の実測 — すべての譜面の★レートを、osu!と同じ★レート算出アルゴリズムで測定し、難易度名は要求した値ではなく実測値に基づいて付けます。
- mapset内の一貫性 — 一つ下に来るはずの譜面より易しくなった譜面や、隣の譜面とほぼ同じ難易度になった譜面は、出荷せずに除外します。ジェネレーター上で、どの★が除外されたか、その理由とともに確認できます。
- 出力の有効性 — 結果は、音源、背景、ヒットサウンドを含む標準的な.oszとしてまとめられ、osu!にそのままインポートできます。
数字で見るManiaGAI
- 学習データの曲数
- 86,255
- 学習譜面数
- 150,622
- mapper数
- 約14,500
- ユニークな音声
- 4,227時間
- ディスク上の学習用特徴量
- 約0.7 TB
- 学習計算量(記録上、本番モデルの系譜)
- 約580 GPU時間
- ノーツモデルの最終学習
- 約4日
- モデルのパラメータ数
- 約57M(ノーツ51M+プランナー6M)
- mapset一式の生成
- 約20秒
- キーモード
- 4K–9K
- 難易度の範囲
- ★1–★10
- 1回あたりの難易度数
- 最大10(長い曲では少なくなります)
学習データ
本番モデルは、86,255曲 — ユニークな音声で4,227時間 — にわたる、およそ14,500人のmapperによる150,622の人が作ったosu! mania譜面から学習しています。このようなシステムで作業の大部分を占めるのはモデルではなく、データです:どの譜面を学ぶ価値があるものとみなすかを決め、すべての学習例のタイミングが正しいことを確かめ、譜面をプレイしやすさの本質を捉えられる形で表現することです。
評価:タイミング精度
私たちは、評価可能な、テンポが一定のRanked osu! mania mapsetすべて — 2,501曲 — を対象に、自分たちのタイミングを人間のタイミングと比較するベンチマークを行いました。比較対象は、オープンソースのMapperatorinatorのタイミングモードと、以前の検出器であるManiaGAI v1です。BPMがmapperのものと一致し(半分・倍のテンポも許容)、拍の位相が所定の許容範囲内であれば、その曲は正解とみなします。
| 手法 | ≤10 ms | ≤20 ms | ≤40 ms | BPM正解 | タイミング線1本 |
|---|---|---|---|---|---|
| ManiaGAI v2 | 71.4% | 92.3% | 97.1% | 98.0% | 100% |
| Mapperatorinator | 78.0% | 90.9% | 91.7% | 92.6% | 11.0% |
| ManiaGAI v1 | 74.8% | 88.0% | 90.7% | 94.0% | 92.8% |
テンポ一定のRanked曲のみ。「タイミング線1本」=mapperと同じく、1本のタイミング線でタイミングが付けられたこと(テンポ一定の曲で線が余分にあるのは、誤ったテンポ変化です)。本番と同一ではなく、それに近い構成で測定しています。
学習
プランナーとノーツモデルは、それぞれが扱う表現で別々に学習します — プランナーは各セクションのゲームプレイをガウス化した記述に対するガウス拡散モデルとして、ノーツモデルはパターントークンに対するマスクトークン予測で学習します。学習サンプルはキー数と難易度レベルのバランスを取っており、8Kや★10の譜面が4Kや★4の譜面に埋もれないようにしています。ノーツモデルは混合精度で学習します。
すべての変更は、学習損失だけでなく、生成された譜面そのもの — タイミング精度、目標に対する実測難易度、プレイしやすさ — で評価します。
推論とパフォーマンス
役に立つAIシステムに必要なのはモデルの質だけではありません。使えるだけの速さも必要です。ManiaGAIへのリクエストは次のように処理されます:
- ブラウザ上で:ファイルを選んだ瞬間から、設定を選んでいる間に、曲のデコード、ラウドネスの正規化、再エンコードを行います — そのため、GPUが音声処理を待つことはありません。
- 音楽の理解(GPU上):Beat ThisとMERT。グリッドフィッティングはMERTと並行してCPU上で実行します。
- 要求されたすべての難易度の設計とノーツ生成を、1回のバッチ処理で行います。
- 検証 — ★レートの測定、一貫性のチェック。
- .oszへのパッケージング、そしてダウンロード。
GPUワーカーは事前に読み込まれたスナップショットから起動するため、コールド状態のワーカーでもモデルの読み込みに時間を費やすことなく、数秒で準備が整います。一般的な曲では、mapset一式の生成にかかるGPU計算時間は約20秒です(アップロード、キュー待ち、ダウンロードは含みません)。実測例として、5つの難易度を含む2:50の曲はNVIDIA T4で12.7秒でした — タイミングと音楽特徴の抽出が3.8秒(並行実行)、設計が1.0秒、5つの難易度すべてのノーツ生成が6.1秒です。
公開していないこと
私たちが公開しているのは、アーキテクチャの原則、その背後にある技術的な判断、そしてシステムができること・できないことです — 土台にしているオープンなモデル(Beat This、MERT)や、私たち独自のモデルが属する系統(ガウス拡散、MaskGIT)も含みます。私たちが独自に開発した手法や、システムを再現できてしまう詳細は公開していません:タイミンググリッドのフィッティングとテンポ区間の統合方法、ノーツモデルの改良パスを曲全体にどう割り当てるか、モデルの条件付けの方法、正確なアーキテクチャ、損失関数とハイパーパラメータ、そして学習データの収集・選別・構築の方法です。それが、作ったものについて透明であることと、レシピを渡してしまうことの境界線です。品質について主張するときは、形容詞ではなく、公開したベンチマークで裏付けるつもりです。
これから
osu! maniaの先へ。ManiaGAIは、osu! maniaに限定されないゲームプレイ表現を中心に設計されています:タイミンググリッド上に配置され、目標の難易度を条件とする、レーン上のノーツとロングノーツです。osu! maniaは最初の出力形式であり、システムの限界ではありません。
詳しく知る
ManiaGAIを支える研究と開発の詳細: