rbjeq

rbjeq — Opcode de filtrage et d'égalisation paramétrique avec 7 types de filtre, basé sur un algorithme de Robert Bristow-Johnson.

Description

Opcode de filtrage et d'égalisation paramétrique avec 7 types de filtre, basé sur un algorithme de Robert Bristow-Johnson.

Syntaxe

ar rbjeq asig, kfco, klvl, kQ, kS[, imode]

Initialisation

imode ( (facultatif, 0 par défaut) - somme de :

  • 1 : l'initialisation est ignorée (à n'utiliser qu'avec des notes liées ou réinitialisées)

et exactement une seule des valeurs suivantes pour sélectionner le type de filtre :

  • 0 : filtre passe-bas résonant. kQ contrôle la résonance : à la fréquence de coupure (kfco), le gain en amplitude est kQ (par exemple 20 dB pour kQ = 10), les valeurs supérieures de kQ produisant un pic de résonance plus étroit. Si kQ vaut racine carrée de 0.5 (environ 0.7071), il n'y a pas de résonance et le filtre a une réponse ressemblant beaucoup à celle de butterlp. Si kQ est inférieur à racine carrée de 0.5, il n'y a pas de résonance et le filtre a une réponse de -6 dB / octave approximativement de kfco * kQ à kfco. Au-delà de kfco, l'atténuation est toujours de -12 dB / octave.

    [Note] NOTE

    Le filtre passe-bas rbjeq se comporte sensiblement comme "ar pareq asig, kfco, 0, kQ, 2" mais il est calculé plus rapidement.

  • 2 : filtre passe-haut résonant. Les paramètres sont les mêmes que pour le filtre passe-bas, mais le filtre équivalent est butterhp si kQ vaut 0.7071, et "ar pareq asig, kfco, 0, kQ, 1" dans les autres cas.

  • 4 : filtre passe-bande. kQ contrôle la largeur de bande qui vaut kfco / kQ, et doit toujours être inférieur à sr / 2. La largeur de bande est mesurée entre les points à -3 dB (gain en amplitude = 0.7071), au-delà desquels la pente est de +/- 6 dB / octave. Ce type de filtre ressemble beaucoup à "ar butterbp asig, kfco, kfco / kQ".

  • 6 : filtre réjecteur de bande avec les mêmes paramètres que le filtre passe-bande et une réponse semblable à celle de butterbr.

  • 8 : EQ peak. Le gain en amplitude vaut 1 (0 dB) à 0 Hz et à sr / 2, et klvl à la fréquence centrale (kfco). Ainsi, klvl contrôle le renforcement (s'il est supérieur à 1) ou l'atténuation (s'il est inférieur à 1). klvl à 1 produit une réponse plate. Comme pour les filtres passe-bande et réjecteur de bande, la largeur de bande est déterminées par kfco / kQ (qui doit être encore inférieur à sr / 2) ; cependant, elle se trouve cette fois-ci entre les points situés à racine carrée de klvl (autrement dit à mi-renforcement ou mi-atténuation en décibels). NOTE : il faut éviter les valeurs de klvl excessivement faibles ou élévées, encore que l'opcode ait été testé avec klvl = 0.01 et klvl = 100. klvl = 0 est toujours une erreur, contrairement au cas de pareq qui accepte un niveau de zéro.

  • 10 : EQ low shelf, contrôlé par klvl et kS (kQ est ignoré par ce type de filtre). Le gain en amplitude est de klvl à la fréquence zéro tandis que le niveau des hautes fréquences (proches de sr / 2) n'est pas changé. A la fréquence de coupure (kfco), le gain est de racine carrée de klvl (mi-renforecemnt ou mi-atténuation en décibels). Le paramètre kS contrôle la raideur de la pente de la réponse en fréquence (voir ci-dessous).

  • 12 : EQ high shelf. Très semblable à l'EQ low shelf, mais il affecte la région des hautes fréquendes.

La valeur par défaut de imode est zéro (filtre passe-bas, initialisation réalisée).

Exécution

ar -- le signal de sortie.

asig -- le signal d'entrée.

[Note] NOTE

Si l'entrée contient des sections silencieuses, il peut y avoir un ralentissement significatif sur les processeurs Intel du aux nombres dénormalisés. Dans de tels cas, il est recommandé de traiter le signal d'entrée avec l'opcode denorm avant le filtrage par rbjeq (et actuellement avec plusieurs autres filtres).

kfco -- fréquence de coupure ou fréquence centrale, selon le type de filtre, en Hz. Doit être supérieure à zéro et inférieure à sr / 2 (l'intervalle compris entre sr * 0.0002 et sr * 0.49 devrait être sûr).

klvl -- niveau de renforcement ou d'atténuation, exprimé comme gain d'amplitude (par exemple, 1 : réponse plate, 4 : renforcement de 12 dB, 0.1 : atténuation de 20 dB) ; les valeurs nulle ou négatives sont interdites. Il est reconnu seulement par les types peak et shelf EQ (8, 10, 12) et ignoré par les autres filtres.

kQ -- résonance (également kfco / (largeur de bande) dans plusieurs types de filtre). N'est pas utilisé par les shelf EQs (imode = 10 et 12). La signification exacte de ce paramètre dépend du type de filtre (voir ci-dessus), mais il doit toujours être supérieur à zéro, et habituellement (kfco / kQ) doit être inférieur à sr / 2.

kS -- paramètre de pente pour les filtres shelf. Doit être supérieur à zéro ; plus la valeur est grande et plus la pente est raide, avec résonance si kS > 1 (cependant, une valeur trop grande de kS peut rendre le filtre instable). Si kS vaut exactement 1, la pente est aussi raide que possible sans résonance. Noter que l'effet de kS - spécialement s'il est supérieur à 1 - dépend aussi de klvl et qu'il n'a pas d'unité bien définie.

Exemples

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

Exemple 880. Exemple de l'opcode rbjeq.

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 RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o rbjeq.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

instr 1

imode = p4
a1    vco2    .3, 155.6			; sawtooth wave
kfco  expon   8000, p3, 200		; filter frequency
asig  rbjeq   a1, kfco, 1, kfco * 0.005, 1, imode
      outs asig, asig

endin
</CsInstruments>
<CsScore>

i 1 0  5 0	;lowpass
i 1 6  5 2	;highpass
i 1 12 5 4	;bandpass
i 1 18 5 8	;equalizer

e
</CsScore>
</CsoundSynthesizer>


Crédits

Algorithme original de Robert Bristow-Johnson.
Version orchestre de Csound par Josep M Comajuncosas, août 1999.
Converti en C (avec optimisations et correction des bogues) par Istvan Varga, Décembre 2002.