A desktop chiptune tracker / DAW for the Sega Genesis / Mega Drive sound hardware. Compose music against emulation of the console's actual sound chips, then export it to a format that plays back on real hardware (or in a ROM).
Built with Tauri v2 (Rust core) and React 19 + TypeScript (UI).
- Real-time playback through emulation of the Yamaha YM2612 FM synth chip (via the Nuked-OPN2 core) and the SN76489 PSG (pure-Rust emulator). The sequencer runs inside the audio callback, so timing is sample-accurate.
- Compose from scratch, or import an existing song. A new project is seeded with one track per hardware channel (
FM1–FM6/DAC,PSG1–PSG3,PSG Noise,DAC); from there you place regions on the arrangement timeline (with a draggable loop bracket on its ruler), and enter notes in the piano roll. - Three instrument types matching the hardware: FM, PSG, and DAC (PCM samples) — each with a dedicated editor: FM operator/algorithm knobs, drawable PSG volume envelopes, WAV/raw DAC import.
- Piano roll with a Draw Mode (
B) for one-gesture note painting and right-click erase, plus marquee/click selection, group drag, keyboard transpose, grid nudge, copy/paste and undo/redo. Every note carries its own velocity, pan, detune and modulation, and can override its track's voice. - Edits stay audible while the loop runs — adding, moving or deleting notes and tweaking instrument parameters reload the running sequence instead of stopping it.
- A bundled instrument library of ~600 FM voices and PSG envelopes ripped from Sonic 2, Sonic 3 & Knuckles (including its Universal Voice Bank) and The Adventures of Batman & Robin. Search, tag and favorite entries, audition them, and drag one onto a track header or onto notes in the piano roll. Your own library roots can be added from the app, and
.tfi/.vgi/.y12/.gybfiles imported into them. - Live spectrum analyzer + per-track level meters for visual feedback while playing.
| Direction | Formats |
|---|---|
| Import | SMPS (Sega's sound-driver assembly, .asm text), VGM/VGZ, Zyrinx song data out of a Genesis ROM (Batman & Robin), FM instrument files (.tfi, .vgi, .y12, .gyb) |
| Export | Flamedriver SMPS assembly — Mus - <name>.asm + Voices - <name>.asm plus a dac/ folder, assembling straight into a ROM — and a rendered WAV. VGM export exists in the Rust core but has no UI button yet. |
This makes Seraph a companion to the SMPS-based ROM-hacking projects in the parent workspace: compose here, export SMPS, drop it into the Z80 Flamedriver sound driver.
- Core: Rust, cpal audio output, rtrb lock-free ring buffer
- Sound chips: Nuked-OPN2 (YM2612, vendored C + FFI), custom Rust SN76489
- UI: React 19, TypeScript 5.8, HTML5 Canvas rendering, CSS Modules
- Shell: Tauri v2; IPC commands and their TypeScript types are generated by tauri-specta into
src/bindings.ts
Prerequisites: a Rust toolchain, Node.js, and the Tauri v2 system dependencies for your platform.
npm install # install frontend dependencies
npm run tauri dev # run the app (Vite dev server + Tauri window)
npm run tauri build # produce a release buildFrontend-only commands:
npm run dev # Vite dev server (no Tauri window)
npm run build # type-check + build frontend
npm test # Vitest suite
npm run gen:theme # regenerate CSS theme tokens from tokens.jsonRust core, from src-tauri/:
cargo test # Rust test suite
# rebuild a bundled library pack from a disassembly / ROM
# (subcommands: smps | gyb | zyrinx | psg-table | uvb — see the file header)
cargo run --bin extract_library -- psg-table --out ../library/smps-psgsrc/ React + TypeScript UI
components/ arrangement, piano roll, instrument editors, library panel
widgets/ hooks/ utils/ knobs, envelope/waveform views, editing + grid helpers
api/ typed wrappers over the generated Tauri bindings
theme/ design tokens + generated CSS
src-tauri/src/ Rust core
audio/ real-time engine, mixing, spectrum analysis
ym2612/ sn76489/ chip emulation (Nuked-OPN2 wrapper; native PSG)
dac/ PCM import + playback pipeline
sequencer/ tick-based sequencer + snapshots
driver/ Flamedriver SMPS profile (channel layout, voice packing)
import/ export/ SMPS / VGM / Zyrinx / FM format parsers and writers
library/ instrument library index, store and extraction
ipc/ Tauri command surface
model/ project/ data model + project file management
src-tauri/vendor/ vendored Nuked-OPN2 C source
library/ bundled instrument packs (shipped as a Tauri resource)
docs/ design specs and implementation plans
Early development (0.1.0). The audio engine, instrument editors, arrangement and piano-roll editing, the instrument library, and SMPS/WAV export are functional; expect rough edges. Playback is a preview model rather than a hardware-exact one — most visibly, the DAC is mixed alongside FM6 instead of stealing it the way the real chip does.