Live musicians and worship teams, 2026
Multitrack player for musicians
A multitrack playback app for live musicians, built in Flutter with a native C++ audio engine that mixes tracks on the audio thread and generates a sample-accurate metronome.
Stack: Flutter, C++, Oboe, Dart FFI, Android
The problem
Bands that play with backing tracks need several stems (drums, bass, guides, click) playing in perfect sync on a phone, with individual volume control. Solutions built on generic players lag, drift out of sync and suffer from an irregular metronome.
What we built
- Playback of up to 16 long tracks per song, with mixing and per-track volume;
- A metronome synthesized inside the engine, aligned to the music;
- A Flutter interface connected to the native engine through FFI.
The engineering decisions that matter
- Streaming from disk, never loading everything into memory: each track is read in chunks into a ring buffer.
- Mixing on the audio thread: the callback sums every track and the metronome with no allocation, no I/O and no locks on the hot path.
- Sample-accurate metronome: generated at the exact audio frame, with none of the jitter of UI timers.
- The hardware rate is the source of truth: everything is resampled to the device's native rate.
| Layer | Technology |
|---|---|
| Interface | Flutter |
| Bridge | Dart FFI, C API |
| Engine | C++ with Oboe |
See how we approach mobile apps.