Skip to content

seq_position

Sequence position. The region will play if the internal sequence counter is equal to seq_position.

This is used together with seq_length to use samples as round robins. The player will keep an internal counter creating a consecutive note-on sequence for each region, starting at 1 and resetting at seq_length. Maximum allowed value is 100.

Example #

seq_length=4 seq_position=2

In above example, the region will play on the second note every four notes.

A typical usage for a kick drum with four round robins, and a snare with three round robins, would look like this:

<group>key=36 seq_length=4
<region>seq_position=1 sample=kick_rr1.wav
<region>seq_position=2 sample=kick_rr2.wav
<region>seq_position=3 sample=kick_rr3.wav
<region>seq_position=4 sample=kick_rr4.wav

<group>key=38 seq_length=3
<region>seq_position=1 sample=snare_rr1.wav
<region>seq_position=2 sample=snare_rr2.wav
<region>seq_position=3 sample=snare_rr3.wav

An alternative to this is using lorand / hirand for random, instead of sequential, round robins. If there are enough samples available, both methods can also be combined - the combination is described on the lorand / hirand page. However, lorand/hirand might not be a good idea to use with samples which have multiple microphone positions, and sticking to seq_position and seq_length might be necessary.

Practical Considerations #

In at least some SFZ players, sequence position is not tracked together for all regions, which means seq_position is not a practical way to implement alternating left/right hand or up/down bowing samples.

Some players also match velocity ranges for each step in the sequence, which can cause problems when the sequence steps do not have the same velocity layer split points. For example, this can produce occasional silence, depending on the velocity of incoming MIDI notes, the velocity of the previous MIDI note, and the current point in the sequence:

<global>
seq_length=2
key=48

<group> seq_position=1
<region> lovel=1 hivel=31 sample=*noise
<region> lovel=32 hivel=127 sample=*saw

<group> seq_position=2
<region> lovel=1 hivel=95 sample=*noise
<region> lovel=96 hivel=127 sample=*saw

This will also happen in cases where, for example, one step in the sequence has three velocity layers and the other step has four, as it’s not possible to make the layer split points match then.

In those players, this is a workaround:

<global>
seq_length=2
key=48

<group> seq_position=1
<region> lovel=1 hivel=31 sample=*noise
<region> lovel=32 hivel=95 sample=*saw
<region> lovel=96 hivel=127 sample=*saw

<group> seq_position=2
<region> lovel=1 hivel=31 sample=*noise
<region> lovel=32 hivel=95 sample=*noise
<region> lovel=96 hivel=127 sample=*saw

Setting seq_position to 0 will cause the region to not play in most sfz player, except for sfizz where it will behave the same as setting seq_position to 1.

Name Version Type Default Range Unit
seq_position SFZ v1 integer 1 1 to 100

Category: Region Logic, Internal Conditions