\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} % ------------------------------------------------ \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