Jump to content

Question about expected behaviour in Song Mode


jjonas
 Share

Recommended Posts

Hi,

what is the expected behaviour in Song Mode when

  1. I've got two patterns, each has the same three tracks of different lengths (8, 16, and 32 steps), with only the notes changing so that I can tell a pattern has changed;
  2. Guide Track is disabled (set to ---);
  3. Measure (in Options) is set to 16;
  4. Pattern Change Synchronization is set to 16, but disabled;
  5. none of the tracks is synced to Measure?

Given these setting, should the Measure setting in Options affect the behaviour?

If you set Measure to 16 and hit PLAY, things work like this:

Song Pos.A1 (play 1:A1 x1):

  • G1T1 (16 steps long): Plays once;
  • G1T2 (8 steps): Plays twice;
  • G1T3 (32 steps): Plays the first half.

Switch to Song Pos.A2 (play 1:A2 x1):

  • G1T1 (16 steps): Plays once;
  • G1T2 (8 steps): Plays twice;
  • G1T3 (32 steps): Plays the second half.

This is how it will loop if you don't stop the sequencer, and it's logical enough. The question is however: what triggers the change to the next Song Position (or the next loop within the same Song Position)? In the above example Measure was set to 16. If you set it to anything below 16, no Song Position changes will trigger, instead the current Song Position will loop forever, and it's very much like in Phrase Mode (where Measure doesn't affect pattern length unless "sync to measure" is set to "yes").

If you set Measure to 32, the following will happen:

Song Pos.A1 (play 1:A1 x1)

  • G1T1 (16 steps): Plays once;
  • G1T2 (8 steps): Plays twice;
  • G1T3 (32 steps): Plays the first half.

Switch to Song Pos.A2 (play 1:A2 x1):

  • G1T1 (16 steps): Plays twice;
  • G1T2 (8 steps): Plays four times;
  • G1T3 (32 steps): Plays the second half, then loops to beginning and plays the first half.

Loop back to Song Pos.A1 (play 1:A1 x1)

  • G1T1 (16 steps): Plays twice;
  • G1T2 (8 steps): Plays four times;
  • G1T3 (32 steps): Plays the second half, then loops to beginning and plays the first half.

Switch to Song Pos.A2 (play 1:A2 x1):

  • G1T1 (16 steps): Plays twice;
  • G1T2 (8 steps): Plays four times;
  • G1T3 (32 steps): Plays the second half, then loops to beginning and plays the first half.

From here on the sequence stays the same. If you set Measure to 64, the first Song Position is still only 16 steps long, just like with Measure set to 32, while the rest behaves more predictably (but is kind of "out of sync" the same way as with Measure set to 32). The question is: why is the first Song Position played differently the first time, and only the first time? You can kind of fix this by changing Pattern Change Synchronization (PCS, Option 2/14) from 16 to 32, but it feels counter-intuitive that even with PCS set to 16, only the first Song Position is affected. PCS disabled/enabled (Option 3/14) seems to have no effect on how the Song Positions are sequenced.

Link to comment
Share on other sites

  • 1 month later...

This issue should be fixed in V4.090

The reason for this behaviour: we've a "reference step" which ranges from 1..steps per measure (Option #1)
And the song sequencer will switch to the next step once the reference step passes the "pattern change synchronisation step" (Option #2)

If the pattern change synchronisation step is higher than steps per measure, it will never be reached and therefore the song won't proceed.

Change (which is easier to express with some C code ;-)

// to handle the case as described under http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/
// seq_core_steps_per_measure was lower than seq_core_steps_per_pattern
u32 song_switch_step = (seq_core_steps_per_measure < seq_core_steps_per_pattern) ? seq_core_steps_per_measure : seq_core_steps_per_pattern;

Best Regards, Thorsten.

Link to comment
Share on other sites

  • 1 month later...

Hi,

I have to return to this topic. My setup is the following (and I'm on 4.090):

  1. Length of Measure: 8 steps
  2. All tracks 16/256 (G1T1 and G1T2 in actual use)
  3. Timebase/divider 16
  4. No track is sync'd to Measure

In phrase mode everything works as expected.

However, in song mode with Guide Track disabled and two patterns (1:A1 and 1:A2), the behaviour is like this:

Plays first 8 steps of 1:A1, then changes to 1:A2, plays last 8 steps. Repeats.

Patterns change kind of logically (they are bound to Measure, whether or not they're "Sync'd to Measure" on the divider page), but the running cursor runs track length, and doesn't reset as patterns change. If you sync G1T1 and G1T2 to Measure on the divider page, it works as expected: tracks run for 8 steps per song position, then pattern changes and the running cursor resets to the beginning of the new pattern.

The question is: is there a purpose for a song mode setting where the Guide Track is disabled and no tracks are sync'd to Measure? If yes, what should be the expected behaviour in that case? If not, should the Guide Track be the only determinant for pattern changes and running cursor resets in song mode, or should "Sync to Measure" on the divider page have some function in song mode? Guide Track overrides Measure, but when Guide Track is disabled and, as nothing is sync'd to measure by default, all hell breaks loose! ;-)

I know the default setting for a new session is Guide Track = G1T1, so in a way I'm actively looking for trouble. However, let it be revealed here that I'm trying to write a beginner's user manual to clarify the basic concepts of the MBSEQv4, so I have to do this :-)  At the moment I have a ~110k plain text file which I'm going to dump at some point over there on the documentation project forum so that hopefully some people might go through it and find some mistakes, falsehoods, even outright forgeries ;-)  Anyway, in the process of writing it I've found a few other things that I might just as well as here now that I started writing about it:

Questions:

• What good are Drum track type presets 64/64, 128/128 or 256/256? There's other drum track options that provide everything these three do, but in addition with the others you can have one extra parameter or trigger layer. (See the manual, section 'Track Event Configuration'). It seems these three named options are inferior and redundant, unless there is some benefit in having just one parameter and one trigger layer.

• Does RollG trigger do something? The user manual says "Roll and Roll2 parameter layers will be gated by this trigger", but Roll and Roll2 parameters work ok even if the RollG trigger is not assigned to any trigger layer (on the TRIGGER page).

• Roll2: What's the strange value 2x++ between 2x96 and 3x03?

• Nth: What are the first selectable operations, from --2 to --16, for the Nth parameter layer? (Apparently the ?? at the end is a place holder for a yet-to-be-added operation.)

• Is there a reason why Inc. setting is not available for Poly step recording? The user manual does state Inc "[w]orks only in Mono recording mode", so I guess it's intended.

• If AStart is 'off' and the sequencer is not running, recording will always be Step recording and will use step recording settings from the Jam page, even if Live recording is selected on the Jam page. I'm just asking if this is intended, and don't mean that it should necessarily be changed. In my opinion it makes good enough sense if this is intended. If it is, I'll just document it.

Possible bugs:

• On the EVENT page with parameter layer assignment, you can use GP knobs 11–13 to "change CC value" (there's a message on the LCD) even though you don't have a CC function selected for that layer.

• If I've selected Live recording on the Jam page, AStart is 'on' (seq stopped) and Mode is Mono, the first note will be recorded in the current cursor position, and the subsequent ones in the running cursor position. You can avoid this by making sure the cursor is in step 1 before you AStart Live recording, but in any case this would seem to be contrary to what the user manual says: "With the first played note, the sequencer will start and store the note into the first step."

The same basically happens when Mode is Poly, with the difference that one note from the recorded chord is recorded in the cursor position and the rest in the first step. However, all notes are recorded somewhere. But if the cursor is in step 1, the chord won't be recorded correctly with AStart 'on' (and seq stopped): one note in the chord will always be left unrecorded, even if there's enough note layers. It seems it's the AStart that makes the difference: a chord recorded with AStart 'on' and with cursor in step 1 loses one note somewhere, also when Rec is 'off' and you record the chord by pressing & holding a GP button and when the Edit Recording mode is toggled on with the Select button.

Requests:

• When you load sessions or presets it would be nice if they were in alphabetical order.

• It would be nice if one could delete also presets (and not just sessions) on the sequencer, instead of having to remove the SD card and do it on the computer. With quick-exported/imported tracks (MENU + COPY, MENU + PASTE) this might be more of an issue than with individually saved presets with more descriptive names.

• It would be nice if there was an option to have initialisation not switch any gates on (I always clear them anyway).

• In Song page there's the default option -:--, i.e. "play here whatever was played here in the previous song position". It would be handy if you could turn the knob left and get "M:MM" (or just "Mute", which also four letters) for "mute this group for this song position". Detailed track mute is available as an Action as well, but I think this kind of quick and brutal muting of the whole group would be useful as well, otherwise you have to set mute settings for all of the four groups even if you just want one silent for one song position.

• It would be handy to be able to copy one pattern into several pattern locations within a group with one command. I don't know how other people do it, but when I start to work on a new song, I load a "basic" session which matches my setup (MIDI channels, ports, track names etc.) and save that under a new name.

However, there's lots of variables that are likely to change from song to song, like track length, param layer types, divider etc. I change these in the first pattern for each group, and then use the import/export function to copy them to other pattern locations in each group (so that e.g. x:A1–x:B8 have the same pattern, x being the group number, customised for the new song).

Changing the variables for the first pattern in each group cannot be avoided ;-)  but copying the customised tracks/patterns to several subsequent pattern locations in the same group could be easier: if you have one customised pattern to start with, you can import/export e.g. 1:A1–1:A1 only to one target pattern, 1:A2-1:A2. The next round is copy 1:A1–1:A2 to 1:A3–1:A4. Next, 1:A1–1:A4 to 1:A5–1:A8, and finally 1:A1–1:A8 to 1:B1–1:B8. That's been enough patterns for all my songs this far. It would be useful if you could copy one "seed pattern" to as many patterns within a group as you need with one command.

• At present it doesn't seem to be possible to assign something like 'save all patterns' function to one of the F1–F4 buttons on the front panel in the HW setup file. I've tried to set F4 for that function with "BUTTON_SAVE_ALL M1 2", but it's not working. I figured this might work because a bit further down in the HW setup file there's a line where you've got "BUTTON_SAVE_ALL 0 0", but apparently this is not so?

Also, I used to have F3 assigned for tap tempo ("BUTTON_TAP_TEMPO M2 3"), I think it used to work, but at present it isn't working.

Further, assigning an F1–F4 button for direct access to the Jam page is done with "BUTTON_RECORD", but I don't know if new users will be able to figure out that this is so because in the past the Jam page used to be call the Record page. I'm not sure if this is documented somewhere (maybe in the changelog). If not, perhaps the easiest way to do it would be to make it a default assignment for the F1–F4 buttons in the Wilba frontpanel default HW file? Anyway, not all of the assignments for F1–F4 in the present Wilba frontpanel default HW file (bookmarks, param.layer select, trg.layer select, track select) are so useful, because the three latter functions already have a dedicated button on the frontpanel. How about something like:

# Following button functions are usually assigned to Fx
# buttons, or to dedicated (labeled) buttons
# In Wilba's frontpanel layout:
# F1 is located at SR M3 Pin 3; by default it is set for quick access to the Bookmark page.
# F2 is located at SR M2 Pin 2; by default it is set for quick access to the Jam page.
# F3 is located at SR M2 Pin 3; by default it is set for quick access to Tap tempo [if that can be made available]
# F4 is located at SR M1 Pin 2; by default it is set for quick access to Save all patterns [if that can be made available]
# and there are dedicated buttons for Copy/Paste/Clear/Utility/StepView

#                    SR  Pin
BUTTON_BOOKMARK      M3   3
BUTTON_RECORD           M2   2
BUTTON_TAP_TEMPO     M2   3
BUTTON_SAVE_ALL         M1   2

• At present it's possible to delay the MIDI messages sent to each port (on the BPM page). How feasible would it be to have the option of adjusting the same kind of delay for each MIDI channel? I'm thinking of MBSIDv2 drum engine, which could be used live if delay per channel was possible. Delay per port works too, if all you need is the MBSID drum engine, but then you can't use a multi-core MBSID's other cores for leads without them being delayed as well.

Link to comment
Share on other sites

Your contribution to the documentation project is very welcome, you've my full attention to sort out some details! :)

Some months ago Borfo started with a new Wiki page: http://wiki.midibox.org/doku.php?id=mididocs:index
You could either try to integrate your manual there, or start with a separate one.
In any case I will link to the manual from the uCApps page once you feel that it's ready for broader publication.

To your questions:

Quote

The question is: is there a purpose for a song mode setting where the Guide Track is disabled and no tracks are sync'd to Measure? If yes, what should be the expected behaviour in that case?

The pattern synchronisation is a very cumbersome part of the firmware, and the behavior might change based on user requests in this or the other direction.

So: the behavior without guide track isn't specified, it works "as is" ;-)

Quote

• What good are Drum track type presets 64/64, 128/128 or 256/256? There's other drum track options that provide everything these three do, but in addition with the others you can have one extra parameter or trigger layer. (See the manual, section 'Track Event Configuration'). It seems these three named options are inferior and redundant, unless there is some benefit in having just one parameter and one trigger layer.

256/256 is the only option where we have 256 individual steps in the parameter layer, which is typically velocity.
128/128 and 64/64 are redundant, but they exist due to legacy reasons. It could be, that some users have patterns which use this configuration, by removing the configuration option the menu handler wouldn't be able to show it anymore.

Quote

 Does RollG trigger do something? The user manual says "Roll and Roll2 parameter layers will be gated by this trigger", but Roll and Roll2 parameters work ok even if the RollG trigger is not assigned to any trigger layer (on the TRIGGER page).

If RollG is not assigned to a trigger layer, it's always 1
The same "trick" is used when the Gate trigger is not assigned to a layer.

Quote

 Roll2: What's the strange value 2x++ between 2x96 and 3x03?

It means >96. Since each step has 96 ticks, values >96 won't lead to an effect and therefore displayed as "++"

Quote

Nth: What are the first selectable operations, from --2 to --16, for the Nth parameter layer? (Apparently the ?? at the end is a place holder for a yet-to-be-added operation.)

"--" means that there is no effect at all.
Due to the way how parameters are stored in the parameter layer, I had to handle the first 16 values as dummy entries.

Quote

Is there a reason why Inc. setting is not available for Poly step recording? The user manual does state Inc "[w]orks only in Mono recording mode", so I guess it's intended.

Inc increments the step with each played note.
Since in poly mode multiple notes have to be entered into a single step, the Inc option is disabled in this case.

Quote

 If AStart is 'off' and the sequencer is not running, recording will always be Step recording and will use step recording settings from the Jam page, even if Live recording is selected on the Jam page. I'm just asking if this is intended, and don't mean that it should necessarily be changed. In my opinion it makes good enough sense if this is intended. If it is, I'll just document it

Yes, this is intended:

/////////////////////////////////////////////////////////////////////////////
// Called from SEQ_MIDI_IN_Receive() if MIDI event has been received on
// matching IN port and channel
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_RECORD_Receive(mios32_midi_package_t midi_package, u8 track)
{
  // step recording mode?
  // Note: if sequencer is not running, "Live Recording" will be handled like "Step Recording"
  u8 step_record_mode = seq_record_options.STEP_RECORD || !SEQ_BPM_IsRunning();

(as you can see, some answers are in the source code ;-)

Quote

Possible bugs:
...
Requests:

added to the wishlist for V4:

----------------------------------------------------------
Track Event page: CC message for GP ENC 11-13 only if CC is visible
http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653
----------------------------------------------------------
AStart: ensure that recording is started with first step
http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653
----------------------------------------------------------
Allow to delete presets
http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653
----------------------------------------------------------
Add option which avoids that each 4th gate will be turned on in the initialisation pattern.
http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653
----------------------------------------------------------
Song Page: add "Mute Pattern" (all 4 tracks) command
http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653
----------------------------------------------------------
Add command which copies the current pattern configurations into multiple pattern slots (e.g. current patterns -> A1/A2/A3/...)
http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653
----------------------------------------------------------
Check behaviour of "BUTTON_SAVE_ALL" and "BUTTON_TAP_TEMPO" - they are implemented, but it seems that they aren't working?
http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653
----------------------------------------------------------
Integrate revised F1..F4 assignments into mbseq_hw.v4 files:

# Following button functions are usually assigned to Fx
# buttons, or to dedicated (labeled) buttons
# In Wilba's frontpanel layout:
# F1 is located at SR M3 Pin 3; by default it is set for quick access to the Bookmark page.
# F2 is located at SR M2 Pin 2; by default it is set for quick access to the Jam page.
# F3 is located at SR M2 Pin 3; by default it is set for quick access to Tap tempo [if that can be made available]
# F4 is located at SR M1 Pin 2; by default it is set for quick access to Save all patterns [if that can be made available]
# and there are dedicated buttons for Copy/Paste/Clear/Utility/StepView

#                    SR  Pin
BUTTON_BOOKMARK      M3   3
BUTTON_RECORD        M2   2
BUTTON_TAP_TEMPO     M2   3
BUTTON_SAVE_ALL      M1   2

http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653
----------------------------------------------------------

 

Added to wish list for V4 Plus (since much more memory will be consumed, too much for the old cores, feasible with the MBHP_CORE_STM32F4):

- allocate some memory to sort the directory view instead of loading directly from SD Card
http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653


- allow to define delays based on ports & channels instead of only the port.
http://midibox.org/forums/topic/19774-question-about-expected-behaviour-in-song-mode/#comment-173653

Best Regards, Thorsten.

Link to comment
Share on other sites

17 hours ago, TK. said:

If RollG is not assigned to a trigger layer, it's always 1
The same "trick" is used when the Gate trigger is not assigned to a layer.

Can you explain further what is the advantage of assigning RollG to a trigger layer, rather than leaving it unassigned?

I'll start a separate question thread on the details of some of the other functions on the documentation project forum later this week.

 

17 hours ago, TK. said:

 

added to the wishlist for V4: [...]

Added to wish list for V4 Plus (since much more memory will be consumed, too much for the old cores, feasible with the MBHP_CORE_STM32F4): [...]

Thanks for these!

Link to comment
Share on other sites

Quote

Can you explain further what is the advantage of assigning RollG to a trigger layer, rather than leaving it unassigned?

The use case is explained here: 

So, with RollG the rolls defined in the parameter layer can be interactively bypassed in the trigger layer.

One of those typical features, which make sense for the requestor, which are quickly implemented, but result into confusion for other users if I don't spent the time to document it properly (and the documentation would take more time than the actual implementation).
Good that you help out! :)

 

Some of the "low hanging fruits" are implemented now in: http://www.ucapps.de/mios32/midibox_seq_v4_091_pre2.zip

See following diff for the wish list items that are solved: http://svnmios.midibox.org/comp.php?repname=svn.mios32&compare%5B%5D=%2Ftrunk%2Fapps%2Fsequencers%2Fmidibox_seq_v4%2FCHANGELOG.txt%402294&compare%5B%5D=%2Ftrunk%2Fapps%2Fsequencers%2Fmidibox_seq_v4%2FCHANGELOG.txt%402292

Note that I wasn't able to reproduce the BUTTON_TAP_TEMPO and BUTTON_SAVE_ALL issue.
F3 and F4 are working at my side - I get a message on the right LCD whenever these buttons are pushed.

Best Regards, Thorsten.

Link to comment
Share on other sites

17 hours ago, TK. said:
17 hours ago, TK. said:

The use case is explained here: 

So, with RollG the rolls defined in the parameter layer can be interactively bypassed in the trigger layer.


If I got this right, it works like this:

The "normal" case is that you just have a Gate trigger layer A, where you put your drums (or whatever). If you have a Roll parameter layer, just use the knobs to enter a roll value in every step where you want a roll, and the seq will play a roll wherever there is a non-zero value in the Roll parameter layer (and where the normal trig.layer A gate is on). You don't need to assign the RollG trigger to any trg.layer.

The "special case" where the RollG trigger comes in is that you use the ALL button to enter a Roll value for every step in the Roll parameter layer with one knob turn (or use the randomizer or whatever), then set trigger layer B to RollG, and then use trigger layer B to determine which steps actually trigger the Roll parameter layer value in the steps where trg.layer A gate is on.

Is this correct?

BTW I noticed while trying this out on the seq that when you have a drum track and press trig.layer button C to select a drum instrument layer, after selection you cannot view the parameter layer for the newly selected instrument layer by pressing param.layer button A. It doesn't matter if you select the same layer that you are on, or a another one. What you have to do is turn a knob first to change a parameter, and the display will show the the parameter layer. Then wait that the display flashes back to show the trigger layer, and now you can check the parameter layer by pressing param.layer button A.

 

Quote

Note that I wasn't able to reproduce the BUTTON_TAP_TEMPO and BUTTON_SAVE_ALL issue.

F3 and F4 are working at my side - I get a message on the right LCD whenever these buttons are pushed.

I haven't had time yet to check the newest prerelease version, but I'll just say here briefly that I got the F1–F4 buttons working now too. I realised that having the default entry, "BUTTON_SAVE_ALL 0 0", after defining "BUTTON_SAVE_ALL M2 3" probably first set the function correctly, but then the second entry disabled it again. I commented out "BUTTON_SAVE_ALL 0 0" and "BUTTON_TAP_TEMPO 0 0", and now they're working.

Edited by jjonas
Link to comment
Share on other sites

Quote

Is this correct?

yes, I assume that this is what duncandisorderly wanted to achieve.

Quote

BTW I noticed while trying this out on the seq that when you have a drum track and press trig.layer button C to select a drum instrument layer, after selection you cannot view the parameter layer for the newly selected instrument layer by pressing param.layer button A. It doesn't matter if you select the same layer that you are on, or a another one. What you have to do is turn a knob first to change a parameter, and the display will show the the parameter layer. Then wait that the display flashes back to show the trigger layer, and now you can check the parameter layer by pressing param.layer button A.

ok, I'm able to reproduce this.

Added to wish list that this has to be checked.

Quote

I commented out "BUTTON_SAVE_ALL 0 0" and "BUTTON_TAP_TEMPO 0 0", and now they're working.

Alright, this was the reason.

Unfortunately it would cost some extra RAM to notify an overwritten button value. But I guess that this configuration error can only happen in rare cases...

Best Regards, Thorsten.

Link to comment
Share on other sites

Hi,

I've now tried out 091pre3. CC-parameter and the initialisation gate option work, but there's a problem with AStart and forwarding.

Jam page settings: Live recording, Mono, AStart 'on', Fwd 'off'. The first note is recorded in the first step regardless of present cursor position (as it should be), but it gets forwarded even though Fwd is 'off'; the note forwarded this way is very short, regardless of how long you press a key (however, the note length is recorded correctly). If Fwd is 'on', it sounds like the same note is triggered twice at the same time.

In Poly mode it's the same, with the difference that no matter how many notes the recorded chord has, only one note will get forwarded (even though Fwd is 'off').

Also, this problem remains in Poly mode: "if the cursor is in step 1 [or now moved there by AStart], the chord won't be recorded correctly with AStart 'on' (and seq stopped): one note in the chord will always be left unrecorded, even if there's enough note layers."

Edited by jjonas
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...