View Single Post
Old 09-20-2019, 11:56 AM   #13
Klangfarben
Human being with feelings
 
Join Date: Jul 2016
Location: Los Angeles, CA
Posts: 1,701
Default

So after giving some more thought on midi chase with negative track offset, I'm proposing the idea Schwa mentioned which is a silent pre-roll. The two options discussed again were 1) adding a silent pre-roll and 2) don't offset delayed events at the play cursor.

My proposal would be the following:

1) Have Reaper do a silent pre-roll that equals the amount of the largest negative track delay in the project.

2) The playhead should NOT move during this pre-roll. To the end user it should just seem like a slight delay before playback engages. The transport would then start moving exactly on the playhead location as it normally does.

3) The pre-roll area should only play tracks that have a negative offset. Any track that does not have a negative offset should not play until the playhead. This way loops that are triggered at the downbeat that need no offset will play in time as they will be triggering exactly at the downbeat, not before.

4) In the case of recording, automation and/or retrospective record, no data should be written before the playhead. Nothing should be written in the silent pre-roll area. So as far as scripts and the like are concerned, playback started from the play head location, not from the pre-roll location.

5) The pre-roll should preempt any user set pre-roll for playback and recording. in other words, the silent pre-roll happens before any user set pre-roll.

6) The pre-roll setting should be an option or preference that can be toggled on/off. So if a user does set a track to -1000ms delay and doesn't want the lag before playback, they can simply turn it off in which case midi events at the playhead might not be triggered depending on note length.

I think this is better for a couple reasons. First, it's an easy offset to calculate. Just look for the largest negative offset in the project and set the silent pre-roll to that amount. With option 2 it would have to scan all events at the play head and look for negative delay on the associated track before playing back. Second, with option 2 if you have loops or audio that need to have a negative offset to play in time, they won't play in time until the next event. Which in the case of a loop, there may not be another event. It might just be a long loop that will play out of time. So using option 2 with loops or audio vs regular midi events would be problematic.

At the end of the day, I'm fine with either option. So if there is one that is easier than another to implement, I think that's a lot better than not implementing anything at all. I think though that option 1 solves a few more use cases and if implemented with the above caveats would be pretty invisible to the user. I'm also not so concerned with a slight delay before playback start as most negative offsets I use aren't more than 100ms. I think the largest I've ever used might be 300ms. So we aren't talking about a very long delay and if there is a pref or option to turn it off, I don't think it would cause any issues for anyone.

Thoughts? Votes? Better ideas?
Klangfarben is offline   Reply With Quote