<< 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);
Interface SmartKeyboard
- Les interfaces
SmartKeyboard
remplacent les interfaces standards des applications Android et iOS générées par Faust. Ces dernières sont plus adaptées à des écrans tactiles.
- Pour générer une appli
SmartKeyboard
, il suffit de choisir android/smartkeyb dans la fonction export de l’éditeur en ligne de Faust.
- La documentation de SmartKeyb et une série d’exemples d’application
SmartKeyboard
sont disponibles dans la distribution de Faust.
Devoir
- Ce devoir doit m’être envoyé par e-mail avant le 21/11/2019 (9h) à l’adresse suivante : michon_at_grame_point_fr.
Instrument mobile
- Le but de ce devoir est de créer une application
SmartKeyboard
produisant des sons et contrôlable par les accéléromètres et l’écran tactile du smartphone.
- 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.
- Mettez vous dans la peau du “luthier numérique” et construisez un instrument ou un “jouet sonore” qui à du sens.
- Soyez créatif et faites vous plaisir !
- Quand votre instrument 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 21 novembre 2019.