TetaTricks/chap/OSC.tex

106 lines
2.9 KiB
TeX
Raw Normal View History

2020-10-27 09:06:17 +11:00
\chapter{Open Sound Control}
2020-11-13 11:35:31 +11:00
\index{OSC} \label{chap:OSC}
2020-10-27 09:06:17 +11:00
Wikipedia :
\textsl{OSC est un format de transmission de données entre ordinateurs,
synthétiseurs, robots ou tout autre matériel ou logiciel compatible,
2021-06-28 17:39:26 +11:00
conçu pour le contrôle en temps réel.
Il utilise le réseau IP\index{IP} au travers
2020-12-23 08:53:57 +11:00
des protocoles UDP\index{UDP} ou TCP\index{TCP} et apporte des
2021-06-28 17:39:26 +11:00
améliorations en termes de rapidité et de flexibilité par rapport
2020-10-27 09:06:17 +11:00
à 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
2020-12-23 08:53:57 +11:00
allons voir maintenant.
2020-10-27 09:06:17 +11:00
2023-09-04 05:30:43 +11:00
% ================================================================
2020-10-27 09:06:17 +11:00
\section{oscdump \& oscsend}
\index{oscdump}\index{oscsend}
2021-10-05 07:24:01 +11:00
\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 :}
2020-10-27 09:06:17 +11:00
\begin{verbatim}
tth@debian:~$ oscdump 1664
/tmp/kmem is 61 "meg, efface !"
^C
tth@debian:~$
\end{verbatim}
2023-09-04 05:30:43 +11:00
% ================================================================
2020-10-27 09:06:17 +11:00
\section{Exemple de code}
2021-10-05 08:28:19 +11:00
\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.
2020-12-23 08:53:57 +11:00
\lstinputlisting[language=c]{code/listen-osc.c}
2021-10-05 08:28:19 +11:00
\textbf{Envoyer :}
Cette partie là est beaucoup plus simple.
2020-12-23 08:53:57 +11:00
\lstinputlisting[language=c]{code/send-osc.c}
2020-10-27 09:06:17 +11:00
2021-10-05 08:28:19 +11:00
J'avoue ne pas encore savoir ce que veut bien dire la
valeur de retour.
2023-09-04 05:30:43 +11:00
% ================================================================
2021-10-05 07:24:01 +11:00
\section{En Perl} \index{Perl}
2021-10-05 08:28:19 +11:00
\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}
2021-10-05 07:24:01 +11:00
2023-09-04 05:30:43 +11:00
% ================================================================
% nouveau: Sat Jul 15 07:14:10 UTC 2023
\section{Le routage}
WIP...\index{XXX}
% ================================================================
2021-10-05 07:24:01 +11:00
2020-10-27 09:06:17 +11:00
\section{Autres logiciels}
2021-06-28 17:39:26 +11:00
Beaucoup d'autres logiciels peuvent être controlés par OSC, ou
générer des trames OSC : on peut citer
2021-10-20 04:07:28 +11:00
Processing\index{Processing},
Chuck\index{Chuck} (page \pageref{chuck-osc}),
\dots
2020-10-27 09:06:17 +11:00
2023-09-04 05:30:43 +11:00
% ================================================================
2020-10-27 09:06:17 +11:00