lfsr
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

## lfsr

lfsr — Registre à décalage avec rétroaction linéaire (LFSR).

## Description

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.

## Syntaxe

    knum lfsr ilen, iprob [, iseed]

## Initialisation

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...).

## Exécution

knum -- entier en sortie.

## Exemples

Voici un exemple de l'opcode lfsr. Il utilise le fichier lfsr.csd.

Exemple 492. 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>

## Crédits

Par : Dave Seidel 2020

Basé sur du code de Patrick Dowling dans le firmware Ornament & Crime.

Nouveau dans la version 6.16

Précédent | Niveau supérieur | Suivant
lfo | Sommaire | limit