From adabdb99c57bfca8ef5a57f61afb195c5f9d2f4a Mon Sep 17 00:00:00 2001 From: David Runge Date: Tue, 13 Jun 2017 10:28:17 +0200 Subject: thesis/thesis.tex: Adding contents to osc section. Expanding OSC atomic type tag table. Adding intro sentence in subsection Message interface. Adding acronyms for CNMAT and UDP. --- thesis/thesis.tex | 70 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/thesis/thesis.tex b/thesis/thesis.tex index 1f150b2..4afc5d3 100644 --- a/thesis/thesis.tex +++ b/thesis/thesis.tex @@ -36,6 +36,7 @@ \newacronym{asdf}{ASDF}{Audio Scene Description Format} \newacronym{bs}{BS}{Binaural Synthesis} \newacronym{brs}{BRS}{Binaural Room Synthesis} +\newacronym{cnmat}{CNMAT}{Center for New Music and Audio Technologies} \newacronym{gpl}{GPL}{GNU General Public License} \newacronym{lgpl}{LGPL}{GNU Lesser General Public License} \newacronym{hoa}{HOA}{Higher Order Ambisonics} @@ -49,6 +50,7 @@ \newacronym{raii}{RAII}{Ressource acquisition is initialization} \newacronym{ssr}{SSR}{SoundScape Renderer} \newacronym{tcp}{TCP}{Transmission Control Protocol} +\newacronym{udp}{UDP}{User Datagram Protocol} \newacronym{vbap}{VBAP}{Vector Based Amplitude Panning} \newacronym{wfs}{WFS}{Wave Field Synthesis} \newacronym{xml}{XML}{Extensible Markup Language} @@ -184,7 +186,7 @@ \label{subsec:wfscollider} WFSCollider was built on top of \href{https://supercollider.github.io}{SuperCollider} 3.5 - \citep{website:supercollider2016} and is also capable of driving large + \citep{website:supercollider} and is also capable of driving large scale systems. It uses a different approach in doing so, though: Whereas with sWONDER all audio streams are distributed to each node, WFSCollider usually uses the audio files to be played on @@ -346,19 +348,64 @@ \label{sec:results} \subsection{Open Sound Control interface} \label{subsec:osc-interface} + \gls{osc} is an “open, transport-independent, message-based protocol + developed for communication among computers, sound synthesizers, and + other multimedia devices” \citep{website:oscv1.0} developed at the + \gls{cnmat}. Its 1.0 specification was published by Matthew Wright in + 2002 \citep{website:oscv1.0} and the protocol has found widespread + implementations (as libraries) in several programming languages and + through that many use-cases in free and closed audio and video related + applications (e.g. Ardour \citep{website:ardour}, Cubase + \citep{website:steinberg}, Max/MSP \citep{website:cycling74}, + SuperCollider \citep{website:supercollider}) since then.\\ + \gls{osc}'s syntax is defined by several parts, which are discussed + briefly in this section.\\ + /begin{itemize} + \item Atomic data types, which are also reflected in type tags (see + Table~\ref{tab:ssr-osc-data-type-acronyms} for details) + \item Address patterns (a \gls{osc}-string starting with a “/”) + \item Type tag string (a string, beginning with a “,”, holding a set of + type tags, describing a collection of atomic data types) + \item Arguments, a set of binary representations of each argument + \item Messages, consisting (in sequence) of an address pattern, a type + tag string and \textit{n} \gls{osc} arguments. + \item Bundles, consisting of a set of Messages. + \item Packets, the unit of transmission (sent over \gls{udp} or + \gls{tcp}), consisting of a message or a bundle. + /end{itemize} + According to the specification, applications sending \gls{osc} packets + are considered a client and the ones receiving packets a server. + Applications can therefore be client and server at the same time. \begin{table}[!htb] + \scriptsize \centering - \begin{tabular}{ c | c } - \textbf{Atomic data type} & \textbf{Acronym} \\ - int & i \\ - float & f \\ - true & T \\ - false & F \\ - string & s \\ - char & c \\ + \begin{tabular}{ p{2cm} | p{8cm} } + \textbf{\gls{osc} type tag} & \textbf{Type} \\ + \texttt{i} & int32 \\ + \texttt{f} & float32 \\ + \texttt{s} & \gls{osc}-string \\ + \texttt{b} & \gls{osc}-blob \\ + \hline + \texttt{h} & 64 bit big-endian two's complement integer\\ + \texttt{t} & \gls{osc}-timetag\\ + \texttt{d} & 64 bit (“double”) IEEE 754 floating point number\\ + \texttt{S} & Alternate type represented as an \gls{osc}-string (for + example, for systems that differentiate “symbols” from “strings”)\\ + \texttt{c} & an ascii character, sent as 32 bits\\ + \texttt{r} & 32 bit RGBA color\\ + \texttt{m} & 4 byte MIDI message. Bytes from MSB to LSB are: port id, + status byte, data1, data2\\ + \texttt{T} & True. No bytes are allocated in the argument data.\\ + \texttt{F} & False. No bytes are allocated in the argument data.\\ + \texttt{N} & Nil. No bytes are allocated in the argument data.\\ + \texttt{I} & Infinitum. No bytes are allocated in the argument + data.\\ + \texttt{[} & Indicates the beginning of an array. The tags following + are for data in the Array until a close brace tag is reached.\\ + \texttt{]} & Indicates the end of an array.\\ \end{tabular} - \caption{Acronyms for atomic data types, used in \gls{osc} messages. - } + \caption{Acronyms (type tags) for atomic data types, used in \gls{osc} + messages and bundles \citep{website:oscv1.0}.} \label{tab:ssr-osc-data-type-acronyms} \end{table} @@ -494,6 +541,7 @@ \label{subsubsec:layered_clients} \subsubsection{Message interface} \label{subsubsec:message_interface} + \gls{osc} offers the possibility of a hierarchical path tree, that can be used to group messages \begin{table}[!htb] \scriptsize \centering -- cgit v1.2.3-54-g00ecf