From adabdb99c57bfca8ef5a57f61afb195c5f9d2f4a Mon Sep 17 00:00:00 2001
From: David Runge <dave@sleepmap.de>
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(-)

(limited to 'thesis/thesis.tex')

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

