bob

bob — Simulation numérique de Runge-Kutte du filtre analogique résonant de Moog.

Description

bob est un portage du bob~ de Miller Puckette dans Pure Data. Sa conception est basée sur les articles de Tim Stilson, Timothy E. Stinchcombe et Antti Huovilainen.

Syntaxe

asig bob ain, xcf, xres, xsat [, iosamps, istor]

Initialisation

iosamps -- nombre de fois que le suréchantillonnage est utilisé dans le processus de filtrage. Cela détermine la raideur maximale de la résonance du filtre (Q). Plus de suréchantillonnage autorise des Q plus importants, moins de suréchantillonnage limite la résonance. La valeur par défaut est 2 fois (iosamps=0).

istor -- disposition initiale de l'espace interne des données. Comme le filtrage comprend une boucle de rétroaction de la sortie, l'état initial de l'espace de stockage est significatif. Une valeur nulle efface le contenu de cet espace ; une valeur non nulle permet de garder l'information précédente. La valeur par défaut est 0.

Exécution

asig -- signal d'entrée.

xcf -- fréquence de coupure du filtre.

xres -- résonance du filtre. Nominalement, une valeur de 4 est la limite de stabilité -- au-delà, le filtre oscille.

xsat -- saturation. Ce paramètre détermine à quel niveau du signal les "transistors" du modèle saturent. L'amplitude maximale de sortie vaut environ 2/3 de cette valeur.

Selon la page de manuel de bob~, "Par défaut bob~ effectue un pas de l'intégration de Runge-Kutte du 4ème ordre par échantillon audio. Ceci fonctionne parfaitement pour des fréquences de résonance/coupure jusqu'à environ 1/2 Nyquist. Pour améliorer la précision et/ou augmenter l'étendue du filtre vers des fréquences de coupure plus hautes on peut suréchantillonner par n'importe quel facteur - mais il faut noter que le temps de calcul augmente en conséquence. Aux fréquences de coupure/résonances élevées, l'approximation RK peut devenir instable. On peut contrer cela en élevant le facteur de suréchantillonnage. Le paramètre de saturation détermine à quel niveau du signal les "transistors" du modèle saturent. L'amplitude maximale de sortie vaut environ 2/3 de cette valeur."

Exemples

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

Exemple 105. Exemple de l'opcode bob.

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 bob.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

ga1 init 0
ga2 init 0

    seed 777

instr 7
a0  vco2     1, cpsmidinn(p4) ; a saw wave to be filtered
k1  jspline  0.7, 0.7, 1/0.7; add some jitter to filter resonance
kA  linseg   0,        p3/17, 1,     (17-2)*p3/17, 1,   p3/17, 0; overal amplitude envelope
k7  linseg   70,       p3/3,  700,   p3/3,     700,     p3/3,  70; filter cutoff envelope
k77 expseg   sqrt(7),  p3/2,  7.7,   p3/2,     sqrt(7); filter resonance modulation
a1  bob      a0 * kA, k7 - k1 * 70, k77 + k1, 3; PD bob~ ported
a1           /= 7; some normalization to avoid overload
aL           = p5 * a1; and then panning
aR           = a1 * (1 - p5)
    outs     aL, aR

ga1          +=  aL/7; AUX send
ga2          +=  aR/7
endin

instr 77 ; What a sound without some good reverb??
a1,a2  reverbsc ga1,ga2, 0.97+.1/7, 7777
    outs     a1, a2
ga1          = 0
ga2          = 0
endin
</CsInstruments>
<CsScore>
i 7  0 30 70 0.7; Perfect 7th
i 7  0 30 77 0.7
i 77 0 40
; In text editor try Find and Replace to substitute all 7 numbers for 3...8 )
; all 8s is a bit too high, all 3s is a bit too low, 4 sounds great!
; Do such replacement in initial 7 file, otherwise avoid accidental changes in the header...

; Tired of numerology? Try this:
; i 7  0 30 60 0.6
; i 7  0 32 45 0.4

e
</CsScore>
</CsoundSynthesizer>


Voir aussi

moogladder

Crédits

Par : Gleb Rogozinsky 2020

Nouveau dans la version 6.15