\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}