\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?}
    Virtual auditory environment\\
    Headphones and loudspeakers\\
    Place sources inside and outside of listening area\\
  \end{frame}

  \subsection{Algorithms}
    \begin{frame}
      \frametitle{What do they use?}
      Dynamic Binaural Synthesis\\
      Dynamic Binaural Room Synthesis\\
      Vector Based Amplitude Panning\\
      Ambisonics Amplitude Panning\\
      Wave Field Synthesis\\
    \end{frame}

  \subsection{Software Solutions}
    \begin{frame}
      \frametitle{What is available as free software?}
      sWONDER\\
      HoaLibrary\\
      3Dj\\
      WFSCollider\\
      SoundScape Renderer\\
    \end{frame}
    \begin{frame}
      \frametitle{What are they used for?}
      Scientific Research\\
      Virtual Reality\\
      Music\\
    \end{frame}

\section{Extending the SSR}
  \begin{frame}
    \frametitle{Why extend the SSR?}
    Widespread use in scientific research\\
    Large set of rendering algorithms\\
    Still maintained\\
    Possible candidate for large-scale WFS systems at TU Berlin\\
    Extending user base\\
  \end{frame}

  \subsection{Use Cases}
    \begin{frame}
      \frametitle{Research}
      BRS: \citet{mastersthesis:ackermannandilse2015},
      \citet{mastersthesis:boehm2015} or \citet{mastersthesis:grigoriev2017}\\
      WFS: \citet{bachelorsthesis:koslowski2013}\\
    \end{frame}

  \subsection{Current Capabilities}
    \begin{frame}
      \frametitle{Remote Controlling}
      XML formatted string over TCP/IP socket\\
      OSC through PureData\\
    \end{frame}
    \begin{frame}
      \frametitle{Interaction}
      GUI\\
      No direct interaction between instances\\
      Controlling multiple instances with PureData\\
    \end{frame}

  \subsection{OSC Interface}
    \begin{frame}
      \frametitle{Why another interface?}
      OSC natively\\
      Inter-instance communication\\
      Client-Server architecture\\
      Controlling multiple instances with an SSR or other OSC capable
      software\\
    \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}

  \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{Message Interface}
      \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}

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

\section{Future Work}
  \begin{frame}
    \frametitle{Future Work}
    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}

\scriptsize
\bibliographystyle{../help/FG_AK_English_AuthorYear.bst}
\bibliography{../bib/ssr-networking}
\end{document}
