谱面生成器需要在电脑浏览器中使用。请在电脑上打开此页面,加载模型、选择歌曲并生成谱面。
生成谱面
1模型
首次访问时从 sed-i/ensomi-r2 下载约 120 MB,之后从浏览器缓存读取。浏览器支持时,节拍检测使用 WebGPU,其余部分使用 WebAssembly 多线程。模型已缓存时,一首 3:20 的歌在 Apple M5 的 Chrome 上约需 6 秒,不使用 WebGPU 时约需 13 秒。
2歌曲
支持此浏览器能解码的任何格式。文件只留在你的电脑上。
3条件
生成的谱面可能比要求的星数更简单或更难;难度控制还会继续改进。
按歌曲原始采样率解码,并用与 Python 版相同的方式转换,使节拍时间与 Python 版的差距在千分之几毫秒以内(关闭时最多约 1.3 毫秒)。每首歌多花约 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! 上 2 到 6 星的 Ranked 与 Loved 4K 谱面训练。我们不分发这些谱面及其音频。用途与更正申请见数据来源。
下一步: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 模型卡(英文)。
加入社群吧!
写谱、玩谱、做音乐还是写代码,都欢迎一起探索。告诉我们你听到了什么,想做出什么。