106 lines
2.9 KiB
TeX
106 lines
2.9 KiB
TeX
\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
|
|
|
|
% ================================================================
|
|
|