"Relatch" behavior and sequencer "Perform - Full" mode. Bug?

PyraOS V3.23
MKII

I have found odd behavior when switching between sequences of different lengths while in “Perform - Full” mode; the Sequence progress bar will start part way through (even if the corresponding Track starts at the beginning) which causes the next Sequence to start before the track has played it’s entire length.

How to replicate behavior:

Sequence_1 (S1):
    Track_1, Length 1 bar, Relatch mode

Sequence_2 (S2):
    Track_2, Length 2 bars, Relatch mode

Running sequencer in "Perform - Full" mode

Now, try switching between Sequence_1 and Sequence_2, playing each sequence only once.

Detailed behavior:
- [S1 is selected, press Play button]
- S1 is playing
- [while S1 is playing, press S2]
- S1 finishes playing
- S2 starts playing. Progress bar begins in the middle. Track_2 starts at the beginning
- [while S2 is playing, press S1]
- S2 progress bar finishes and restarts at the beginning, while Track_2 stops playing halfway through (!!!)
- Track_1 begins

I understand this is a result of how tracks are really being un-muted, but it seems like the point of Relatch is to restart the track when the sequence starts. After all, Relatch behaves this way when a Sequence Chain is pre-programmed.

Alternatively if we run the sequencer in "Play” mode and program in a chain like this:
S1 (length 1), S2 (length 2), S1 (length 1), etc
Then we get the expected Relatch behavior; Each Track plays only once and the sequencer progress bar always starts at the beginning.

Workaround:
Use “Perform - 1 Bar”. Relatch behaves as expected here, but it is not optimal when multitasking or for tracks/sequences with lengths of 1.5 bars etc.

1 Like

What a beautiful step-by-step and documentation to duplicate the problem. Wow!
Yes, I know this is extremely frustrating, but truly a beautiful job. Kudos!

I can totes dupe this, btw.
It happens exactly as you describe.
I’m running the latest OS, so it doesn’t seem to be something satisfied by that.

Honestly I don’t use SEQ Mode, so I had to read and re-read the manual on that bit. It would seem that the Pyramid is not acting per documentation, which would definitely be something to communicate to Squarp at squarp.net/contact

But then again, I may be misunderstanding the manual because: reasons. :wink:

hello @CreepyPants long time no see aha

Hello @Alexb !

I’m having this exact issue and it drives me mad, plus it’s for a liveset with my gf.

When I use the Seq mode for my own livesets, I just do 16 bars loops accross all track and never have issues (related to this anyway).

But here I must use Full mode because otherwise transition are hard to do. And for one specific song I have this glitch occuring, which prevent me to play the song.

did they patch it, or did you find a workaround ?

thank you so much !

I think there are (at least) a couple of things to be aware of here (which you quite possibly are already be aware of). First is that full sequence length on Pyramid is the length at which all the patterns in the sequence return back to their start points. So with the above example the full sequence length (for both S1 and S2) is 2 bars, if the 2 tracks/patterns in the example were instead 3 bars and 4 bars long the full length of the sequences would be 12 bars, and if they were 4 and 5 bars long instead, the full length of the sequences would be 20 bars. If you wanted S1’s full length to be 1 bar you would need to create a different pattern that was 1 bar in length for track 2 (which, of course, would not be the same pattern anymore, and would also require more of Pyramids project RAM to store). I guess this isn’t the sort of solution you would want (it would likely lead to needing to create more patterns and sequences).

The other thing to be aware of is what Pyramid might ‘actually’ doing in the background (I would say these are the things that enable it to do stuff like polymeters and polyrythmns). Of course, I can’t be sure what Pyramid is ‘actually’ doing in the background but I tend to think that once you press play its like Pyramid is constantly running the tracks/patterns in free run mode and with the sequence, when in perform mode, with ‘Instant’ (track mute delay and/or pattern delay) as its ‘basic’ setting(s). I would say ‘default’ settings but I don’t think ‘Instant’ is probably the default on a straight out of the box Pyramid. But I do see it as the ‘unaffected’, non delayed, and therefore 'normal/basic/‘default’ setting in that sense.

Delaying the mute/unmute and/or pattern change is a means to help you change states and still keep them in sync, or, if you like, to allow you to be a bit less precise than you’d have to be if there was only the ‘Instant’ setting available. With delay settings that are the same or less than the shortest pattern’s bar length (in that sequence) and when all patterns are in the relatch run mode I think you should get the behaviour that I think you are probably expecting. Once the delay settings are bigger than the shortest lengthed pattern you will get this apparent ‘problem’ occuring.

Anyway, the thing I want to try to get across is that when you press play on the Pyramid (at least the way I see it) this sets off all the tracks/patterns playing from their start points and they continue (in the background) independently looping according to their own length and time signature irrespective of what other settings (including the mute state, or run mode) that you have put in place and this, I think, is the basic behaviour of Pyramid. I see those other settings (like run mode or pattern/trackmute delays) as non-destructive ways to manipulate the basic behaviour (in a similar way to how Pyramid’s FX are non destructive). Personally I find this a helpful way to look at it in terms of understanding what Pyramid is doing. You may disagree on both its helpfulness and whether this is indeed ‘actually’ what is going on in the background. It sort of works for me, but that might just be me.

I suspect there isn’t a workround that you would be totally happy with. I think there are really only two ways that I can think of to get the desired behaviour that I think Alexb wanted (and I guess what you also would want). And I think Alexb had pretty much found them out. Those being, to use track mute (and pattern) delay settings that are as short as necessary (or as long as you can get away with) for your performance, or to use one of the song like Seq modes. But I guess that was not at all suitable for Alexb’s needs (and probably not yours either). Unfortunately, if you want to perform the sequence changes (live) I think you would probably have to be able to actually get to Pyramid’s controls to change the sequence somewhere near the time when you wanted it change if you were using tracks of different length within those sequences. There may be other (probably overly complex) ways to program the sorts of changes you might require in a given project by using an assortment of run modes, track lengths, pattern variations, a really good memory, some amazing foresight and planning skills, and probably more sequences than Pyramid allows for.

However, despite this, I think if you increase the length of your shorter patterns (beyond the length of mute/pattern delay(s) that you might need for your performance), you should be able to use longer delay settings and get closer to what I think you would want. It may seem rather inefficient to have an 2 bar pattern that is actually the same as a 1 bar pattern repeated (especially given the low amount of MIDI event Pyramid can store in its RAM). But if you really need to be able to cue up sequence changes in perform mode further in advance this may be what you’d need to do. I don’t think it would work in every situation, like if you needed to cue up sequences well in advance (mute/pattern delays longer than, say, 2 or 4 bars) and where you were already close to the limit of MIDI events that Pyramid could store in its RAM. But how often would you need (or want) to have more than a 1 or 2 bar delay to the sequence change? Obviously, abandoning the full sequence perform delay setting will mean you couldn’t just cue up the next sequence at anytime after the last sequence change (and then relax) but as you have found out that is not really possible the way you want with ‘full’ selected anyway, at least not unless you have all the patterns set to the same length and that if that is the length you want the sequence to play on until.

I would suggest not using the full sequence delay setting. Pick the shortest delay you feel you can manage. Ensure your shortest patterns (tracks, if your not using patterns) are longer than that delay. Alternatively, (and I wouldn’t advise this) you could consider using more sequences that are more or less duplicates of others but that contain different patterns on certain tracks that are of the requisite length so that the full sequence length is the length that you may require for a particular section of your ‘song’. This may require remembering (or predicting?) when you need to select that sequence rather than the original one and may not really be very practical. In all honesty, I think you should ditch the full setting when in perform mode.

I hope that this will be of some help. I’m no expert and It’s quite likely i have missed the point altogether. Apologies if thats the case and I hope someone on here can offer some better advice.

1 Like

thank you for your time ! it is a strange glitch because I have basically 3 set of pattern and I play them 2 or 3 times.
P1, then P2, P3, then P1 and everything is fine, but at this specific moment it goes on P2 with like 4 bars late, for some reasons.

the display glitch after P3, (so the second time I play P1)
but if I go inside the pattern while it’s playing, I can see it plays in time and nothing is wrong, only the display of SEQ mode is late.

Anyway I’m gonna check again if I don’t have somehow unused track or something that are causing that.

As you suggested, I’ll use a mode with delay and practise it to see how to make the change properly. The full mode was interesting because I can initiate the pattern change when I want, then take care of my other piece of gear that also require pattern change, and do other stuff on the mixer, or tweak synth.

Thank you so much for the detailed answer !

Sorry, I made a mistake in what I said above about Alexb’s sequence lengths. I said both S1 and S2 were 2 bars long. That was wrong. S1, in Alexb’s example, was 1 bar long and S2 was 2 bars long because T2 was muted when S1 was started and so wasn’t active and wasn’t part of S1.It seems Pyramid can recognise this shorter sequence length at the stage when S2 is selected to be the next sequence to play. S2 duly starts once S1 (and T1) completes its i bar cycle. S2 now begins to play, T2 unmutes and ‘relatches’ (latches?) as expected but now it seems Pyramid considers S2 to be half way through (as it would be if both sequences had been unmuted/active) even though T2 was inactive all the way up to the point where S2 started playing. This does seem strange.

Although T2 ‘latches’ to the point when S2 starts to play (at the end of bar 1/beginning of bar 2) it seems that S2 remains ‘latched’ to the start point of the project. This may make some sense potentially, though I am struggling to think of an example of when this might be more desireable (that is to say, whether this is possibly intentional behaviour or if it’s just a bit buggy). Maybe it needs to operate like this to allow for ‘on the fly’ muting and unmuting when Seq mode is active that behaved the same whichever Seq mode (Perform, Play or Loop) was set; Muting a track could alter the full sequence length, which may lead to some other unwanted behaviour that some people may find a bit buggy.

When you chain sequences together in Seq mode Pyramid lets you know what the full length of the selected sequence is (which is quite a nice feature). Maybe this behaviour is an unforeseen by-product of this feature, maybe it sort of just shows up in the Seq Perform options, because it’s there in Seq mode, and it wasn’t really fully flushed out as a Seq Perform mode setting. Actually, that reminds me, I did wonder if perhaps it was still a Seq Perform mode option in more recent PyraOS firmwares, because this was an old post and it’s possible the odd behaviour was reported and acted on. I will have to check on my Pyramid that has the latest (and probably last, sadly) firmware update. I presume you probably have the latest firmware running, but I shouldn’t really presume. The other presumption I’m making is that the issue you are having is essentially the same.

I wonder now if this only occurs when the full Seq Perform setting is active, or whether (as I had previously thought) it would do this with anything higher than a 1 bar Seq Perform setting (I mean that setting with Alexb’s example track lengths here). I generally leave my Seq Perform set to 1 beat and I don’t think I have ever used anything higher than 1 bar, so I’ve not come across this sort of issue.

I can’t help thinking that the key to understanding why it behaves like this has got something to do with Pyramid’s non linear nature. Pyramid never really goes beyond the longest lengthed track that is in the current project. It loops. It all loops!

I am sorry that you are having this issue but I am pleased you have posted about it. I’m intrigued and would really like to try and get to the bottom of it. I find thinking about these sorts of things helps me understand Pyramid better. I will be thinking some more about your particular example. Some more details would be good. Stuff like the lengths of those patterns and some info about any other tracks that you have in those sequences (how many, do they have patterns, what lengths are they?).

Okay, so I think I understand why this ‘problem’ occurs, and I think it is down to Pyramid’s architecture, or if you prefer, it’s non linear nature. There is, of course, some linearity in that architecture, in that each pattern/track and a (full) sequence will have a particular length and they play through in one direction, but the start point of any pattern/track or sequence only really has one position, that being the beginning of the project.

I think it is a good idea to consider what the default run mode of the patterns/tracks is when thinking about muting/unmuting tracks and switching sequences; This is the free run mode. This, I think, was the run mode Pyramid was built around. I think the other run modes are supplimentary additions that enable more functionality from the basic architecture. They are really useful and probably totally necessary additions, but still, I think they are manipulations of the original run mode. Unfortunately, they do not allow you to do all things, though there are often workarounds.

I think Squarp decided that the switching of sequences should happen right at the end of a beat, bar, sequence, etc, rather than immediately after a beat, bar, etc, or immediately after a pattern/track or sequence loops back. Which makes sense in a lot of scenarios, I think, especially when considering its use in the default run mode.

Thinking about Alexb’s issue, because the switching from S1 to S2 (right at the end of bar 1, but before S1 loops back to its beginning) means we switch to S2 at its midway point (beginning of bar 2). The relatch setting means that T2 begins at its start but at this point (at beginning of bar 2 in S2). Relatch is a track setting, and not a sequence setting and so S2 does not relatch to its beginning, it is only T2 that relatches at this point. We reach the end of this sequence (at the end of bar 2) and so switch back to S1, we immediately reach the end of the project and loop back and we make doubley sure we go to the start of T1 because its run mode is also set to relatch (I think you would see the exact same behaviour if T1 was in free run mode, the run mode for T1 does not matter here).

I imagine Alexb’s example is deliberately over simplified to demonstrate the problem and I doubt they actually wanted a workaround for that specific scenario but I am going to try my luck at suggesting one anyway. It might potentially help @Louis_srsmnt to figure out a workaround for their own specific case.

Disclaimer: I have not tested this out. I just think it should do the (rather limited) thing that Alexb put forward in his example. Which was to use the Seq Perform mode with the Full setting enabled to switch between one sequence (S1) playing from its beginning for 1 bar to a sequence (S2) that plays from its beginning for 2 bars and then switches back (to the beginning of S1).

Method: Do exactly what Alexb described, but instead extend T2 to 3 bars (the last bars content can be anything you want as I think it will not actually play unless you don’t continue to select the next sequence before it gets to the end of S2, which should now be the end of bar 3 in the project). The hypothesis is that S2 will remain in place, its beginning anchored to the project start, so when we switch from S1 to S2 (end of bar 1) T2 begins playing. but because it is relatched its start is a bar later than the start of S2. Then when we get to the end of S2 (when we switch back to S1) T2 is at the end of its second bar.