phasorbnk — Produit un nombre arbitraire de valeurs de phase mobiles normalisées.
Produit un nombre arbitraire de valeurs de phase mobiles normalisées, accessibles par un indice.
icnt -- nombre maximum de phaseurs à utiliser.
iphs -- phase initiale, exprimée comme une fraction d'une période (0 à 1). Si elle vaut -1, l'initialisation sera ignorée. Si iphas>1 chaque phaseur sera initialisé avec une valeur aléatoire.
kndx -- valeur d'indice pour accéder aux phaseurs individuellement
Pour chaque phaseur indépendant, une phase interne est augmentée successivement selon la fréquence de kcps ou de xcps pour produire une valeur de phase mobile, normalisée pour se trouver dans l'intervalle 0 <= phs < 1. On accède à chaque phaseur individuel par l'indice kndx.
On peut utiliser ce banc de phaseurs dans une boucle de taux-k pour générer plusieurs voix indépendantes, ou en conjonction avec l'opcode adsynt pour changer les paramètres dans les tables utilisées par adsynt.
Voici un exemple de l'opcode phasorbnk. Il utilise le fichier phasorbnk.csd.
Exemple 756. Exemple de l'opcode phasorbnk.
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 No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o phasorbnk.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Generate a sinewave table. giwave ftgen 1, 0, 1024, 10, 1 ; Instrument #1 instr 1 ; Generate 10 voices. icnt = 10 ; Empty the output buffer. asum = 0 ; Reset the loop index. kindex = 0 ; This loop is executed every k-cycle. loop: ; Generate non-harmonic partials. kcps = (kindex+1)*100+30 ; Get the phase for each voice. aphas phasorbnk kcps, kindex, icnt ; Read the wave from the table. asig table aphas, giwave, 1 ; Accumulate the audio output. asum = asum + asig ; Increment the index. kindex = kindex + 1 ; Perform the loop until the index (kindex) reaches ; the counter value (icnt). if (kindex < icnt) kgoto loop out asum*3000 endin </CsInstruments> <CsScore> ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Génère plusieurs voix avec des partiels indépendants. Cet exemple est meilleur
avec adsynt. Voir aussi l'exemple de la notice
adsynt pour une utilisation
de phasorbnk au taux-k.