\chapter{Open Sound Control}
\index{OSC} \label{chap:OSC}

Wikipedia : 
\textsl{OSC est un format de transmission de données entre ordinateurs,
synthétiseurs, robots ou tout autre matériel ou logiciel compatible,
conçu pour le contrôle en temps réel.
Il utilise le réseau IP\index{IP} au travers
des protocoles UDP\index{UDP} ou TCP\index{TCP} et apporte des
améliorations en termes de rapidité et de flexibilité par rapport
à l'ancienne norme MIDI\index{MIDI}\dots}

Actuellement, j'utilise (pour le C) \texttt{liblo}\index{liblo}
qui reste simple
à utiliser tout en permettant de descendre à un bas niveau.
Cette bibliothèque est livrée avec deux outils que nous
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:~$
\end{verbatim}

La chaine \texttt{is} que vous voyez dans la ligne de commande
décrit le type des paramètres qui suivent~:
\texttt{i} est pour un integer et \texttt{s} pour une
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 !"
^C
tth@debian:~$ 
\end{verbatim}

%	================================================================

\section{Exemple de code}

\textbf{Ecouter :}

Attention, là, nous arrivons sur un domaine plus
hardu\footnote{Un beau néoligisme, n'est-il pas ?}.
En effet, la mécanique interne de \texttt{liblo}
utilise un thread d'écoute qui appelle des 
\textsl{callbacks} préalablement "accrochés",
\textsl{hooked} en vrai langue.

\lstinputlisting[language=c]{code/listen-osc.c}

\textbf{Envoyer :}

Cette partie là est beaucoup plus simple.

\lstinputlisting[language=c]{code/send-osc.c}

J'avoue ne pas encore savoir ce que veut bien dire la
valeur de retour.

%	================================================================

\section{En Perl}    \index{Perl}

\begin{verbatim}
use Net::OpenSoundControl::Client;

$client =  Net::OpenSoundControl::Client->new(
                    Host => $target, Port => $port)
or die "Could not start client: $@\n";

$client->send(['/proc/kcore', 'i', 61, 's', "bla"]);
\end{verbatim}

%	================================================================
%	nouveau: Sat Jul 15 07:14:10 UTC 2023

\section{Le routage}

WIP...\index{XXX}


%	================================================================

\section{Autres logiciels}

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} (page \pageref{chuck-osc}),
\dots

%	================================================================

