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
|
La page de man de getopt(3) contient des explications détaillées
|
||||||
et un exemple simple d'utilisation.
|
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}
|
\section{oscdump \& oscsend}
|
||||||
\index{oscdump}\index{oscsend}
|
\index{oscdump}\index{oscsend}
|
||||||
|
|
||||||
|
|
||||||
\textbf{Envoyer :}
|
\textbf{Envoyer :}
|
||||||
|
|
||||||
Pour envoyer, il faut bien définir une destination. Une fois
|
Pour envoyer, il faut bien définir une destination. Une fois
|
||||||
de plus, le couple IP adresse/port est utilisé. Ce sont les
|
de plus, le couple IP adresse/port est utilisé. Ce sont les
|
||||||
deux premiers paramètres.
|
deux premiers paramètres.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tth@debian:~$ oscsend localhost 1664 /tmp/kmem is 61 'meg, efface !'
|
tth@debian:~$ oscsend localhost 1664 /tmp/kmem is 61 'meg, efface !'
|
||||||
tth@debian:~$
|
tth@debian:~$
|
||||||
@ -38,7 +36,6 @@ chaine (notez les simples quotes pour passer les caractères
|
|||||||
speciaux du shell).
|
speciaux du shell).
|
||||||
|
|
||||||
\textbf{Ecouter :}
|
\textbf{Ecouter :}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tth@debian:~$ oscdump 1664
|
tth@debian:~$ oscdump 1664
|
||||||
/tmp/kmem is 61 "meg, efface !"
|
/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
|
Beaucoup d'autres logiciels peuvent être controlés par OSC, ou
|
||||||
générer des trames OSC : on peut citer
|
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
|
en C, mais le premier exemple du tutorial d'initiation ne fonctionne
|
||||||
pas vraiment comme il devrait. Mais quand même une affaire à suivre.
|
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
|
est indépendant, et interconnectable aux autres par un gros
|
||||||
plat de cables sans parmesan.
|
plat de cables sans parmesan.
|
||||||
|
|
||||||
% ------------------------------------------------------
|
Un univers intrigant et infini.
|
||||||
|
|
||||||
|
% ======================================================
|
||||||
\section{Chuck} \index{Chuck}
|
\section{Chuck} \index{Chuck}
|
||||||
|
|
||||||
Chuck peut être vu comme un équivalent logiciel à ce système
|
Chuck peut être vu comme un équivalent logiciel à ce système
|
||||||
de cablage. Nous avons sour la main des modules, que nous allons
|
de cablage. Nous avons sour la main des modules, que nous allons
|
||||||
raccorder et paramétrer grace à l'opérateur \texttt{=>}.
|
raccorder et paramétrer grace à l'opérateur \texttt{=>}.
|
||||||
Le module \texttt{dac} correspond à la sortie audio de votre
|
Le module \texttt{dac} correspond à la sortie audio de votre
|
||||||
machine. Consultez
|
machine.
|
||||||
http://chuck.cs.princeton.edu/ et http://chuck.stanford.edu/
|
|
||||||
pour tout savoir...
|
|
||||||
|
|
||||||
Voici donc un premier exemple, sans la moindre prétention
|
Voici donc un premier exemple, sans la moindre prétention
|
||||||
musicale~:
|
musicale~:
|
||||||
|
|
||||||
\lstinputlisting{code/beep.ck}
|
\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}
|
\section{Super Collider}
|
||||||
|
|
||||||
Là, nous rentrons dans le domaine de la jeune Nina, je vais
|
Là, nous rentrons dans le domaine de la jeune Nina, je vais
|
||||||
donc lui,laisser la plume (ou le clavier).
|
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}
|
\subsection{Encoder un cloître}
|
||||||
|
|
||||||
Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo
|
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.
|
C'est donc un exemple réel, avec même des méta-données.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
@ -119,6 +120,7 @@ ffmpeg -nostdin \
|
|||||||
|
|
||||||
Comment convertir lors de l'encodage un fichier \texttt{.WAV}
|
Comment convertir lors de l'encodage un fichier \texttt{.WAV}
|
||||||
en un format compressé afin de ne pas saturer la buvette ?
|
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
|
Quand on encode en // images et son, comment arreter quand on atteint
|
||||||
la fin du plus court des deux flux ?
|
la fin du plus court des deux flux ?
|
||||||
@ -139,10 +141,11 @@ soigneusement éviter, pour nous concentrer sur la ligne
|
|||||||
de commande.
|
de commande.
|
||||||
|
|
||||||
Pour balancer toutes les vidéos en boucle random~:
|
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
|
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
|
combinaisons codec/container rendent la compréhension de cet univers
|
||||||
assez perturbante.
|
assez perturbante.
|
||||||
|
|
||||||
|
|
||||||
\subsection{rtmp} \index{rtmp}
|
\subsection{rtmp} \index{rtmp}
|
||||||
|
|
||||||
\texttt{flvstreamer -r rtmp://lacantine.live-fstreams.cdn02.rambla.be:1935/live-lacantine/live-lacantine-2 | mplayer -}
|
\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;
|
||||||
|
}
|
2
main.tex
2
main.tex
@ -18,7 +18,7 @@
|
|||||||
%------ reglages des 'listings'
|
%------ reglages des 'listings'
|
||||||
\lstset{frame=single} % dessin d'un cadre autour du listing
|
\lstset{frame=single} % dessin d'un cadre autour du listing
|
||||||
\lstset{basicstyle=\ttfamily\small}
|
\lstset{basicstyle=\ttfamily\small}
|
||||||
\lstset{aboveskip=0.5em,belowskip=0.5em}
|
\lstset{aboveskip=0.8em,belowskip=0.5em}
|
||||||
|
|
||||||
\setcounter{tocdepth}{1}
|
\setcounter{tocdepth}{1}
|
||||||
\pagestyle{plain}
|
\pagestyle{plain}
|
||||||
|
Loading…
Reference in New Issue
Block a user