尚未偵測到更新。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.