cuserrnd — Générateur de nombres aléatoires de distribution continue définie par l'utilisateur.
aout cuserrnd kmin, kmax, ktableNum
iout cuserrnd imin, imax, itableNum
kout cuserrnd kmin, kmax, ktableNum
imin -- limite inférieure de l'intervalle
imax -- limite supérieure de l'intervalle
itableNum -- numéro d'une table contenant la fonction de la distribution aléatoire. Cette table est générée par l'utilisateur. Voir GEN40, GEN41 et GEN42. La longueur de la table peut être différente d'une puissance de 2.
ktableNum -- numéro d'une table contenant la fonction de la distribution aléatoire. Cette table est générée par l'utilisateur. Voir GEN40, GEN41 et GEN42. La longueur de la table peut être différente d'une puissance de 2.
kmin -- limite inférieure de l'intervalle
kmax -- limite supérieure de l'intervalle
cuserrnd (Continuous USER-defined-distribution RaNDom generator) génère des nombres aléatoires selon une distribution aléatoire continue créée par l'utilisateur. Dans ce cas la forme de l'histogramme de la distribution peut être dessinée ou générée par n'importe quelle routine GEN. La table contenant la forme d'un tel histogramme doit être transformée ensuite en une fonction de distribution au moyen de GEN40 (voir GEN40 pour plus de détails). Cette fonction doit ensuite être allouée à l'argument XtableNum de cuserrnd. L'intervalle de sortie sera ensuite mis à l'échelle selon les arguments Xmin et Xmax. cuserrnd faisant une interpolation linéaire entre les éléments de la table, il n'est pas recommandé pour les distributions discrètes (GEN41 et GEN42).
Pour un tutoriel sur les histogrammes et les fonctions de distribution aléatoires consulter :
D. Lorrain. "A panoply of stochastic cannons". In C. Roads, ed. 1989. Music machine. Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Voici un exemple de l'opcode cuserrnd. Il utilise le fichier cuserrnd.csd.
Exemple 201. Exemple de l'opcode cuserrnd.
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 -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o cuserrnd.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ; every run time same values kuser cuserrnd 0, 100, 1 printk .2, kuser asig poscil .5, 220+kuser, 3 outs asig, asig endin instr 2 ; every run time different values seed 0 kuser cuserrnd 0, 100, 1 printk .2, kuser asig poscil .5, 220+kuser, 3 outs asig, asig endin </CsInstruments> <CsScore> f 1 0 16 -7 1 4 0 8 0 4 1 ;distrubution using GEN07 f 2 0 16384 40 1 ;GEN40 is to be used with cuserrnd f 3 0 8192 10 1 ;sine i 1 0 2 i 2 3 2 e </CsScore> </CsoundSynthesizer>
Sa sortie contiendra des lignes comme celles-ci :
i 1 time 0.00067: 53.14918 i 1 time 0.20067: 0.00000 i 1 time 0.40067: 0.00000 i 1 time 0.60067: 96.80406 i 1 time 0.80067: 94.20729 i 1 time 1.00000: 0.00000 i 1 time 1.20067: 86.13032 i 1 time 1.40067: 31.37096 i 1 time 1.60067: 70.35889 i 1 time 1.80000: 0.00000 i 1 time 2.00000: 49.18914 WARNING: Seeding from current time 2006647442 i 2 time 3.00067: 21.45002 i 2 time 3.20067: 44.32333 i 2 time 3.40067: 46.05420 i 2 time 3.60000: 0.00000 i 2 time 3.80067: 41.32175 i 2 time 4.00000: 0.00000 i 2 time 4.20000: 63.72019 i 2 time 4.40067: 0.00000 i 2 time 4.60067: 0.00000 i 2 time 4.80067: 0.00000 i 2 time 5.00000: 74.49330