apero time
This commit is contained in:
parent
7a4ae87c0e
commit
3e2fb4a408
13
chap/C.tex
13
chap/C.tex
@ -456,6 +456,19 @@ extern int optind, opterr, optopt;
|
||||
La page de man de getopt(3) contient des explications détaillées
|
||||
et un exemple simple d'utilisation.
|
||||
|
||||
% ---------------------------------------------------------
|
||||
|
||||
\section{Erreurs classiques}
|
||||
|
||||
Variables non initialisées.
|
||||
|
||||
Sortir d'un tableau.
|
||||
|
||||
Dépassement de la taille d'une chaine.
|
||||
|
||||
Libérer deux fois la mémoire.
|
||||
|
||||
\textsl{file pointer} invalide.
|
||||
|
||||
% =========================================================
|
||||
|
||||
|
@ -19,13 +19,11 @@ allons voir maintenant.
|
||||
\section{oscdump \& oscsend}
|
||||
\index{oscdump}\index{oscsend}
|
||||
|
||||
|
||||
\textbf{Envoyer :}
|
||||
|
||||
Pour envoyer, il faut bien définir une destination. Une fois
|
||||
de plus, le couple IP adresse/port est utilisé. Ce sont les
|
||||
deux premiers paramètres.
|
||||
|
||||
\begin{verbatim}
|
||||
tth@debian:~$ oscsend localhost 1664 /tmp/kmem is 61 'meg, efface !'
|
||||
tth@debian:~$
|
||||
@ -38,7 +36,6 @@ chaine (notez les simples quotes pour passer les caractères
|
||||
speciaux du shell).
|
||||
|
||||
\textbf{Ecouter :}
|
||||
|
||||
\begin{verbatim}
|
||||
tth@debian:~$ oscdump 1664
|
||||
/tmp/kmem is 61 "meg, efface !"
|
||||
@ -89,6 +86,8 @@ $client->send(['/proc/kcore', 'i', 61, 's', "bla"]);
|
||||
|
||||
Beaucoup d'autres logiciels peuvent être controlés par OSC, ou
|
||||
générer des trames OSC : on peut citer
|
||||
Processing\index{Processing}, Chuck\index{Chuck},\dots
|
||||
Processing\index{Processing},
|
||||
Chuck\index{Chuck} (page \pageref{chuck-osc}),
|
||||
\dots
|
||||
|
||||
|
||||
|
@ -142,6 +142,7 @@ protocol, improved threading support, and extensibility.
|
||||
en C, mais le premier exemple du tutorial d'initiation ne fonctionne
|
||||
pas vraiment comme il devrait. Mais quand même une affaire à suivre.
|
||||
|
||||
\lstinputlisting[language=c]{code/xf_yesno.c}
|
||||
|
||||
%-------------------------------------------------------------------
|
||||
|
||||
|
112
chap/modular.tex
112
chap/modular.tex
@ -6,33 +6,125 @@ 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. Consultez
|
||||
http://chuck.cs.princeton.edu/ et http://chuck.stanford.edu/
|
||||
pour tout savoir...
|
||||
|
||||
machine.
|
||||
Voici donc un premier exemple, sans la moindre prétention
|
||||
musicale~:
|
||||
|
||||
\lstinputlisting{code/beep.ck}
|
||||
|
||||
Félicitation, vous venez de coder un diapason.
|
||||
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}
|
||||
\section{CSound} \index{Csound}
|
||||
|
||||
|
||||
% ------------------------------------------------------
|
||||
% ======================================================
|
||||
|
@ -101,7 +101,8 @@ https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/ \index{gif89a}
|
||||
\subsection{Encoder un cloître}
|
||||
|
||||
Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo
|
||||
a été programmée par James Lewis pour la résidence « Sonoptic 2020 ».
|
||||
a été programmée par James Lewis pour la résidence « Sonoptic 2020 »,
|
||||
vidéo dont il a composé la bande originale.
|
||||
C'est donc un exemple réel, avec même des méta-données.
|
||||
|
||||
\begin{verbatim}
|
||||
@ -119,6 +120,7 @@ ffmpeg -nostdin \
|
||||
|
||||
Comment convertir lors de l'encodage un fichier \texttt{.WAV}
|
||||
en un format compressé afin de ne pas saturer la buvette ?
|
||||
\textsf{il dit qu'il ne comprend pas la question.}
|
||||
|
||||
Quand on encode en // images et son, comment arreter quand on atteint
|
||||
la fin du plus court des deux flux ?
|
||||
@ -139,10 +141,11 @@ soigneusement éviter, pour nous concentrer sur la ligne
|
||||
de commande.
|
||||
|
||||
Pour balancer toutes les vidéos en boucle random~:
|
||||
\texttt{vlc -f -Z *.mp4}.
|
||||
\texttt{vlc -f -Z *.mp4}. Mais comment supprimer l'affichage
|
||||
du nom de fichier au début de chaque séquence ?
|
||||
|
||||
VLC peut éventuellement aussi être utilisé comme un outil
|
||||
de streaming, voyez ça page \pageref{streamvlc}.
|
||||
de streaming, voyez ça page \pageref{streamvlc}, bon courage.
|
||||
|
||||
% --------------------------------------------------------------------
|
||||
|
||||
@ -153,7 +156,6 @@ de codecs, la foultitude de containers, et les nombreuses variantes de
|
||||
combinaisons codec/container rendent la compréhension de cet univers
|
||||
assez perturbante.
|
||||
|
||||
|
||||
\subsection{rtmp} \index{rtmp}
|
||||
|
||||
\texttt{flvstreamer -r rtmp://lacantine.live-fstreams.cdn02.rambla.be:1935/live-lacantine/live-lacantine-2 | mplayer -}
|
||||
|
12
code/bipenv.ck
Normal file
12
code/bipenv.ck
Normal file
@ -0,0 +1,12 @@
|
||||
// Just a better beep
|
||||
SinOsc s => Envelope e => dac;
|
||||
// reglage de notre oscillateur
|
||||
0.5 => s.gain;
|
||||
440 => s.freq;
|
||||
// reglage de notre enveloppe
|
||||
200::ms => e.duration;
|
||||
// hop !
|
||||
e.keyOn();
|
||||
2::second => now;
|
||||
e.keyOff();
|
||||
1::second => now;
|
16
code/bipfilter.ck
Normal file
16
code/bipfilter.ck
Normal file
@ -0,0 +1,16 @@
|
||||
//--- Just a noisy beep
|
||||
SqrOsc s => BPF f => Envelope e => dac;
|
||||
//--- reglage de notre oscillateur
|
||||
0.8 => s.gain;
|
||||
440 => s.freq;
|
||||
//--- reglage de notre enveloppe
|
||||
100::ms => e.duration;
|
||||
//--- reglage du filtre passe bande
|
||||
2 => f.Q;
|
||||
1337 => f.freq;
|
||||
|
||||
//--- hop encore un beep !
|
||||
e.keyOn();
|
||||
2::second => now;
|
||||
e.keyOff();
|
||||
1::second => now;
|
14
code/bipvibrato.ck
Normal file
14
code/bipvibrato.ck
Normal file
@ -0,0 +1,14 @@
|
||||
SqrOsc s => BPF f => Envelope e => dac;
|
||||
0.8 => s.gain;
|
||||
440 => s.freq;
|
||||
100::ms => e.duration;
|
||||
|
||||
//--- reglage du filtre passe bande
|
||||
2 => f.Q;
|
||||
1337 => f.freq;
|
||||
|
||||
//--- hop encore un beep !
|
||||
e.keyOn();
|
||||
2::second => now;
|
||||
e.keyOff();
|
||||
1::second => now;
|
33
code/xf_yesno.c
Normal file
33
code/xf_yesno.c
Normal file
@ -0,0 +1,33 @@
|
||||
#include <forms.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
FL_FORM *form;
|
||||
FL_OBJECT *yes,
|
||||
*no,
|
||||
*but;
|
||||
|
||||
fl_initialize(&argc, argv, "FormDemo", 0, 0);
|
||||
|
||||
form = fl_bgn_form(FL_UP_BOX, 320, 120);
|
||||
fl_add_box(FL_BORDER_BOX, 160, 40, 0, 0, \
|
||||
"Do you want to Quit?");
|
||||
yes = fl_add_button(FL_NORMAL_BUTTON, \
|
||||
40, 70, 80, 30, "Yes");
|
||||
no = fl_add_button(FL_NORMAL_BUTTON, \
|
||||
200, 70, 80, 30, "No");
|
||||
fl_end_form();
|
||||
|
||||
fl_show_form(form, FL_PLACE_MOUSE, FL_TRANSIENT, \
|
||||
"Question");
|
||||
|
||||
while (1) {
|
||||
if (fl_do_forms() == yes {
|
||||
printf("Yes is pushed\n");
|
||||
break;
|
||||
}
|
||||
else printf("No is pushed\n");
|
||||
}
|
||||
|
||||
fl_finish();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user