TetaTricks/chap/modular.tex

203 lines
6.8 KiB
TeX
Raw Normal View History

2021-10-15 23:22:38 +02:00
\chapter{Modulaires}
\label{chap:modular}
Comment définir un synthétiseur modulaire en quelques mots ?
Disons que c'est un synthé dont chaque composant élémntaire
est indépendant, et interconnectable aux autres par un gros
plat de cables sans parmesan.
2021-10-19 19:07:28 +02:00
Un univers intrigant et infini.
% ======================================================
2021-10-15 23:22:38 +02:00
\section{Chuck} \index{Chuck}
Chuck peut être vu comme un équivalent logiciel à ce système
de cablage. Nous avons sour la main des modules, que nous allons
raccorder et paramétrer grace à l'opérateur \texttt{=>}.
Le module \texttt{dac} correspond à la sortie audio de votre
2021-10-19 19:07:28 +02:00
machine.
2021-10-15 23:22:38 +02:00
Voici donc un premier exemple, sans la moindre prétention
musicale~:
\lstinputlisting{code/beep.ck}
2021-10-19 19:07:28 +02:00
Félicitation, vous venez de coder un diapason rudimentaire.
La première ligne connecte un oscillateur sinusoïdal
directement sur la sortie audio, les deux suivantes
règlent le volume et la hauteur du signal généré, et la
dernière demande d'attendre deux secondes avant d'arreter.
Mais je suis bien d'accord avec vous, ce son est un peu
agressif, surtout dans l'attaque. Hop, nous allons brancher
un nouveau module entre le générateur et la sortie~:
un contrôleur d'enveloppe qui atténuera la brutalité de
l'attaque et la violence de la fin du son.
\lstinputlisting{code/bipenv.ck}
C'est déja mieux \textit{:)} Détaillons les quatre dernières
ligne de ce script~: deux nous sont déja connues, celles où
l'on met une \textsl{duration} dans le \texttt{now} afin
d'attendre un certain temps. quand aux deux autres
(qui sont des appels de méthode, reconnaissables à la
paire de parenthèses qui les terminent)
elles déclenchent le debut et la fin du contrôleur
d'enveloppe.
Quand on actionne le \texttt{keyOn}, le processeur d'enveloppe
commence avc un gain à 0 et monte progressivement au gain
maximal dans le temps réglé au préalable dans
\texttt{e.duration}. De la même façon, \texttt{keyOff}
fait redescendre le volume à 0 à la fin du beep sur
la même durée, et pour entendre cette partie finale , il nous
faut attendre un peu, d'où la dernière ligne.
2021-10-23 14:25:18 +02:00
Et avant de passer à la suite, voyons un peu le coté plus
« informatique » de Chuck. La séquence d'instruction finale
de l'exemple précédent peut être vu comme un bloc unique,
puisque il n'a qu'une seule finalité~:
générer le beep\index{beep}.
Et pour ça, nous allons les regrouper dans une \textbf{fonction}
que voici que voilà :
\begin{verbatim}
fun void beep() {
e.keyOn(); 2::second => now;
e.keyOff(); 1::second => now;
}
\end{verbatim}
Pour l'utilisation de cette fonction, c'est dans la partie suivante.
Bienvenue dans le monde merveilleux des lignes de code.
% ------------------------------------------------------
2021-10-19 19:07:28 +02:00
\subsection{Les filtres}
Le son que nous avons utilisé dans les précédents exemples
est une sinusoïde, un son « pur » que l'on peut qualifier
sans crainte de légèrement pauvre. Nous allons régler ça.
Vous pouvez déja essayer de remplacer le sinus par une onde
carrée, un \texttt{SqrOsc}, bien remplie d'harmoniques.
C'est ce que nous allons faire, mais nous allons aussi rajouter
un filtre passe-bande pour moduler la couleur du son.
\lstinputlisting{code/bipfilter.ck}
Puisque la fréquence de notre \textit{beep} est calée à
440 Hz, nous allonc chercher les harmoniques supérieures
vers 1337 Hz, avec une largeur de bande assez grande.
Et nous obtenons un son bien plus brillant, mais encore
2021-10-23 14:25:18 +02:00
un peu inerte.
Prochaine étape, brancher un LFO sur
2021-10-19 19:07:28 +02:00
ce filtre\dots
2021-10-23 14:25:18 +02:00
% ------------------------------------------------------
2021-10-19 19:07:28 +02:00
\subsection{Beep à vibrato}
Les choses vont un peu se corser, avec la notion de
\textsl{multi thread}. Un grand mot pour une chose
(relativement) simple. En fait, une partie du script
va s'exécuter indépendament du reste, un peu comme
l'autonomie de votre LFO matériel.
\lstinputlisting{code/bipvibrato.ck}
2021-10-23 14:25:18 +02:00
Et nous retrouvons la notion de fonction.
% ------------------------------------------------------
2021-10-19 19:07:28 +02:00
\subsection{Attack Decay Sustain Release} \index{ADSR}
Un module d'enveloppe bien plus élaboré, fidèle aux canons
de l'époque. Son utilisation est semblable à \texttt{Envelope} que nous
avons vu plus haut, ce qui nous donne ce patch~:
\begin{verbatim}
SqrOsc s => BPF f => ADSR adsr => dac;
\end{verbatim}
Point suivant : configurer notre ADSR. Il y a bien plus de potards
que dans l'exemple précédent :
attack time et rate, decay time et rate, release time et rate et
sustain level pour finir.
2021-10-23 14:25:18 +02:00
% ------------------------------------------------------
2021-10-19 19:07:28 +02:00
\subsection{Jouer des samples}
2021-10-23 14:25:18 +02:00
Oui, on peut. On peut même faire des choses assez fun.
2021-11-03 09:08:40 +01:00
Juste un example un peu brouillon et qui manque de rigueur,
essentiellement sur le calcul de la durée d'écoute de
l'échantillon en fonction du \textsl{pitch}.
Mais, en attendant mieux :
2021-10-30 15:54:36 +02:00
\lstinputlisting{code/playsample.ck}
2021-11-03 09:08:40 +01:00
Bien entendu, il vous faudra créer le fichier avec
l'échantillon sonore. J'ai utilisé un fichier de quatre
secondes échantilloné à 22050 Hz.
2021-10-30 15:54:36 +02:00
Et j'entend un esprit chagrin râler au fond de la salle :
« oué, nous on veut du gros son ». Patience, nous allons
d'abord voir les briques avant de construire le mur.
2021-10-23 14:25:18 +02:00
% ------------------------------------------------------
\subsection{Dialoguer en MIDI} \index{MIDI} \label{chuck-midi}
Oui, on peut. Et nous allons faire des \textsf{beep} à
partir d'un clavier ou du séquenceur d'une electribe.
Attention, une petite connaissance du protocole MIDI
est nécessaire. Vous trouverez quelques explications
page \pageref{chap:MIDI}.
2021-10-30 15:54:36 +02:00
Le petit bout de code qui suit vous affiche les triplets
reçus en charabia numérique. Leur décriptage est laissé
en exercice à nos lecteurs.
2021-10-23 14:25:18 +02:00
2021-10-30 15:54:36 +02:00
\lstinputlisting{code/midibeep.ck}
2021-10-23 14:25:18 +02:00
2021-10-30 15:54:36 +02:00
Cet exemple est volontairement simple, voire même minimaliste,
afin de ne pas surcharger cet ouvrage. Mais je vous rappelle
que les exemples sur le site sont très instructifs.
2021-10-23 14:25:18 +02:00
% ------------------------------------------------------
2021-10-19 19:07:28 +02:00
\subsection{Communication OSC} \index{OSC} \label{chuck-osc}
OSC, Open Sound Control, a son chapitre dédié en page \pageref{chap:OSC}.
2021-10-23 14:25:18 +02:00
Nous allons nous concentrer sur les aspects Chuck.
2021-10-30 15:54:36 +02:00
J'ai bien une idée d'exemple, mais ce soir, c'est soirée "flemme".
2021-10-23 14:25:18 +02:00
% ------------------------------------------------------
\subsection{Enregistrer}
Il est aussi possible de générer des fichiers .WAV à partir
d'un script Chuck.
2021-10-19 19:07:28 +02:00
\subsection{Aller plus loin}
Et pour la suite, allez onsulter
http://chuck.cs.princeton.edu/ et http://chuck.stanford.edu/
pour tout savoir. La rubrique des exemples est très
instructive.
2021-10-15 23:22:38 +02:00
2021-10-19 19:07:28 +02:00
% ======================================================
2021-10-15 23:22:38 +02:00
\section{Super Collider}
Là, nous rentrons dans le domaine de la jeune Nina, je vais
donc lui,laisser la plume (ou le clavier).
2021-10-19 19:07:28 +02:00
% ======================================================
2021-10-15 23:22:38 +02:00
2021-10-19 19:07:28 +02:00
\section{CSound} \index{Csound}
2021-10-15 23:22:38 +02:00
2021-10-19 19:07:28 +02:00
% ======================================================