<< Menu Principal >>
Session 3 : Retards, filtres et effets liés
Retards en Faust
- Un retard d’un échantillon en Faust peut être exprimé avec la primitive
'
. Ainsi, l’expression suivante :
process = _';
ajoute un retard d’un échantillon au signal entrant.
- L’équation différentielle correspondant à cette opération est : x(n) = x(n − 1).
- Ce type de primitive peut être chaîné. Ainsi, l’expression suivante :
process = _''';
ajoute un retard de trois échantillon au signal entrant.
- L’équation différentielle correspondant à cette opération est : x(n) = x(n − 3).
- Un nombre arbitraire d’échantillons de retard peut être spécifié avec la primitive
@
. Ainsi, l’expression suivante :
process = @(5);
ajoute un retard de cinq échantillons au signal entrant.
- L’équation différentielle correspondant à cette opération est : x(n) = x(n − 5).
- Un durée en secondes (ts) peut être convertie en un nombre d’échantillons (tn) avec la formule suivante : tn = tsfs.
- Un retard “dynamique” entier peut être spécifié avec la fonction
de.delay
:
maxDel = 1024;
del = hslider("delay",1,1,1023,1);
process = de.delay(maxDel,del);
où maxDel
est la longueur maximale du retard et del
est la longueur du retard (nombre entier).
- Un retard “dynamique” décimal peut être spécifié avec la fonction
de.fdelay
:
maxDel = 1024;
del = hslider("delay",1,1,1023,0.01);
process = de.fdelay(maxDel,del);
ou maxDel
est la longueur maximale du retard et del
la longueur du retard (et peut être un nombre décimal).
Effet de Doppler
- Changer la longueur d’un retard dynamiquement a pour effet de transposer la hauteur du son qu’il traite. On appelle ça l’effet Doppler.
- Un retard peut également être exprimé sous la forme d’une distance (en partant du principe que la vitesse du son dans l’air est c = 340m/s). Ainsi, pour convertir une distance en mètre en nombre d’échantillons, il suffit d’appliquer la formule suivante : ds = dmfs/c (avec ds, la distance en échantillon, dm la distance en mètres et c la vitesse du son dans l’air).
- Une implémentation de l’effet de Doppler en Faust pourrait prendre cette forme :
import("stdfaust.lib");
doppler(distance,freq) = de.fdelay4(100000,d*osc+1)
with{
d = distance*ma.SR/340;
osc = os.osc(freq)*0.5+0.5;
};
d = hslider("distance",340,0.1,600,0.01); // in meters
f = hslider("frequency",0.1,0.01,2,0.01);
process = doppler(d,f);
Filtres non-récursifs “One Zero” (FIR)
- Le type de filtre “le plus simple” consiste à ajouter un signal avec sa version retardée d’un échantillon : y(n) = b0x(n) + b1x(n − 1).
- Ce type de filtre est appelé “One Zero Filter” car sa fonction de transfert n’a pas de dénominateur. Il fait partie de la famille des filtres “FIR” (Finite Impulse Response).
- Le signe de b1 détermine la nature du filtre : passe-bas si b1 est positif, passe-haut si b1 est négatif.
- Ce filtre peut être implémenté en Faust de manière simple :
import("stdfaust.lib");
oneZero(b1) = _ <: _,_'*b1 :> _;
zero = hslider("zero",0,-1,1,0.01) : si.smoo;
process = oneZero(zero);
Filtre en peigne non-récursif
import("stdfaust.lib");
ffComb(del,ff) = _ <: _,de.delay(128,del)*ff :> _;
d = hslider("delay",1,1,127,1);
f = hslider("feedForward",1,0,1,0.01) : si.smoo;
process = ffComb(d,f);
- La réponse fréquentielle de ce type de filtre ressemble à un “peigne”, d’où son nom.
Flanger
- Le flanger est un des effets les plus classique dans la boîte à outil des guitares électriques.
- Il consiste à moduler le retard d’un filtre en peigne avec un oscillateur :
import("stdfaust.lib");
ffComb(del,ff) = _ <: _,de.delay(128,del)*ff :> _;
flanger(freq,depth,ff) = ffComb(del,ff)
with{
del = os.osc(freq)*0.5 + 0.5 : +(1) : *(depth);
};
freq = hslider("freq",1,0.1,50,0.01) : si.smoo;
depth = hslider("depth",1,0,100,0.01) : si.smoo;
ff = hslider("feedForward",1,0,1,0.01) : si.smoo;
process = no.noise : flanger(freq,depth,ff);
Devoir
- Ce devoir doit m’être envoyé par e-mail avant le 19/11/2020 (9h) à l’adresse suivante : michon_at_grame_point_fr.
Plugin
- Le but de ce devoir est de créer un plugin avec Faust pour votre plateforme préférée. Ainsi, ce plugin peut prendre la forme d’un VST, d’un Audio Unit, d’un objet Max, PureData ou CSOUND, etc. La seule obligation est de produire un objet utilisable dans un autre environnement.
- L’objectif est vraiment qu’il s’intègre à votre pratique d’informaticien musical/de RIM.
- Expérimentez avec les techniques de synthèse étudiées dans les sessions 1, 2 et 3 et mettez en place des mappings permettant de les contrôler de manière subtile.
- Soyez créatif et faites vous plaisir !
- Essayez de créer un outil utilisable par d’autres : “emballez” (packagez) votre outil de la manière la plus lisible possible (ex. README, procédure d’installation, etc.).
- Quand votre plugin est prêt, faites une courte vidéo de demonstration (téléphones portables OK).
- Postez cette vidéo en ligne (ex. YouTube).
- Envoyez-moi le lien vers la vidéo ainsi que le code Faust de votre instrument : michon_at_grame_point_fr.
Projet Final
- Préparez 3 idées de projet final que vous présenterez en classe le 19 novembre 2020.