<< Menu Principal >>
Session 2 : Signaux en Faust, modulation d’amplitude et synthèse soustractive
Target Faust
Algèbre des signaux en Faust
Panoramique
- Un panoramique (panner) permettant de contrôler la quantité de signal envoyée sur deux canaux séparés peut être implémenté de manière assez simple en Faust :
import("stdfaust.lib");
panner(p) = _ <: *(1-p),*(p);
pan = hslider("pan",0,0,1,0.01) : si.smoo;
process = panner(pan);
- En cas de clicks, le signal produit par un élément d’interface utilisateur peut être “lissé” en utilisant la fonction
si.smoo
.
Auto Pan
- La fonction
panner
de l’étape précédente peut être réutilisée pour implémenter un effet d’“auto pan” en contrôlant le paramètre pan
avec un oscillateur basse fréquence (LFO) :
import("stdfaust.lib");
panner(p) = _ <: *(1-p),*(p);
autoPan(freq,depth) = panner(p)
with{
p = 0.5 + os.osc(freq)*0.25*depth;
};
d = hslider("depth",0,0,1,0.01) : si.smoo;
f = hslider("freq",1,0.01,10,0.01) : si.smoo;
process = autoPan(f,d);
Modulation en anneau (modulation d’amplitude)
import("stdfaust.lib");
ringMod(freq,depth) = *(1-mod)
with{
mod = (os.osc(freq)*0.5 + 0.5)*depth;
};
d = hslider("depth",0,0,1,0.01) : si.smoo;
f = hslider("freq",100,0.01,5000,0.01) : si.smoo;
process = ringMod(f,d);
Synthèse soustractive
- Les filtres les plus standards/utilisés en Faust sont :
- La synthèse soustractive consiste à filtrer un son riche pour “sculpter” son spectre.
- Ce type de synthèse peut être facilement mis en place dans Faust :
import("stdfaust.lib");
subSynth(freq,ctFreq) = os.sawtooth(freq) : fi.lowpass(3,ctFreq);
f = hslider("freq",400,50,5000,0.01);
cf = hslider("ctFreq",5000,50,10000,0.01) : si.smoo;
gain = hslider("gain",1,0,1,0.01);
gate = button("gate");
envelope = en.adsr(0.1,0.01,0.8,0.1,gate)*gain;
process = subSynth(f,cf*(0.5+envelope*0.5))*envelope;
effect = dm.zita_light;
- Les filtres résonnants ont un comportement un plus agressif en fonction de la valeur de leur Q :
import("stdfaust.lib");
subSynth(freq,ctFreq,q) = os.sawtooth(freq) : fi.resonlp(ctFreq,q,1);
f = hslider("freq",400,50,5000,0.01);
cf = hslider("ctFreq",5000,50,10000,0.01) : si.smoo;
q = hslider("q",5,1,20,0.01) : si.smoo;
gain = hslider("gain",1,0,1,0.01);
gate = button("gate");
envelope = en.adsr(0.1,0.01,0.8,0.1,gate)*gain;
process = subSynth(f,cf*(0.5+envelope*0.5),q)*envelope;
effect = dm.zita_light;
- Les filtres résonnants peuvent également être utilisés pour synthétiser du son :
import("stdfaust.lib");
impFreq = hslider("impFreq",7,1,20,0.01) : si.smoo;
q = hslider("q",20,1,30,0.01) : si.smoo;
freq = hslider("freq",440,50,5000,0.01);
gain = hslider("gain",1,0,1,0.01);
gate = button("gate");
process = os.lf_imptrain(impFreq) : fi.resonlp(freq,q,1)*gain*gate*4;
effect = dm.zita_light;
Devoir
- Ce devoir doit m’être envoyé par e-mail avant le 12/11/2020 (9h30) à l’adresse suivante : michon_at_grame_point_fr.
Produire des applications pour Android avec l’éditeur en ligne
- Pour transformer un programme Faust en une application Android, deux étapes sont nécessaires:
- Tout d’abord, le nom du programme par défaut (
untitled.dsp
) dans le menu en haut à gauche doit être remplacé par le nom que vous souhaitez donner à votre application (ex. monAppli.dsp
).
- Il suffit ensuite de sélectionner Android/Android dans la fonction “Export” et d’attendre que l’application soit générée.
- Pour installer l’application sur votre téléphone Android, il est nécessaire d’avoir une application de scannage de QR code.
- En plus des éléments d’interface utilisateur affichés sur l’écran, il est possible de mapper les capteurs internes du téléphone (ex. accéléromètre, gyroscope, etc.) sur les différents paramètres d’un programme Faust en utilisant le système suivant : https://faustdoc.grame.fr/manual/syntax/#sensors-control-metadatas
- Par exemple, le programme précédent peut être modifié pour le rendre controllable par les accéléromètres du smartphone :
import("stdfaust.lib");
impFreq = hslider("impFreq",7,1,20,0.01) : si.smoo;
q = hslider("q",20,1,30,0.01) : si.smoo;
freq = hslider("freq[acc: 0 0 -10 0 10]",440,50,5000,0.01);
gain = hslider("gain",1,0,1,0.01);
gate = button("gate");
process = os.lf_imptrain(impFreq) : fi.resonlp(freq,q,1)*gain*4;
Instrument mobile
- Le but de ce devoir est de créer une application Android produisant des sons et contrôlable par les accéléromètres du smartphone.
- Expérimentez avec les techniques de synthèse étudiées dans les sessions 1 et 2 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.