bob — Simulation numérique de Runge-Kutte du filtre analogique résonant de Moog.
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.
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.
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."
Voici un exemple de l'opcode bob. Il utilise le fichier bob.csd.
Exemple 106. 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>