lfsr — Registre à décalage avec rétroaction linéaire (LFSR).
Produit une série de nombres entiers positifs pseudo-aléatoires. C'est la technique utilisée dans les modules de synthèses dénommés "machines de Turing" et elle sert habituellement à générer des suites mélodiques. Cette implantation est adaptée du firmware du module Ornament & Crime tel qu'utilisé dans les applications Quantermain et Meta-Q.
ilen -- longueur du registre à décalage, les valeurs autorisées sont 1-31 (inclusivement). Plus le registre est grand et plus grands sont les nombres entiers générés. On peut utiliser ce paramètre pour restraindre la sortie à un intervalle désiré.
iprob -- probabilité, les valeurs autorisées sont 1-255 (inclusivement). Contrôle l'étalement de la sortie ; plus les valeurs sont grandes et plus l'étalement des valeurs de sortie est grand.
iseed (facultatif, -1 par défaut) -- état initial du registre à décalage, sous la forme d'un motif binaire. La valeur est traîtée comme un entier non signé si bien que la valeur par défaut -1 correspond effectivement à tous les bit positionnés (0b11111111...).
Voici un exemple de l'opcode lfsr. Il utilise le fichier lfsr.csd.
Exemple 501. Exemple de l'opcode lfsr.
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> -W -o lfsr.wav </CsOptions> <CsInstruments> sr = 44100 ksmps = 1 nchnls = 2 0dbfs = 1.0 ; triangle wave gitabsz init 2^13 giTri ftgen 1, 0, gitabsz, 7, 0, gitabsz/4, 1, gitabsz/2, -1, gitabsz/4, 0 ; Grady Centaur scale giCent = ftgen(100, 0, 128, -51, 12, 2, 297.989, 60, 1.0, 21/20, 9/8, 7/6, 5/4, 4/3, 7/5, 3/2, 14/9, 5/3, 7/4, 15/8, 2.0) ; just print the values instr 1 kn = lfsr(5, 128) printk2(kn) endin ; play a melodic sequence instr 2 idur = p3 iamp = p4 iwav = p5 itun = p6 ; keep range small and transpose up 2 octaves to ensure audibility ; we're interpreting these number like MIDI notes numbers for easy table lookups kidx = lfsr(5, 128) + 24 ktrig = metro(1) schedkwhen(ktrig, 0, 1, 3, 0, 1, iamp, iwav, itun, kidx) endin instr 3 idur = p3 iamp = ampdb(p4) iwav = p5 itun = p6 inote = p7 kenv = linen(iamp, 0.1, idur, 0.1) aout = poscil3(kenv, tablekt(inote, itun), iwav) outs(aout, aout) endin </CsInstruments> <CsScore> i 1 0 0.25 i 2 0 10 -6 1 100 e </CsScore> </CsoundSynthesizer>