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 |