Real-time MIDI sequencer engine with external clock synchronization and transport state management.
- External MIDI Clock Sync - Slave mode synchronization (src/external_clock.rs)
- Transport State Management - Play/stop/position tracking (src/state.rs)
- Scheduler Core - Tick-driven event queue (src/event_loop.rs)
- CLI Interface - Interactive transport control (src/ui.rs)
# Clone and build
git clone https://github.com/jgumbley/phasorsyncrs
cd phasorsyncrs
make deps # install ALSA + pkg-config for midir
make runsrc/
├── midi/ # MIDI I/O implementations
│ └── external_clock.rs - Clock synchronization logic
├── state.rs # Transport state machine
├── ui.rs # Status display interfaces
└── event_loop.rs - Core timing engine
tests/
└── midi_tests.rs - MIDI I/O validation tests
# Test with mock MIDI (no hardware required)
make run
# Run bound onto ext device (config in makefile)
make run-oxi
# List ALSA audio + MIDI devices
make list-devices
# Bind external clock input to a specific ALSA MIDI port (substring match)
make run-bind MIDI_IN="UMC1820"
# UMC1820 helpers (recordings land in wav_files/, which is gitignored)
make umc1820-hw-params
make record # press Enter to stop
make umc1820-record UMC1820_SECONDS=5
make umc1820-record-stereo UMC1820_SECONDS=5Key design decisions documented in ADRs:
- ADR00: Guiding Principles
- ADR01: TDD and Unit Size Structure
- ADR02: MIDI Library Selection
- ADR03: Concurrency Model
GNU Affero General Public License v3 - See LICENSE for details