svfilter

svfilter — Un filtre à résonance du second ordre, avec sortie passe-bas, passe-haut et passe-bande simultanées.

Description

Implémentation d'un filtre à résonance du second ordre, avec sortie passe-bas, passe-haut et passe-bande simultanées.

Syntaxe

alow, ahigh, aband svfilter  asig, kcf, kq [, iscl][, iskip]

Initialisation

iscl -- facteur de pondération codé semblable à celui de reson. Une valeur différente de zéro signifie que la crête du facteur de réponse est 1, c-à-d. toutes les fréquences autres que kcf sont atténuées selon la courbe de réponse (normalisée). Une valeur de zéro signifie aucune pondération du signal, laissant cette tâche à un ajustement ultérieur (voir balance). La valeur par défaut est 0.

iskip (facultatif, 0 par défaut) -- disposition initiale de l'espace de données internes. Comme le filtrage comprend une boucle de rétroaction, l'état initial de l'espace de stockage est significatif. La valeur zéro efface l'espace ; une valeur non nulle maintient l'information antérieure. La valeur par défaut est 0.

Exécution

svfilter est un filtre à variable d'état du second ordre, avec contrôle au taux-k de la fréquence de coupure et de Q. Lorsque Q augmente, un pic de résonance se forme autour de la fréquence de coupure. svfilter a des sorties passe-bas, passe-haut et passe-bande simultanées ; en mélangeant les sorties, on peut générer des réponses en fréquence variées. Le filtre à variable d'état, ou filtre "multimodal", se rencontrait fréquemment dans les premiers synthétiseurs analogiques, en raison de la grande variété de sonorités produites par l'interaction entre la fréquence de coupure, la résonance et les rapports de mélange en sortie. svfilter est bien adapté à la simulation de sonorités "analogiques", ainsi que pour d'autres applications nécessitant des filtres à résonance.

asig -- signal d'entrée à filtrer.

kcf -- fréquence de coupure ou de résonance du filtre, mesurée en Hz.

kq -- Q du filtre, défini (pour les filtres passe-bande) comme le rapport (largeur de bande)/(fréquence de coupure). kq doit être compris entre 1 et 500. Lorsque kq augmente, la résonance du filtre augmente, ce qui correspond à une augmentation de la magnitude et de la "raideur" du pic de résonance. Si l'on utilise svfilter sans pondération du signal (iscl absent ou nul), le volume du pic de résonance augmente en même temps que Q. Pour de grandes valeurs de Q, il est recommandé de donner à iscl une valeur différente de zéro, ou bien d'utiliser une fonction de mise à l'échelle externe telle que balance.

svfilter est basé sur un algorithme du livre de Hal Chamberlin, Musical Applications of Microprocessors (Hayden Books, 1985).

Exemples

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

Exemple 920. Exemple de l'opcode svfilter.

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

; Orchestra file for resonant filter sweep of a sawtooth-like waveform. 
; The seperate outputs of the filter are scaled by values from the score,
; and are mixed together.
sr = 44100
kr = 2205
ksmps = 20
nchnls = 1
  
instr 1
  
  idur     = p3
  ifreq    = p4
  iamp     = p5
  ilowamp  = p6              ; determines amount of lowpass output in signal
  ihighamp = p7              ; determines amount of highpass output in signal
  ibandamp = p8              ; determines amount of bandpass output in signal
  iq       = p9              ; value of q
  
  iharms   =        (sr*.4) / ifreq
  
  asig    gbuzz 1, ifreq, iharms, 1, .9, 1             ; Sawtooth-like waveform
  kfreq   linseg 1, idur * 0.5, 4000, idur * 0.5, 1     ; Envelope to control filter cutoff
  
  alow, ahigh, aband   svfilter asig, kfreq, iq
  
  aout1   =         alow * ilowamp
  aout2   =         ahigh * ihighamp
  aout3   =         aband * ibandamp
  asum    =         aout1 + aout2 + aout3
  kenv    linseg 0, .1, iamp, idur -.2, iamp, .1, 0     ; Simple amplitude envelope
          out asum * kenv
  
endin


</CsInstruments>
<CsScore>

f1 0 8192 9 1 1 .25
  
i1  0 5 100 1000 1 0 0  5  ; lowpass sweep
i1  5 5 200 1000 1 0 0 30  ; lowpass sweep, octave higher, higher q
i1 10 5 100 1000 0 1 0  5  ; highpass sweep
i1 15 5 200 1000 0 1 0 30  ; highpass sweep, octave higher, higher q
i1 20 5 100 1000 0 0 1  5  ; bandpass sweep
i1 25 5 200 1000 0 0 1 30  ; bandpass sweep, octave higher, higher q
i1 30 5 200 2000 .4 .6  0  ; notch sweep - notch formed by combining highpass and lowpass outputs
e


</CsScore>
</CsoundSynthesizer>


Crédits

Auteur : Sean Costello
Seattle, Washington
1999

Nouveau dans la version 3.55 de Csound.