譜面の生成にはパソコンのブラウザが必要です。モデルを読み込み、曲を選んで譜面を生成するには、このページをパソコンで開いてください。
譜面を生成
1モデル
初回は sed-i/ensomi-r2 から約 120 MB をダウンロードし、2 回目以降はこのブラウザのキャッシュから読み込みます。ブラウザが対応していればビート検出に WebGPU を使い、それ以外は WebAssembly のスレッドで処理します。モデルがキャッシュ済みの状態で、3 分 20 秒の曲が Apple M5 の Chrome で約 6 秒、WebGPU なしで約 13 秒でした。
2曲
このブラウザでデコードできる形式なら何でも使えます。ファイルはパソコンの外に送られません。
3条件
生成された譜面は、指定した★より易しくも難しくもなることがあります。難易度のコントロールは今後改善していきます。
曲を元のサンプルレートでデコードし、Python 版と同じ方法で変換します。ビートの時刻が Python 版と数千分の 1 ミリ秒以内で一致します(オフのときは最大約 1.3 ms ずれます)。1 曲あたり約 0.5 秒余分にかかり、サンプルレートの高いファイルではさらにかかります(96 kHz で約 1.3 秒)。
区間 任意
曲の一部の範囲に、スタイルや目標の★を指定できます。時刻は mm:ss で入力します。各区間は 8〜32 秒で、曲の範囲内に収め、ほかの区間と重ねないでください。ある区間の終わりから次の区間を始めることはできます。
- 準備
- タイミング
- ノーツの位置
- 配置
- 書き出し
モデルを読み込んで曲を選ぶと、生成を始められます。
あなたの譜面
スペースキーで再生・一時停止、← → で 5 秒移動します。レーン上ではクリックで移動、ドラッグで少しずつ移動、ホイールか ↑ ↓ でスクロールできます。ローズ色が通常ノーツ、ラベンダー色がロングノーツ、紫の帯が指定した区間です。
「.osu をステージ」でこの譜面を曲の .osz に入れます。もう一度押すと外れます。同じ曲の欲しい譜面をステージしてから一度ダウンロードすると、osu! は一つのビートマップセットとして取り込みます。ダウンロードするか別の曲を選ぶと、ステージは空になります。
生成時間
なぜ ensomi か
音楽はたいてい、聴くものです。リズムゲームなら、曲の中に入り込めます。手がビートを追いかけ、聴くことが遊ぶことに変わります。けれど、曲が遊べるようになるのは、誰かが一つひとつ手で譜面を作ってから。身の回りの音楽のほとんどには、譜面がありません。
それを変えていきます。ensomi はマッパーが作った譜面から学び、音声から新しい譜面を書きます。好きな音楽も、すでに身の回りに流れている音楽も、遊べるものにするために。
そして、これは始まりにすぎません。モデルが音楽を本当に理解し、その理解を誰もが土台にできるようになったら、何が可能になるのか。新しい遊び方、新しい創作、音を扱う新しい方法。私たちはそれをオープンに探求しています。これらすべてを可能にしてくれたコミュニティと一緒に。
私たちのミッション
音楽の理解とリズムゲームの創作を、プレイヤー、マッパー、開発者のためのオープンなツールに。音楽を聴くこと、遊ぶこと、音楽でつくること。それらがひとつの体験になるまで。私たちが探求している四つのフロンティアです。
まわりの音楽で遊ぶ
身の回りの音楽が、遊べるものになる。
近くで曲がすでに流れています。ensomi はその曲を認識して再生位置を見つけ、リアルタイムで生成した譜面を始めます。譜面は音楽を止めることなく、音楽についていきます。
オープンな音楽理解
耳が導き、タイミングがついてくる。
マッパーが曲を入れると、ensomi がビートとテンポを提案します。拍子が変わる曲でも、拍の取りにくい曲でも。耳と違うところがあれば、聴こえたとおりに印をつけるだけで、その前後のタイミングが計算し直されます。設計からオープンなので、DAW もゲームも、まだ誰も思いついていないツールも、同じ音楽理解の上につくることができます。
練習
好きな音楽で練習する。
プレイヤーが好きな曲と上達したい動きを選ぶと、その動きを軸に譜面ができあがります。
4K マルチプレイの新しいかたち
あなたのいいプレイが、相手の譜面に降ってくる。
対戦テトリスでラインを消すように、きれいに叩けたパッセージや長いコンボが攻撃になります。ノーツの連打や難しいパターンが、相手がこれから叩く譜面に落ちてきます。協力プレイでは息を合わせ、一人のプレイがもう一人の譜面を形づくります。
R2 はその最初の一歩です。待っている間に曲全体の譜面ができ、曲の一部にスタイルを指定することもすでにできます。ここから、音楽とリアルタイムで一緒に流れる譜面、プレイに合わせて変わる譜面、聴こえるものに応える譜面へと進んでいきます。
R2:曲から、遊べる譜面へ
R2 は、誰でも遊べる私たちの最初のリリースです。音声だけをもとに動き、曲が譜面になるまでに三つのことが起きます。
- ビートを見つける。R2 はビートを聴き取り、テンポの区間ごとに、曲の音が鳴り始める位置へ合わせます。
- ノーツの位置を決める。聴こえた音をもとに、一拍ごとにノーツの始まる位置を決めます。
- 譜面を配置する。ノーツの置かれ方が似ている人間の譜面から、ロングノーツや同時押しの多さといったキャラクターを受け取り、レーン・通常ノーツ・ロングノーツを配置します。この段階ではまだ音声を聴いていません。
できあがるのは、ブラウザの中で作られた完全な osu!mania 4K 譜面です。音楽に合わせて流れを確認でき、そのまま osu! で開けます。
R2 と行モデルは、osu! の Ranked と Loved の 4K 譜面(★2〜6)で学習しました。それらの譜面や音声は配布していません。使い道と訂正の依頼についてはデータの出所をご覧ください。
次は N1、R3
二つのモデル、ひとつの方向。N1 は音楽を理解することを学びます。R3 はその理解を、その曲のために書かれたと感じられる譜面に変えます。
N1 · オープンな音楽理解
最初のノーツの前に、すべてのビートを見つける作業がある。
地道で時間のかかる作業なのに、テンポの変化や変拍子、拍の取りにくい曲になると、いまのツールは頼りになりません。N1 は、音楽を本当に聴き取るために開発しているモデルです。まずはタイミングから始めます。
-
テンポマップから始める
曲を入れると、赤線の入った
.osuが返ってきます。 -
耳で直す
聴こえたところに印をつければ、N1 がその前後のタイミングを計算し直します。ほかの部分はそのままです。
-
その上につくる
コードも含めて MIT ライセンス。DAW やゲーム、ほかのツールでも使えます。
R3 · 次の譜面システム
R2 は曲を聴かずに配置を決めている。
そのためロングノーツが音楽から離れ、指定より易しく、あるいは難しい譜面になることがあります。R3 は、R2 が教えてくれた課題を解決する次の譜面システムです。
-
音楽についていくノーツ
N1 のタイミングでノーツを聴こえる音の上に置き、配置も音を聴くことで、ロングノーツが曲に沿います。
-
信頼できる難易度
★を指定すれば、その★の譜面が返ってきます。
-
リアルタイム
音楽が流れるそばから譜面を生成し、身の回りの音楽を遊べるものにします。
研究を追いかけ、一緒に形にしていきましょう。GitHub で公開しています。
自分で動かす
上の生成器は @ensomi/runtime を使って R2 をブラウザで動かしています。ニューラルネットワークは ONNX Runtime Web で、それ以外は WebAssembly にコンパイルした ensomi の Rust ランタイムで動きます。曲のデコードと乱数はブラウザ側で行うため、ここでのシードとコマンドラインでの同じシードからは、同じ譜面にはなりません。
コマンドラインでリリース版を動かすには(Apple シリコン搭載の macOS で確認済み。Linux と CUDA では実行していません):
git clone https://github.com/ensomi-labs/ensomi-model.git
cd ensomi-model
git checkout --detach r2-1.0.1
uv sync --python 3.10 --extra mps
hf download sed-i/ensomi-r2 --revision r2-1.0.1 --local-dir artifacts/hf-r2
uv run --python 3.10 --extra mps python -m ensomi_model.system.make \
--model-dir artifacts/hf-r2 --audio /path/to/song.mp3 --star 3.5 \
--title "Song title" --artist "Artist" --seed 0 --out artifacts/my-chart.osz
初回の実行では、BeatThis のチェックポイント(81 MB)も作者の配布元からダウンロードします。WAV 以外の音声のデコードには ffmpeg が必要です。--help で指定できる項目がすべて表示されます。詳しい手順は Hugging Face のモデルカード(英語)にあります。
コミュニティに参加しよう!
譜面を作る人も、遊ぶ人も、音楽を作る人も、コードを書く人も。一緒に探求しましょう。聴こえたこと、つくりたいものを聞かせてください。