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
|
|
|
% ======================================================
|