rnd31 — Opcodes aléatoires bipolaires sur 31 bit avec une distribution contrôlée.
Opcodes aléatoires bipolaires sur 31 bit avec une distribution contrôlée. Ces unités sont portables, c-à-d qu'avec la même valeur de graine on obtiendra la même séquence aléatoire sur tous les systèmes. La distribution des nombres aléatoires générés peut être changée au taux-k.
ax rnd31 kscl, krpow [, iseed]
ix rnd31 iscl, irpow [, iseed]
kx rnd31 kscl, krpow [, iseed]
ix -- valeur de sortie au taux-i.
iscl -- mise à l'échelle de la sortie. Les nombres aléatoires générés sont compris entre -iscl et iscl.
irpow -- contrôle la distribution des nombres aléatoires. Si irpow est positif, la distribution aléatoire (x compris entre -1 et 1) est abs(x)((1 / irpow) - 1) ; pour des valeurs négatives de irpow, elle vaut (1 - abs(x))((-1 / irpow) - 1). En fixant irpow à -1, 0 ou 1 on obtiendra une distribution uniforme (c'est aussi plus rapide à calculer).
iseed (facultatif, par défaut=0) -- valeur de la graine pour le générateur de nombres aléatoires (nombre entier positif compris entre 1 et 2147483646 (231 - 2)). Avec une valeur nulle ou négative la graine est prise à partir de l'horloge du système (c'est le comportement par défaut). Une graine à partir de l'horloge du système nous garantit la génération de séquences aléatoires différentes, même si plusieurs opcodes aléatoires sont appelés dans un temps très court.
Dans les versions de taux-a et de taux-k la graine est fixée à l'initialisation de l'opcode. Avec une sortie de taux-i, si la graine est nulle ou négative, elle sera prise à partir de l'horloge du système lors du premier appel, puis retournera la valeur suivante de la séquence aléatoire lors des appels successifs ; les valeurs positives de la graine sont fixées à tous les appels de taux-i. La graine est locale pour les unités de taux-a et -k, et globale pour les unités de taux-i.
Notes | |
---|---|
|
ax -- valeur de sortie au taux-a.
kx -- valeur de sortie au taux-k.
kscl -- mise à l'échelle de la sortie. Les nombres aléatoires générés sont compris entre -kscl et kscl. Semblable à iscl, mais il peut être modifié au taux-k.
krpow -- contrôle la distribution des nombres aléatoires. Semblable à irpow, mais il peut être modifié au taux-k.
Voici un exemple de l'opcode rnd31. Il utilise le fichier rnd31.csd.
Exemple 918. Exemple de l'opcode rnd31 au taux-a.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac ;;;RT audio out ; For Non-realtime ouput leave only the line below: ; -o rnd31.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ; Create random numbers at a-rate in the range -2 to 2 with a31 rnd31 2, -0.5 ; a triangular distribution, seed from the current time. afreq = a31 * 500 + 100 ; Use the random numbers to choose a frequency. a1 oscili .5, afreq ; uses sine outs a1, a1 endin </CsInstruments> <CsScore> i 1 0 1 e </CsScore> </CsoundSynthesizer>
Voici un exemple de l'opcode rnd31 au taux-k. Il utilise le fichier rnd31_krate.csd.
Exemple 919. Exemple de l'opcode rnd31 au taux-k.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -n ; no sound ; For Non-realtime ouput leave only the line below: ; -o rnd31_krate.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 k1 rnd31 1, 0, 10 ; Create random numbers at k-rate in the range -1 to 1 printks "k1=%f\\n", 0.1, k1 ; with a uniform distribution, seed=10. endin </CsInstruments> <CsScore> i 1 0 .3 e </CsScore> </CsoundSynthesizer>
Sa sortie contiendra des lignes comme celles-ci :
k1= 0.112106 k1=-0.274665 k1= 0.403933
Here is an example of the rnd31 opcode that uses the number 7 as a seed value. It uses the file rnd31_seed7.csd.
Exemple 920. An example of the rnd31 opcode that uses the number 7 as a seed value.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -n ; no sound ; For Non-realtime ouput leave only the line below: ; -o rnd31_seed7.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 i1 rnd31 1, 0.5, 7 ; i-rate random numbers with linear distribution, seed=7. i2 rnd31 1, 0.5 ; (Note that the seed was used only in the first call.) i3 rnd31 1, 0.5 print i1 print i2 print i3 endin </CsInstruments> <CsScore> i 1 0 0 e </CsScore> </CsoundSynthesizer>
Sa sortie contiendra des lignes comme celles-ci :
instr 1: i1 = -0.649 instr 1: i2 = -0.761 instr 1: i3 = 0.677
Voici un exemple de l'opcode rnd31 qui utilise l'horloge du système comme graine. Il utilise le fichier rnd31_time.csd.
Exemple 921. Eexemple de l'opcode rnd31 qui utilise l'horloge du système comme graine.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -n ; no sound ; For Non-realtime ouput leave only the line below: ; -o rnd31_time.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 i1 rnd31 1, 0.5, 0 ; i-rate random numbers with linear distribution, i2 rnd31 1, 0.5 ; seeding from the current time. (Note that the seed i3 rnd31 1, 0.5 ; was used only in the first call.) print i1 print i2 print i3 endin </CsInstruments> <CsScore> i 1 0 0 e </CsScore> </CsoundSynthesizer>
Sa sortie contiendra des lignes comme celles-ci :
instr 1: i1 = -0.691 instr 1: i2 = -0.686 instr 1: i3 = -0.358