LMMS / lmms

Cross-platform music production software
https://lmms.io
GNU General Public License v2.0
7.98k stars 995 forks source link

Make automation of time sig more useable #5921

Open axredneck opened 3 years ago

axredneck commented 3 years ago

Enhancement Summary

Currently LMMS allows to change time sig during song with Automation but effect is displayed only while song plays but not while user edits it.

Justification

e.g. user wants to make a cover of Metallica's "Master of Puppets" or a cover of some Dream Theater song.

Mockup

If time sig changes during song then Piano Roll could look somehow like this: Screenshot_20210225_211001

Sorry for my bad English.

IanCaio commented 3 years ago

It's an interesting suggestion, sadly that's one of those enhancements that look visually simple, but in the coding perspective can become a nightmare.

The way automation works on LMMS, we only know the value of an automation at a particular time position when we play the song on that position (lots of things happen during the "Play Song" action, one of them being calculating the value of automatable models on a time frame).

So for drawing an adapted PianoRoll frame it would require us to calculate all the automation values for the time frame that the current pattern is spanning, so we know where it changes. Another complication is that the automation of the time sig is not restrained to fit the previous time signature: it can change in the space between two intervals, which would result in a PianoRoll frame that is very twisted and not pretty like the one on your example.

Yet another complication is that this affects all calculations that involves screen positions (like drawing of notes, dragging notes, drawing detuning info, etcetera). It could become a mess to have to account for sudden changes on the time signature while doing those screen position calculations.

One way I could see it happening is maybe creating a concept of PianoRoll regions, where you can have one region from bar 0 to bar 4 that has a time signature and another region from bar 4 to bar 8 with another time signature. User would then have to set them manually. That at least resolves some of the issues I mentioned earlier, but would still be a coding nightmare since ALL drawing methods and others that depends on screen positions would have to now account for those separate regions. It adds lots of moving pieces and is still hard to pull off, with a high possibility of adding bugs.

For now the easiest way to deal with that situation is to edit the patterns of each time signature section separately, adjusting the time sig manually so the piano roll is adjusted, and then just copy and paste them into the final pattern in the right position.

JGHFunRun commented 3 years ago

The thing I thought of for this was specially designed automation tracks (that can only be added once) that are designed specifically for time signatures and BPM (which has a similar when working with sample tracks)

JGHFunRun commented 3 years ago

I’m seeing that after the second paragraph there’s stuff that would cause problems even for this method, but it would fix the first one, probably.

axredneck commented 3 years ago

I can also suggest easier to implement alternative: some kind of "note" that ends a bar, like it is done in various trackers. edit: I believe such "next bar event" would be even more flexible and useful. So i'll close this issue as "too complex" and open new one for "tracker-like next bar event" ?

IanCaio commented 3 years ago

I can also suggest easier to implement alternative: some kind of "note" that ends a bar, like it is done in various trackers. edit: I believe such "next bar event" would be even more flexible and useful. So i'll close this issue as "too complex" and open new one for "tracker-like next bar event" ?

I don't think you need to close it, this thread can be a place of discussion of how the feature could be done. I just brought up some difficulties in terms of the coding that came on top of my head so any ideas discussed account for them. It's definitely not an easy feature to implement, but that doesn't mean it's impossible or that people can't come up with less complex alternatives!

Spekular commented 3 years ago

This is very similar to what Ian said, but rather than approaching this from the angle of automation, I think it makes more sense to think of a project using a sequence of time signatures that each last some duration. In other words, instead of having one global time signature and changing it, sections in the song editor have their own local time signatures. Somewhat relevant: skip points (#1175, #709) or the time signature rework mentioned in the old future map (#908).