All 21 songs ported from hardcoded C# methods to Lua scripts in scripts/songs/. MidiPlayer.cs is now a clean playback engine with a registry; no song data in C#.

New Lua composition API: song(), track(), drums(), rep(), tab() globals with full pitch, duration, instrument, and percussion constants. Runtime music.* console API for play, stop, next, mute, list, current, volume, and reverb.

MidiPlayer internals rewritten to use beat-fraction durations instead of raw milliseconds, with per-track options (volume, pan, reverb, chorus, bend range) and inline control events (pitch bend, expression, sustain, modulation). Songs auto-load from scripts/songs/*.lua at startup, resolving paths for both dev and published builds.