Instead of hardcoding noteOn(60, 100) a thousand times, you feed your MIDI file into midi2lua , and it outputs a table like this:
If you are tired of guessing note timings or hardcoding arrays of integers, give it a try. Compose in the piano roll. Code in Lua. Let midi2lua handle the handshake. Have you used MIDI with Lua before? Are you building a rhythm game or a synth tool? Let me know in the comments below. midi2lua
-- 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 Instead of hardcoding noteOn(60, 100) a thousand times,
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 . Let midi2lua handle the handshake
function love.update(dt) -- Convert real time to ticks (simplified) current_tick = current_tick + (dt * (bpm / 60) * ticks_per_beat)
-- 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.