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