\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. Un univers intrigant et infini. % ====================================================== \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 machine. Voici donc un premier exemple, sans la moindre prétention musicale~: \lstinputlisting{code/beep.ck} 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. \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 un peu inerte. Prochaine étape, brancher un LFO sur ce filtre\dots \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} Spork !! \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. \subsection{Jouer des samples} Oui, on peut. \subsection{Communication OSC} \index{OSC} \label{chuck-osc} OSC, Open Sound Control, a son chapitre dédié en page \pageref{chap:OSC}. Nous allons nouc concentrer sur les aspects Chuck. \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. % ====================================================== \section{Super Collider} Là, nous rentrons dans le domaine de la jeune Nina, je vais donc lui,laisser la plume (ou le clavier). % ====================================================== \section{CSound} \index{Csound} % ======================================================