# lorand / hirand

The region will play if the random number is equal to or higher than `lorand`, and lower than `hirand`.

Random values. The player will generate a new random number on every note-on event, in the range 0 to 1.

## Examples #

``````lorand=0.2 hirand=0.4

lorand=0.4 hirand=1
``````

The most common application for this is randomized round robins. Note that `hirand` for a region should equal `lorand` for the next region - if we had, for example, `hirand`=0.249 for the first region and `lorand`=0.25 for the next, that would result in no sound playing if the random number generated was, for example, 0.2496343491. So, an 0.001 chance of no sound at all - a difficult problem to spot when testing.

``````<region> hirand=0.25 sample=kick_vl1_rr1.wav
<region> lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav
<region> lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav
<region> lorand=0.75 sample=kick_vl1_rr4.wav
``````

It is also possible to combine this with the seq_length and seq_position opcodes to split round robins into two subsets, and randomize within each subset. This results in randomization, but prevents the possibility of the same sample being triggered twice in a row when the random number generated falls into the same range as the previously generated number. This can be good when there are a lot (6 or more) round robin samples available. The code for 8 samples split into two sequential subsets might look like this:

``````<region> seq_length=2 seq_position=1 hirand=0.25 sample=kick_vl1_rr1.wav
<region> seq_length=2 seq_position=1 lorand=0.25 hirand=0.5 sample=kick_vl1_rr2.wav
<region> seq_length=2 seq_position=1 lorand=0.5 hirand=0.75 sample=kick_vl1_rr3.wav
<region> seq_length=2 seq_position=1 lorand=0.75 sample=kick_vl1_rr4.wav
<region> seq_length=2 seq_position=2 hirand=0.25 sample=kick_vl1_rr5.wav
<region> seq_length=2 seq_position=2 lorand=0.25 hirand=0.5 sample=kick_vl1_rr6.wav
<region> seq_length=2 seq_position=2 lorand=0.5 hirand=0.75 sample=kick_vl1_rr7.wav
<region> seq_length=2 seq_position=2 lorand=0.75 sample=kick_vl1_rr8.wav
``````

## Practical Considerations #

In the ARIA implementation of SFZ, sequence position is not tracked together for all regions, which means the above is not a practical way to implement alternating left/right hand or up/down bowing samples.

Also in ARIA, a separate random number is generated for each region which is playing, which means lorand/hirand probably should not be used with samples which have multiple mic positions. Using it can result in triggering spot, overhead and room mics which do not match, and that can result in phasing issues etc.

There are other potential uses which have nothing to do with round robins, for example having key fingering noises on a clarinet trigger sometimes (but not always) when a note is played.

Name Version Type Default Range Unit
lorand SFZ v1 float 0 0 to 1

Category: Region Logic, Internal Conditions