summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--thesis/thesis.tex70
1 files 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