-- main.lua local midi_data = require("song") -- A simple scheduler local current_tick = 0 local bpm = 120 local ticks_per_beat = midi_data.ticks_per_beat
Bridging the Gap: An Introduction to midi2lua for Interactive Music midi2lua
for _, track in ipairs(midi_data.tracks) do for _, event in ipairs(track) do if event.tick <= current_tick and not event.triggered then if event.type == "note_on" then playSound(noteToFrequency(event.note)) end event.triggered = true end end end end Most midi2lua converters are command-line tools or simple Python/Lua scripts. -- main
Want a boss in your RPG to cast spells on specific beats of the background music? Convert the MIDI percussion track to Lua. When the Lua clock hits tick 1920 , spawn the fireball. It is deterministic and perfectly synced. When the Lua clock hits tick 1920 , spawn the fireball
I use midi2lua to control DMX lights. I draw the "chase" pattern in a MIDI clip (C4 = Red, D4 = Blue), convert it to Lua, and let the script run the light show. No expensive lighting software required. A Simple Example (Love2D) Assume you have a file called song.lua that was generated by midi2lua .
-- Output from midi2lua { ticks_per_beat = 480, tracks = { { -- Track 1: Piano { tick = 0, type = "note_on", note = 60, velocity = 100 }, { tick = 120, type = "note_off", note = 60, velocity = 64 }, { tick = 240, type = "note_on", note = 64, velocity = 95 } } } } 1. Rhythm Games (Roblox / Love2D) If you are building a Dance Dance Revolution or Guitar Hero clone in Roblox (Luau) or Love2D, timing is everything. midi2lua allows your level designers to compose in FL Studio or Ableton, then drop the exported file into your game’s asset pipeline.