Midi2lua Hot
The utility acts as a transpiler. You feed it a .mid file, and it spits out a .lua file.
Let’s say you have a simple drum track exported from your DAW. You run the command: midi2lua hot
./midi2lua my_track.mid > track_data.lua
What you get on the other side is a structured Lua table that looks something like this: The utility acts as a transpiler
return
ticks_per_beat = 480,
tempo_map =
tick = 0, bpm = 120
,
tracks =
name = "Drums",
events =
tick = 0, type = "note_on", note = 36, velocity = 127, channel = 10 ,
tick = 240, type = "note_off", note = 36, channel = 10 ,
tick = 480, type = "note_on", note = 38, velocity = 90, channel = 10 ,
tick = 720, type = "note_off", note = 38, channel = 10 ,
Suddenly, your music isn't just audio—it’s data structure you can iterate over. What you get on the other side is
In the Lua world, "pure Lua" is a feature, not a bug. Because midi2lua generates a static table file, you don't need a special library to run it inside your game. You just dofile() or require() it. It works in LÖVE, Corona/Solar2D, Roblox, and even embedded microcontroller Lua environments.
| Feature | Original midi2lua | midi2lua hot | |--------|------------------|--------------------| | Live Drum Lighting | Basic | Full (HH, Snare, Tom, Crash) | | Pitch Bend to Laser | No | Yes | | Velocity Sensitivity | No | Yes | | Open/Tap Notes | Partial | Full | | Venue Forcing | No | Yes | | Maintenance | Abandoned | Community-updated |