LuaMidi icon indicating copy to clipboard operation
LuaMidi copied to clipboard

LuaMidi.get_MIDI_tracks does not set duration on NoteEvents

Open okiyama opened this issue 7 years ago • 4 comments

Example program:

local LuaMidi = require ('LuaMidi');

local tracks = LuaMidi.get_MIDI_tracks("tetris.midi");
events = tracks[2]["events"]

for i=2, #events do
	console.log(events[i]:get_duration()); --no return value
end

Tetris.midi in a zip file.

On line 147 of LuaMidi.lua, the event table created for the new NoteEvent doesn't have duration information. I gave a look at raw_note myself but it was tough to determine how to find a duration from that.

I take it what needs to happen is looking at the difference between a NoteOn and NoteOff event, but I'm not familiar enough with the MIDI spec or how the data is being digested to really discern how to figure that information out.

okiyama avatar Aug 15 '18 02:08 okiyama

Yes, this is correct. The thing is I haven't implemented it because it creates a problem I couldn't find time to think about, yet.

If you check API, you'll notice that LuaMidi abstracts NoteOn/NoteOff events and compiles them to NoteEvent. However, this class isn't, currently able to intercalate notes, but, only, to make them sequencial (a melody with all notes having the same duration) or simultaneous (basically, a chord).

What happens is that I can't, with the current abstraction, import a MIDI file that contains a simple note that starts while another is playing in the same track, because it can't be described in LuaMidi.

The way I see it, I have just a good option: to add manual/arbitrary NoteOn and NoteOff events, so LuaMidi would import tracks with less abstraction and use NoteEvents only when composing new tracks.

TL;DR: Yes, I can determine the duration, but it exposes a flaw I have to handle first.

I'm currently focused on college, but I think I could do that during my free time. If you have any other suggestion, I would appreciate to read it.

PedroAlvesV avatar Aug 16 '18 03:08 PedroAlvesV

Ahh I see the problem, that does make sense. No, nothing really jumps to my mind for better solutions. For my purposes I was just going to switch to using Pete Billam's MIDI.lua. So don't stress to hard if this would take a lot of time for you.

Good luck with college too :)

okiyama avatar Aug 16 '18 12:08 okiyama

Thanks, man.

I just read your link-bot repo. I have to fix this anyway to release a concise version of LuaMidi, so I'll be working on it starting tonight. If you want to migrate back in the future, it'd be nice to have some feedback, also haha

PedroAlvesV avatar Aug 16 '18 15:08 PedroAlvesV

Awesome! Yeah I'll keep a watch on this, if you get things working I'll likely switch back. LuaMidi's API is much nicer :]

okiyama avatar Aug 16 '18 18:08 okiyama