An open API service indexing awesome lists of open source software.

https://github.com/rainmana/midimi

midimi is a native desktop MIDI player and visualizer built with Tauri v2 (Rust backend) and SvelteKit + Svelte 5 (frontend). Drop in a .mid file and watch it come alive: a full-screen "Cosmic Aurora" visualization reacts to every note in real time, while a bundled General MIDI soundfont renders the audio entirely in Rust.
https://github.com/rainmana/midimi

midi midi-player midi-visualizer music-player music-visualizer tauri-app tauri-apps

Last synced: 18 days ago
JSON representation

midimi is a native desktop MIDI player and visualizer built with Tauri v2 (Rust backend) and SvelteKit + Svelte 5 (frontend). Drop in a .mid file and watch it come alive: a full-screen "Cosmic Aurora" visualization reacts to every note in real time, while a bundled General MIDI soundfont renders the audio entirely in Rust.

Awesome Lists containing this project

README

          


midimi

midimi

A magical music box for MIDI — play, explore, and watch your music.


CI
License: Apache-2.0
Platforms
Built with

midimi is a native desktop MIDI player and visualizer built with Tauri v2 (Rust backend) and SvelteKit + Svelte 5 (frontend). Drop in a `.mid` file and watch it come alive: a full-screen "Cosmic Aurora" visualization reacts to every note in real time, while a bundled General MIDI soundfont renders the audio entirely in Rust — no browser audio engine, no drift. Transport controls let you play, pause, seek, adjust tempo and volume. Recent files and settings persist across launches. Licensed Apache-2.0.

---

## Prerequisites

- [Rust](https://rustup.rs/) (stable toolchain)
- [Node.js](https://nodejs.org/) 20+
- macOS, Linux (with WebKit2GTK + libasound), or Windows

---

## Setup

```bash
# 1. Fetch the bundled soundfont (~31 MB, one-time download)
./scripts/fetch-soundfont.sh

# 2. Install JS dependencies
npm install

# 3. Launch in dev mode (hot-reload frontend, Rust recompiles on change)
npm run tauri dev
```

---

## Build

```bash
npm run tauri build
```

Produces a platform-native installer in `src-tauri/target/release/bundle/`.

---

## Project layout

```
src/ SvelteKit frontend (SPA, SSR off)
routes/+page.svelte Root page — state, playhead listener, file open
lib/
ipc.ts Typed wrappers for every Tauri invoke + event
types.ts Shared TS interfaces (Note, MidiData, Playhead, …)
theme.ts Three built-in themes (Cosmic, Nebula Rose, Abyss)
VizCanvas.svelte Canvas host + note scheduler
visualizations/
types.ts Visualization plugin interface
cosmic-aurora.ts Bundled aurora visualization (Canvas 2D)
Transport.svelte Play/pause/seek/tempo/volume controls
TrackList.svelte Track name list
SoundfontPicker.svelte SF2 loader + switcher
ThemePicker.svelte Theme selector
src-tauri/src/ Rust backend
lib.rs App setup, resource resolution, 60 Hz playhead loop
commands.rs Tauri command handlers
midi.rs MIDI parser → note timeline
audio.rs AudioEngine, render thread, rtrb ring buffer, cpal
analysis.rs Hann-windowed FFT, 16 log-spaced bands, RMS
db.rs Turso embedded SQLite cache
assets/soundfonts/ GeneralUser GS license
scripts/ fetch-soundfont.sh
docs/
ARCHITECTURE.md Data flow, module map, Visualization plugin contract
DECISIONS.md ADR log (8 decisions)
```

---

## Docs

- [Architecture](docs/ARCHITECTURE.md) — data flow, module map, Visualization plugin contract
- [Design Decisions](docs/DECISIONS.md) — ADR log

---

## License

Apache-2.0 — see [LICENSE](LICENSE).

---

## Third-party assets

**GeneralUser GS v2.0** by S. Christian Collins
A permissive General MIDI soundfont bundled with midimi for out-of-box audio playback.
License: `assets/soundfonts/GeneralUser-GS-LICENSE.txt`
Source: https://github.com/mrbumpy409/GeneralUser-GS