\documentclass[9pt, xcolor=table]{beamer}
\usetheme{Frankfurt}
\usecolortheme{seahorse}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp} % Sonderzeichen, z.B. €
\usepackage[usenames,dvipsnames,rgb,svgnames,table]{xcolor}
\usepackage[table]{xcolor}
\usepackage[usenames,svgnames,table]{xcolor}
\definecolor{osc-out}{RGB}{150,0,255}
\definecolor{osc-in}{RGB}{0,0,255}
\definecolor{audio-in}{RGB}{255,0,0}
\definecolor{audio-out}{RGB}{0,206,0}
\definecolor{pubsub-in}{RGB}{128,0,0}
\definecolor{controller-in}{RGB}{0,128,0}
\definecolor{table-background-one}{RGB}{194,195,194}
\definecolor{table-background-two}{RGB}{210,213,210}
\usepackage[newfloat=true]{minted}
\usepackage{mdframed}
\usepackage{fancyhdr}
\usepackage{url}
\usepackage{graphicx} % for PDF scaling
\usepackage{pdfpages}
\usepackage[author={David Runge}]{pdfcomment}
\usepackage{mathtools}
\usepackage{float}
\floatstyle{boxed}
\restylefloat{figure}
\usepackage[nottoc,numbib]{tocbibind}
\usepackage{hyperref}
\hypersetup{hidelinks,
colorlinks = false,
pdfstartview={Fit},
pdfauthor={David Runge},
pdftitle={Master's Thesis Presentation: A Networking Extension for the
SoundScape Renderer},
pdfsubject={A Networking Extension for the SoundScape Renderer},
pdfkeywords={Ambisonics, Binaural Synthesis, C++, Client-Server-Architecture,
Linux, macOS, Networking, OSC, liblo, SoundScape Renderer, Spatial Audio,
SuperCollider, Technische Universität Berlin, VBAP, WFS}
}
\usepackage{multirow}
\usepackage[authoryear,round]{natbib}
\usepackage[font=scriptsize]{caption}
% glossary
\usepackage[acronym,nonumberlist,toc,xindy]{glossaries}
\makeglossaries
\newacronym{aap}{AAP}{Ambisonics Amplitude Panning}
\newacronym{adat}{ADAT}{Alesis Digital Audio Tape}
\newacronym{alsa}{ALSA}{Advanced Linux Sound Architecture}
\newacronym{apf}{APF}{Audio Processing Framework}
\newacronym{api}{API}{Application Programming Interface}
\newacronym{asdf}{ASDF}{Audio Scene Description Format}
\newacronym{bs}{BS}{Binaural Synthesis}
\newacronym{brir}{BRIR}{Binaural Room Impulse Response}
\newacronym{brs}{BRS}{Binaural Room Synthesis}
\newacronym{cc}{CC}{Creative Commons}
\newacronym{cicm}{CICM}{Centre de recherche Informatique et Création Musicale}
\newacronym{cnmat}{CNMAT}{Center for New Music and Audio Technologies}
\newacronym{cpu}{CPU}{Central Processing Unit}
\newacronym{fdl}{FDL}{GNU Free Documentation License}
\newacronym{gpl}{GPL}{GNU General Public License}
\newacronym{gui}{GUI}{Graphical User Interface}
\newacronym{hrir}{HRIR}{Head Related Impulse Response}
\newacronym{hrtf}{HRTF}{Head Related Transfer Function}
\newacronym{iana}{IANA}{Internet Assigned Numbers Authority}
\newacronym{ide}{IDE}{Integrated Development Environment}
\newacronym{lgpl}{LGPL}{GNU Lesser General Public License}
\newacronym{lts}{LTS}{Long Term Support}
\newacronym{hoa}{HOA}{Higher Order Ambisonics}
\newacronym{ip}{IP}{Internet Protocol}
\newacronym{jack}{JACK}{JACK Audio Connection Kit}
\newacronym{madi}{MADI}{Multichannel Audio Digital Interface}
\newacronym{midi}{MIDI}{Musical Instrument Digital Interface}
\newacronym{nfc-hoa}{NFC-HOA}{Near-Field-Compensated Higher Order Ambisonics}
\newacronym{oop}{OOP}{Object-Oriented Programming}
\newacronym{os}{OS}{Operating System}
\newacronym{osc}{OSC}{Open Sound Control}
\newacronym{posix}{POSIX}{Portable Operating System Interface}
\newacronym{pubsub}{PubSub}{Publish-Subscribe message pattern}
\newacronym{pd}{Pd}{PureData}
\newacronym{raii}{RAII}{Ressource Acquisition Is Initialization}
\newacronym{ssr}{SSR}{SoundScape Renderer}
\newacronym{tcp}{TCP}{Transmission Control Protocol}
\newacronym{tu-berlin}{TU Berlin}{Technische Universität Berlin}
\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}
\newglossaryentry{ascii}{
  name={ASCII},
  description={American Standard Code for Information Interchange --- a
  character encoding standard}
}
\newglossaryentry{sclang}{
  name={sclang},
  description={Name of the SuperCollider programming language and the
  interpreter executable of the SuperCollider programming language}
}
\newglossaryentry{id}{
  name={ID},
  description={A name or number, that identifies an object},
  plural=IDs
}
\newglossaryentry{stdout}{
  name={stdout},
  description={The standard output is a stream where a program writes its
  output data to. This can be a log file or a terminal}
}
\newglossaryentry{faust}{
  name={FAUST},
  description={Functional Audio Stream is a functional programming language
  specifically designed for realtime signal processing and synthesis}
}
\newglossaryentry{quark}{
  name={Quark},
  description={Name for Classes extending the SuperCollider programming
  language, usually developed in a separate version controlled code
  repository},
  plural=Quarks
}
\newglossaryentry{supercollider}{
  name={SuperCollider},
  description={A programming language, \gls{ide} and synthesis server for
  realtime audio processing and synthesis}
}
\newglossaryentry{python}{
  name={Python},
  description={A multi-purpose, object-oriented programming language}
}
\newglossaryentry{qt4}{
  name={Qt4},
  description={Version 4 (legacy) of the cross-platform application framework
  for creating desktop applications}
}
\newglossaryentry{qt5}{
  name={Qt5},
  description={Version 5 of the cross-platform application framework for
  creating desktop applications}
}
\graphicspath{{../images//}}

\title{A Networking Extension for the SoundScape Renderer}
\institute{
  \begin{table}[!htb]
    \begin{tabular}{l l}
      \multirow{4}{*}{\includegraphics[width=0.2\textwidth]{tu-berlin-logo.pdf}} & \\
      & Technische Universität Berlin\\
      & Fakultät I - Geisteswissenschaften\\
      & Fachgebiet Audiokommunikation\\
      & Audiokommunikation und -technologie M.Sc.\\
    \end{tabular}
  \end{table}
}
\author{David Runge}
\date{05.09.2017}

\begin{document}
\frame{\titlepage}

\begin{frame}
  \frametitle{Contents}
  \tableofcontents
\end{frame}

\section{Spatial Audio Renderers}
  \begin{frame}
    \frametitle{What are they?}
    \begin{itemize}
      \item Virtual auditory environment\\
      \item Headphones and loudspeakers\\
      \item Place sources inside and outside of listening area\\
    \end{itemize}
  \end{frame}

  \subsection{Algorithms}
    \begin{frame}
      \frametitle{What do they use?}
      \begin{itemize}
        \item (Dynamic) \gls{bs}\\
        \item (Dynamic) \gls{brs}\\
        \item \gls{vbap}\\
        \item \gls{aap}\\
        \item \gls{wfs}\\
      \end{itemize}
    \end{frame}

  \subsection{Software Solutions}
    \begin{frame}
      \frametitle{What is available as free software?}
      \begin{itemize}
        \item sWONDER \citep{phdthesis:baalman2007}\\
        \item HoaLibrary \citep{website:hoalibrary}\\
        \item 3Dj \citep{mastersthesis:perezlopez2014}\\
        \item WFSCollider \citep{manual:wfscollider}\\
        \item \gls{ssr} \citep{website:ssr2016}\\
      \end{itemize}
    \end{frame}
    \begin{frame}
      \frametitle{What are they used for?}
      \begin{itemize}
        \item Scientific Research\\
        \item Virtual Reality\\
        \item Music\\
      \end{itemize}
    \end{frame}

\section{Extending the SSR}
  \begin{frame}
    \frametitle{Why extend the SSR?}
    \begin{itemize}
      \item Widespread use in scientific research\\
      \item Large set of rendering algorithms\\
      \item Still maintained\\
      \item Possible candidate for medium/ large scale \gls{wfs} systems at
        \gls{tu-berlin} and others (e.g. Wave Field Synthesis Lab at HAW
        \citep{inbook:fohl2013})\\
      \item Extending user base\\
    \end{itemize}
  \end{frame}

  \subsection{Use Cases}
    \begin{frame}
      \frametitle{Research}
      \begin{itemize}
        \item \gls{brs}: \citet{mastersthesis:ackermannandilse2015},
          \citet{mastersthesis:boehm2015} or
          \citet{mastersthesis:grigoriev2017}\\
        \item \gls{wfs}: \citet{bachelorsthesis:koslowski2013}\\
      \end{itemize}
    \end{frame}

  \subsection{Current Capabilities}
    \begin{frame}
      \frametitle{Remote Controlling}
      \begin{itemize}
        \item XML formatted string over TCP/IP socket\\
        \item \gls{osc} through \gls{pd} \citep{inproceedings:puckette1997}\\
      \end{itemize}
    \end{frame}
    \begin{frame}
      \frametitle{Interaction}
      \begin{itemize}
        \item \gls{gui}\\
        \item No direct interaction between instances\\
        \item Controlling multiple instances with \gls{pd}\\
      \end{itemize}
    \end{frame}

  \subsection{OSC Interface}
    \begin{frame}
      \frametitle{Why another interface?}
      \begin{itemize}
        \item \gls{osc} natively (using liblo \citep{website:liblo2017}): Clean
          message interface\\
        \item Inter-instance communication\\
        \item Client-Server architecture\\
        \item Controlling multiple instances with an \gls{ssr} or other
          \gls{osc} capable software\\
      \end{itemize}
    \end{frame}
    \begin{frame}
      \frametitle{Publisher/Subscriber}
      \includegraphics[scale=0.4, trim = 6mm 91mm 12mm 10mm, clip]
        {ssr-publisher-with-all-subscribers.pdf}
    \end{frame}
    \begin{frame}[fragile]
      \frametitle{\gls{osc}}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \centering
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{2cm} | p{8cm} }
          \textbf{\gls{osc} type tag} & \textbf{Type} \\
          \hline
          \texttt{i} & \mintinline{c++}{int32} \\
          \texttt{f} & \mintinline{c++}{float32} \\
          \texttt{s} & \gls{osc}-string \\
          \texttt{b} & \gls{osc}-blob \\
          \hline
          \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 \gls{ascii} character, sent as 32 bits\\
          \texttt{r} & 32 bit RGBA color\\
          \texttt{m} & 4 byte \gls{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 (type tags) for atomic data types, used in
        \gls{osc} messages and bundles \citep{website:oscv1.0}.}\\
        The first four types define the standard \gls{osc} type tags, which
        should be understood by all implementations. The remaining are
        non-standard types, that are implemented by most (e.g.\ liblo
        implements all but array and RGBA color type).
      \end{table}
    \end{frame}

  \subsection{Setups}
    \begin{frame}
      \frametitle{Client-Server, Shared Rendering}
      \includegraphics[scale=0.8, trim = 20mm 204mm 10mm 10mm, clip]
      {ssr-client-server-shared-output.pdf}
    \end{frame}
    \begin{frame}
      \frametitle{Client-Server, Shared Rendering}
      \includegraphics[scale=0.8, trim = 20mm 204mm 10mm 10mm, clip]
      {ssr-external-client-server-shared-output.pdf}
    \end{frame}
    \begin{frame}
      \frametitle{Client-Server, Separate Rendering}
      \includegraphics[scale=0.8, trim = 20mm 204mm 10mm 10mm, clip]
      {ssr-client-server-separate-output.pdf}
    \end{frame}
    \begin{frame}
      \frametitle{Client-Server, Separate Rendering}
      \includegraphics[scale=0.8, trim = 20mm 204mm 10mm 10mm, clip]
      {ssr-external-client-server-separate-output.pdf}
    \end{frame}
    \begin{frame}
      \frametitle{Clients Only}
      \includegraphics[scale=0.8, trim = 20mm 204mm 10mm 10mm, clip]
      {ssr-external-clients-only-shared-output.pdf}
    \end{frame}
    \begin{frame}
      \frametitle{Clients Only}
      \includegraphics[scale=0.8, trim = 20mm 204mm 10mm 10mm, clip]
      {ssr-external-clients-only-separate-output.pdf}
    \end{frame}


\section{OSC Messaging}
  \subsection{Message Levels}
    \begin{frame}[fragile]
      \frametitle{Message Levels}
      \mintinline{shell}{src/ssr_global.h}
      \begin{mdframed}
        \inputminted[numbers=left, firstline=54, lastline=61,
        fontsize=\footnotesize]{c++}{../../ssr/src/ssr_global.h}
      \end{mdframed}
    \end{frame}

  \subsection{Message Interface}
    \begin{frame}[fragile]
      \frametitle{Alive, Message Level, Subscribe (Server)}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \centering
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{2cm} | p{1cm} | p{3.5cm} | p{3cm} }
          \textbf{Path} & \textbf{Types} & \textbf{Description} &
          \textbf{Example}\\
          \hline
          \texttt{/alive} & & Alive notification from client (in response to
          a /poll) & \texttt{[/alive]} \\
          \texttt{/message\_level} & i & Set message level of sender &
          \texttt{[/message\_level, 1]} \\
          \texttt{/message\_level} & ssi & Set message level of a specific
          client & \texttt{[/message\_level, “127.0.0.1”,
          “50002”, 1]} \\
          \texttt{/subscribe} & F & Unsubscribe sender & \texttt{[/subscribe,
          false]} \\
          \texttt{/subscribe} & Fss & Unsubscribe specific client &
          \texttt{[/subscribe, false, “127.0.0.1”, “50002”]}\\
          \texttt{/subscribe} & T & Subscribe sender & \texttt{[/subscribe,
          true]} \\
          \texttt{/subscribe} & Ti & Subscribe sender with specific message
          level & \texttt{[/subscribe, true, 1]} \\
          \texttt{/subscribe} & Tssi & Subscribe specific client with
          specific message level & \texttt{[/subscribe, true, “127.0.0.1”,
          “50002”, 1]} \\
        \end{tabular}
        \caption{\gls{osc} messages relevant for subscribing and setting of
          message levels for clients.\\
        }
        \label{tab:ssr-osc-subscribe}
      \end{table}
    \end{frame}

    \begin{frame}
      \frametitle{Message Level, Poll (Client)}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \centering
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{2cm} | p{1cm} | p{3.5cm} | p{3cm} }
          \textbf{Path} & \textbf{Types} & \textbf{Description} &
          \textbf{Example}\\
          \hline
          \texttt{/message\_level} & i & Set message level of sender (the
          server) & \texttt{[/message\_level, 1]} \\
          \texttt{/poll} & & Poll client (continously sent), triggering
          subscribe (see Table~\ref{tab:ssr-osc-subscribe}) &
          \texttt{[/poll]} \\
        \end{tabular}
        \caption{\gls{osc} messages relevant for polling and setting of
          message levels for servers subscribed to.\\
        }
        \label{tab:ssr-osc-client-poll-message-level}
      \end{table}
    \end{frame}
    \begin{frame}[fragile]
      \frametitle{Processing, Tracker, Transport}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{2.1cm} | p{0.8cm} | p{3.5cm} | p{2.5cm} }
          \textbf{Path} & \textbf{Types} & \textbf{Description} &
          \textbf{Example}\\
          \hline
          \texttt{/processing/state} & F & Unset processing state &
          \texttt{[/processing/state, false]} \\
          \texttt{/processing/state} & T & Set processing state &
          \texttt{[/processing/state, true]} \\
          \texttt{/tracker/reset} & & Reset tracker &
          \texttt{[/tracker/reset]} \\
          \texttt{/transport/rewind} & & Rewind the \gls{jack} transport &
          \texttt{[/transport/rewind]} \\
          \texttt{/transport/seek} & s & Seek to time code in
          \gls{jack} transport & \texttt{[/transport/seek, “42:00:00”]} \\
          \texttt{/transport/state} & F & Unset \gls{jack} transport
          state & \texttt{[/transport/state, false]} \\
          \texttt{/transport/state} & T & Set \gls{jack} transport
          state & \texttt{[/transport/state, true]} \\
        \end{tabular}
        \caption{\gls{osc} messages relevant for processing, tracker and
          (\gls{jack}) transport related settings.\\
        }
        \label{tab:ssr-osc-processing-tracker-transport}
      \end{table}
    \end{frame}
    \begin{frame}
      \frametitle{Reference}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \centering
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{3.2cm} | p{0.6cm} | p{2.5cm} | p{3.3cm} }
          \textbf{Path} & \textbf{Types} & \textbf{Description} &
          \textbf{Example}\\
          \hline
          \texttt{/reference/orientation} & f & Set azimuth of reference
          point & \texttt{[/reference/orientation, -90.0]} \\
          \texttt{/reference/position} & ff & Set position of reference &
          \texttt{[/reference/position, 1.5, 2.0]} \\
          \texttt{/reference\_offset/orientation} & f & Set azimuth of
          reference offset position &
          \texttt{[/reference\_offset/orientation, -90.0]} \\
          \texttt{/reference\_offset/position} & ff & Set position of
          reference offset & \texttt{[/reference\_offset/position, 1.5,
          2.0]}\\
        \end{tabular}
        \caption{\gls{osc} messages relevant for reference management.\\
        }
        \label{tab:ssr-osc-reference}
      \end{table}
    \end{frame}
    \begin{frame}
      \frametitle{Scene}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \centering
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{3.3cm} | p{0.7cm} | p{2.5cm} | p{3.3cm} }
          \textbf{Path} & \textbf{Types} & \textbf{Description} &
          \textbf{Example} \\
          \hline
          \texttt{/scene/amplitude\_reference
          \_distance} & f & Set amplitude
          reference distance. &
          \texttt{[/scene/amplitude\_reference
          \_distance, 6.0]}\\
          \texttt{/scene/auto\_rotate\_sources} & F & Disable automatic
          rotation of sources. & \texttt{[/scene/auto\_rotate\_sources,
          false]}\\
          \texttt{/scene/auto\_rotate\_sources} & T & Enable automatic
          rotation of sources. & \texttt{[/scene/auto\_rotate\_sources,
          true]}\\
          \texttt{/scene/clear} & & Delete all sources &
          \texttt{[/scene/clear]}\\
          \texttt{/scene/decay\_exponent} & f & Set amplitude decay exponent
          in virtual space ($1/r^{exp}$). & \texttt{[/scene/decay\_exponent,
          2.0]}\\
          \texttt{/scene/load} & s & Load scene from \gls{asdf} file. &
          \texttt{[/scene/load, “example.asd”]}\\
          \texttt{/scene/master\_signal\_level} & f & Set the renderers
          signal level. & \texttt{[/scene/master\_signal\_level, -20]}\\
          \texttt{/scene/save} & s & Save scene to \gls{asdf} file. &
          \texttt{[/scene/save, “example.asd”]}\\
          \texttt{/scene/volume} & f & Set scene master volume. &
          \texttt{[/scene/volume, 0.23]}\\
        \end{tabular}
        \caption{\gls{osc} messages relevant for scene management.\\
        }
        \label{tab:ssr-osc-scene}
      \end{table}
    \end{frame}
    \begin{frame}
      \frametitle{Source I}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \centering
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{2.4cm} | p{1.0cm} | p{2.5cm} | p{3.3cm} }
          \textbf{Path} & \textbf{Types} & \textbf{Description} &
          \textbf{Example} \\
          \hline
          \texttt{/source/delete} & i & Delete source with given id &
          \texttt{[/source/delete, 1]}\\
          \texttt{/source/file\_channel} & ii & Set a source's file channel &
          \texttt{[/source/file\_channel, 1, 2]}\\
          \texttt{/source/file\_name\_ or\_port\_number} & is & Set a source's
          file name or port number &
          \texttt{[/source/file\_name\_ or\_port\_number, 1, “1”]}\\
          \texttt{/source/port\_name } & is & Set a source's \gls{jack} input
          port name & \texttt{[/source/port\_name, 1, “system:capture\_2”]}\\
          \texttt{/source/gain} & if & Set a source's gain on a linear scale
          (0.0 - inf) & \texttt{[/source/gain, 1, 0.2]}\\
          \texttt{/source/model} & is & Set a source's model &
          \texttt{[/source/model, 1, “point”]}\\
          \texttt{/source/mute} & iF & Unmute a source &
          \texttt{[/source/mute, 1, false]}\\
          \texttt{/source/mute} & iT & Mute a source &
          \texttt{[/source/mute, 1, true]}\\
          \texttt{/source/name} & is & Set a source's name &
          \texttt{[/source/name, 1, “Daisy”]}\\
          \texttt{/source/new} & i & Create a new source stub using id &
          \texttt{[/source/new, 1]}\\
          \texttt{/source/new} & sssffffTFF & Create a new source
          (auto-generated id) with name, model, port number, X-coordinate,
          Y-coordinate, orientation, gain, movability, orientation movability
          and mute status & \texttt{[/source/new, “Daisy”, “point”, “1”, 1.0,
          2.5, 90.0, 0.2, true, false, false]} \\
        \end{tabular}
        \caption{\gls{osc} messages relevant for source management.\\
        }
        \label{tab:ssr-osc-source-1}
      \end{table}
    \end{frame}
    \begin{frame}
      \frametitle{Source II}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \centering
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{2.4cm} | p{1.0cm} | p{2.5cm} | p{3.3cm} }
          \textbf{Path} & \textbf{Types} & \textbf{Description} &
          \textbf{Example} \\
          \hline
          \texttt{/source/new} & sssffffisTFF & Create a new source
          (auto-generated id) with name, model, port number, X-coordinate,
          Y-coordinate, orientation, gain, file channel, properties file,
          movability, orientation movability and mute status &
          \texttt{[/source/new, “Daisy”, “point”, “1”, 1.0, 2.5, 90.0, 0.2,
          2, “properties.xml”, true, false, false]} \\
          \texttt{/source/orientation} & if & Set a source's orientation &
          \texttt{[/source/orientation, 1, -90.0]}\\
          \texttt{/source/position} & iff & Set a source's position &
          \texttt{[/source/position, 1, 1.5, 2.0]}\\
          \texttt{/source/position\_fixed} & iF & Set a source movable &
          \texttt{[/source/position\_fixed, 1, false]}\\
          \texttt{/source/position\_fixed} & iT & Set a source immovable &
          \texttt{[/source/position\_fixed, 1, true]}\\
          \texttt{/source/properties\_file} & is & Set a source's properties
          file & \texttt{[/source/properties\_file, 1,
          “source-properties.xml”]}\\
        \end{tabular}
        \caption{\gls{osc} messages relevant for source management.\\
        }
        \label{tab:ssr-osc-source-2}
      \end{table}
    \end{frame}
    \begin{frame}
      \frametitle{Update (Server) I}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \centering
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{4.6cm} | p{0.7cm} | p{4.0cm} }
          \textbf{Path} & \textbf{Types} & \textbf{Description} \\
          \hline
          \texttt{/update/cpu\_load} & f & \gls{cpu} load changes.\\
          \texttt{/update/processing/state} & T & Processing state is set.\\
          \texttt{/update/processing/state} & F & Processing state is
          unset.\\
          \texttt{/update/reference/orientation} & f & Reference orientation
          changes.\\
          \texttt{/update/reference/position} & ff & Reference position
          changes.\\
          \texttt{/update/reference\_offset/orientation} & f & Reference
          offset orientation changes.\\
          \texttt{/update/reference\_offset/position} & ff & Reference offset
          position changes.\\
          \texttt{/update/scene/amplitude\_reference\_distance} & f &
          Amplitude reference distance changes.\\
          \texttt{/update/scene/auto\_rotate\_sources} & T & Auto rotation of
          sources is set.\\
          \texttt{/update/scene/auto\_rotate\_sources} & F & Auto rotation of
          sources is unset.\\
          \texttt{/update/scene/decay\_exponent} & f & The scene's decay
          exponent has changed.\\
          \texttt{/update/scene/master\_signal\_level} & f & Master signal
          level has changed.\\
          \texttt{/update/scene/sample\_rate} & i & Sample rate of the scene
          changed.\\
          \texttt{/update/scene/volume} & f & Volume of the scene has
          changed.\\
          \texttt{/update/source/delete} & i & A source with given id was
          deleted. \\
          \texttt{/update/source/file\_channel} & ii & A source's file
          channel was set.\\
          \texttt{/update/source/file\_name\_or\_port\_number} & is & A
          source's file name or port number was set.\\
          \texttt{/update/source/gain} & if & A source's gain was set.\\
        \end{tabular}
        \caption{\gls{osc} messages for updating information on \gls{cpu} load,
          processing, reference, scene, source, and transport of clients on a
          server.\\
        }
        \label{tab:ssr-osc-update-1}
      \end{table}
    \end{frame}
    \begin{frame}
      \frametitle{Update (Server) II}
      \begin{table}[!htb]
        \renewcommand{\arraystretch}{1.2}
        \scriptsize
        \centering
        \rowcolors{2}{table-background-one}{table-background-two}
        \begin{tabular}{ p{3.3cm} | p{0.7cm} | p{3.3cm} }
          \textbf{Path} & \textbf{Types} & \textbf{Description} \\
          \hline
          \texttt{/update/source/length} & ii & A source's length was set.\\
          \texttt{/update/source/level} & if & A source's output level has
          changed.\\
          \texttt{/update/source/model} & is & A source's model was set.\\
          \texttt{/update/source/mute} & iF & A source was unmuted.\\
          \texttt{/update/source/mute} & iT & A source was muted.\\
          \texttt{/update/source/name} & is & A source's name was set.\\
          \texttt{/update/source/orientation} & if & A source's orientation
          was set. \\
          \texttt{/update/source/new} & i & A new source with given id was
          created. \\
          \texttt{/update/source/port\_name} & is & A source's \gls{jack}
          port\_name was set. \\
          \texttt{/update/source/position} & iff & A source's position was
          set. \\
          \texttt{/update/source/position\_fixed} & iF & A source was set to
          be movable. \\
          \texttt{/update/source/position\_fixed} & iT & A source was set to
          be immovable. \\
          \texttt{/update/source/properties\_file} & is & A source's
          properties\_file was set.\\
          \texttt{/update/transport/seek} & s & \gls{jack} transport seeked
          to a timecode position.\\
          \texttt{/update/transport/state} & F & \gls{jack} transport was
          stopped.\\
          \texttt{/update/transport/state} & T & \gls{jack} transport was
          started.\\
        \end{tabular}
        \caption{\gls{osc} messages for updating information on \gls{cpu} load,
          processing, reference, scene, source, and transport of clients on a
          server.\\
        }
        \label{tab:ssr-osc-update-2}
      \end{table}
    \end{frame}

\section{Demo}
  \begin{frame}[fragile]
    \frametitle{Sensors2OSC\footnote{\href{https://sensors2.org/osc/}{https://sensors2.org/osc/}}}
    \begin{itemize}
      \item{Starting an \gls{ssr} client
        \begin{mdframed}
          \begin{minted}[fontsize=\footnotesize]{shell}
ssr-binaural -p “50002”
          \end{minted}
        \end{mdframed}}
      \item{Starting an \gls{ssr} server (with initial client)
        \begin{mdframed}
          \begin{minted}[fontsize=\footnotesize]{shell}
ssr-aap -N “server” -C “127.0.0.1:50002”
          \end{minted}
        \end{mdframed}
      }
      \item Sending \gls{osc} messages from mobile phone to \gls{supercollider}\\
      \item Evaluating and forwarding data to the \gls{ssr} server instance\\
    \end{itemize}
  \end{frame}

\section{Future Work}
  \begin{frame}
    \frametitle{Future Work}
    Code Adoption!!!\footnote{\href{https://github.com/dvzrv/ssr}{https://github.com/dvzrv/ssr}}\\
    User Manual Extension\\
    Non-Renderer\\
    Alien-Loudspeaker\\
    Status Messages\\
    Scene Transfer\\
    Assigning In- and Outputs on the Fly\\
    Interpolation of Moving Sources\\
    Dynamic Scene\\
    Network Enabled Head Tracking\\
  \end{frame}

  \begin{frame}
    \frametitle{References}
    \scriptsize
    \bibliographystyle{../help/FG_AK_English_AuthorYear.bst}
    \bibliography{../bib/ssr-networking}
  \end{frame}

  \begin{frame}
    \frametitle{Glossary/ Acronyms}
    \scriptsize
    \printglossaries
  \end{frame}

\end{document}
