尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Drop, hit, glow, sound.
otosu is a generative music piece for the eye and ear: falling balls strike the lines and shapes you draw, and every hit becomes a note and a flash of light.
It aims to let anyone make music by feel, without playing an instrument, and to look good projected on a wall.查看完整 README ↗English | 日本語
Drop, hit, glow, sound.
otosu is a generative music piece for the eye and ear: falling balls strike the lines and shapes you draw, and every hit becomes a note and a flash of light. It aims to let anyone make music by feel, without playing an instrument, and to look good projected on a wall.
Try it: https://otosu.shunyakoide.com
Needs Node.js 20.19 or later.
npm install
npm run dev
npm test # physics determinism, no tunneling, MIDI export, and more
npm run lint # Biome
npm run build # type check and production build (dist/)
Built with Vite, TypeScript, three.js and Tone.js. The physics (balls against line segments) is hand-written and deterministic: the same layout always plays the same music.
npm run build produces a static site in dist/; any static host works.
To use npm run deploy (Cloudflare Workers), first remove the routes line in wrangler.jsonc, which points at the author's domain. The site is then served at otosu.<your-subdomain>.workers.dev.
| Input | Action |
|---|---|
| Drag | Draw a line or shape (bigger shapes play lower notes; you hear the pitch softly as you draw) |
| 1–5 | Tools: line / pen (freehand) / circle / triangle / square. For shapes, drag outward from the center; the drag distance sets the size |
| Shift + drag | Draw a bumper (bounces balls hard) |
| Right-click (long-press on touch) | Shape menu: toggle the echo / rise / chord effects, or delete the shape |
| Space | Play / pause (pausing stops dropping new balls and lets the rest fade out) |
| M | Mute (built-in sound and MIDI output) |
| C | Clear all shapes |
| S | Copy the current layout as a URL (opening it plays the same music) |
| R | Start / stop recording a .mid file (saved when you stop) |
| F | Fullscreen |
| H | Hide the UI (for projection) |
| , | Open settings |
| Esc | Close the open popover |
The toolbar at the top of the screen has:
| Popover | Contents |
|---|---|
| motion | Motion on/off (move), shape rotation (spin), and emitter movement (sway) with its style (glide / step) |
| light | Glow, trail style, effects on hit (drip / flowers and their kind: mixed, sunflower, spider lily, daisy, meadow / readout / crosshair / notes / scope / stars), and the backdrop |
| sound | Rhythm (emitter periods), song (chord progression), and a soft chord that keeps playing underneath (hum) |
| settings | Stereo width, sound-to-light offset (light delay), resolution, quality (auto or fixed), MIDI, and the list of keys |
| scenes | Save and load layouts, export / import them as files, copy a link |
Each shape plays a different instrument.
| Shape | Sound |
|---|---|
| Line | Bell (melody) |
| Pen | Plucked tone (kalimba-like) |
| Circle | Soft kick to tom, tuned to the chord root; bigger circles are lower |
| Triangle | Metal (chime / singing bowl), long decay |
| Square | Wooden click (woodblock-like) |
The harmony shifts every 8 bars. Pick a song in the sound popover:
Line colors stay the same; only the pitches move. Your layout and settings are saved in the browser automatically and come back after a reload.
record .mid under MIDI in settings) to start recording. Recording begins on the next beat.otosu-<date>-<time>.mid is saved.connect under MIDI and allow access in the browser prompt (if no output is chosen yet, IAC is selected automatically when present).drums channel (10 by default). Recorded .mid files do the same.built-in. Use offset to compensate for DAW latency.