mvmfilter

mvmfilter — Un filtre avec une résonance prononcée et une durée de chute contrôlable.

Description

Filtre le signal en entrée avec la fréquence de résonance et la durée de chute spécifiées. Peut être utilisé pour ajouter une résonance spécifique à un signal entrant ou pour modeler de courts éclats de sinusoïdes à la fréquence désirée. Avec une durée de chute suffisamment longue on peut en faire un oscillateur sinusoïdal.

Syntaxe

aout mvmfilter ain, xfreq, xTau [, iskip]

Initialisation

iskip (facultatif, 0 par défaut) -- s'il est différent de zéro l'initialisation du filtre est ignorée.

Exécution

aout -- signal filtré

ain -- signal à filtrer

xfreq -- fréquence de résonance du filtre

[Avertissement] Avertissement

La sortie du filtre peut augmenter rapidement si le signal en entrée est corrélé avec la sortie. Le pire cas se produit s'il augmente de l'amplitude de l'entrée à chaque échantillon. Pour limiter la croissance afin que le filtre n'explose pas il vaut mieux pondérer toute entrée continue de manière significative. L'échelle requise est relative à la valeur de la durée de chute tau si bien que si l'on choisit une durée de chute maximale on peut calculer le facteur de pondération requis : 1 / $M_E / (sr*tau)

xTau -- Durée de chute du filtre en secondes

La durée de chute est le temps en seconde pour que l'atténuation du filtre soit de 1/e

Exemples

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

Exemple 638. Exemple de l'opcode mvmfilter.

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

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

gaverb init 0

instr highQResonator
  ap mpulse .5, 0
  a1 mvmfilter ap, p4, .25
  out a1, a1
endin
  
instr dustyResonator
  ap dust .1, 30
  a1 mvmfilter ap, p4, .15
  out a1, a1
endin

instr oscillator
  ap mpulse .5, 0
  kenv madsr .1, .2, .6, .4
  a1 mvmfilter ap, p4, 1e6
  a1 *= kenv
  out a1, a1
endin

instr resonatorBank1
  ap mpulse .5, 0
  kampenv madsr .01, .2, .6, .4
  kenv init 1
  iDecayTime init 1
  a1 mvmfilter ap, p4*1*kenv, iDecayTime 
  a2 mvmfilter ap, p4*3*kenv, iDecayTime*.8
  a3 mvmfilter ap, p4*5*kenv, iDecayTime*.4
  a4 mvmfilter ap, p4*7*kenv, iDecayTime*.3
  a5 mvmfilter ap, p4*9*kenv, iDecayTime*.2
  a6 mvmfilter ap, p4*11*kenv, iDecayTime*.1
  aout = (a1+a2+a3+a4+a5+a6) * kampenv * (.1667)
  gaverb += aout * .3 
  out aout, aout
endin
  
instr resonatorBank2
  ap noise 0.005, 0
  kampenv madsr .01, .2, .6, .4
  kenv init 1
  iDecayTime init 1
  a1 mvmfilter ap, p4*1*kenv, iDecayTime
  a2 mvmfilter ap, p4*3*kenv, iDecayTime*.8
  a3 mvmfilter ap, p4*5*kenv, iDecayTime*.5
  a4 mvmfilter ap, p4*7*kenv, iDecayTime*.4
  a5 mvmfilter ap, p4*9*kenv, iDecayTime*.3
  a6 mvmfilter ap, p4*11*kenv, iDecayTime*.2
  aout = (a1+a2+a3+a4+a5+a6) * kampenv * (.1667)
  gaverb += aout * .3 
  out aout, aout
endin

instr harmonicArp
  avco vco2 .01, 50
  avco moogladder2 avco, 3000, .1
  kenv linseg 1.3,p3,2
  kampenv madsr 4, .1, 1, .4
  iDecayTime init .02
  a1 mvmfilter avco, p4*1*kenv, iDecayTime
  a2 mvmfilter avco, p4*2*kenv, iDecayTime
  a3 mvmfilter avco, p4*3*kenv, iDecayTime
  a4 mvmfilter avco, p4*4*kenv, iDecayTime
  a5 mvmfilter avco, p4*5*kenv, iDecayTime
  a6 mvmfilter avco, p4*6*kenv, iDecayTime
  aout = (a1+a2+a3+a4+a5+a6) * kampenv * .3
  aout tanh aout
  gaverb += aout*.3
  out aout, aout
endin

instr reverb
  adel	init 0
  ain = gaverb
  aleftout, arightout reverbsc ain, ain, .91, 12000
  outs    aleftout, arightout
  gaverb = 0
endin

</CsInstruments>
<CsScore>
s
; mvmfilter is basically a damped resonator
i "highQResonator" 	0 1 220

; putting some 'dust' through it
i "dustyResonator" 	2 2 300

; with a large time-constant it becomes an oscillator
i "oscillator" 		4 3 440

s
; It works for a modal synthesis type use
i "resonatorBank1" 	0 5 50
i "resonatorBank1" 	2 5 100
i "resonatorBank1" 	4 5 150

s
; and some slightly more interesting effects...
i "resonatorBank2" 	0 5 50
i "resonatorBank2" 	2 5 125
i "harmonicArp" 	4 12 100
i "resonatorBank2" 	7 5 50
i "resonatorBank2" 	10 5 180
i "reverb"		0 21


</CsScore>
</CsoundSynthesizer>


Références

Ce filtre est basé sur les travaux de Max Mathews et de Julius O. Smith III. Ce filtre fut d'abord utilisé par Max Mathews dans une application qui passait un son dans un banc de ces filtres avec contrôle en temps réel des paramètres de durée de chute et de fréquence. Cette installation était la base d'une performance collaborative en temps réel et était référencée comme filtres phaseurs.

  1. Max Mathews et Julius O. Smith III, "Very High Q Parametrically WellBehaved Two Pole Filters"

Crédits

Conception originale par Max V. Mathews et Julius O. Smith III

Implémentation de l'opcode par Joel Ross

Nouveau dans la version 6.16

Mai 2021.