leafo / sightreading.training

🎹 Sight reading training tool
http://sightreading.training
427 stars 74 forks source link

Hacked together a midi converter! #129

Open teadrinker opened 1 year ago

teadrinker commented 1 year ago

Spent a few days trying to hack together a midi converter for LML

https://sightreading.training/song/125/greensleeves https://sightreading.training/song/123/clair-de-lune-intro https://sightreading.training/song/124/clair-de-lune-bug

Some thoughts:

The main issue here is that each track automatically expands to multiple staffs, this should probably not happen if there are multiple tracks? I tried to transpose to avoid this, but it doesn't really work as it makes you play in the wrong octaves as well...

For songs like clair de lune, it doesn't make much sense to enforce you to play along a click though, so would be nice to have a play-mode like that.

Another feature that would be nice along these lines, is that if you have midifiles that are not aligned to the midi grid, you could hide the bars (or a keyword in the LML could hide the bars)

Would also be nice if LML supported tempo changes. So it will interpret the first tempo as the reference tempo, and then the tempo adjustment is a relative multiplier to the dynamic tempo, so the center of the slider is the original tempo (however the current tempo is shown in the UI of course)

Here is the source: https://github.com/teadrinker/midi-to-LML

leafo commented 1 year ago

Nice work.

LML was essentially developed alongside the "Play along" page and its limitations are tied to what the player is capable of displaying. I initially envisioned it as a system for quickly describing exercises, and haven't really fleshed it out for laying out proper pieces of music. I do want to address this in the long term though.

There's no tempo changes in LML because the play along page does not currently have a system for tempo changes. (Same idea with no real support for time signature changes). The way the staff is chosen automatically for a tracks is also definitely something that needs to be addressed. I'm thinking that tracks need syntax for display metadata, like what staff to use. That way you can have separate tracks for treble and bass, and let it render notes outside with ledger lines instead of auto-inserted a new staff.