diff options
-rw-r--r-- | presentation/presentation.tex | 480 |
1 files changed, 426 insertions, 54 deletions
diff --git a/presentation/presentation.tex b/presentation/presentation.tex index 36fd3f7..9ce19fa 100644 --- a/presentation/presentation.tex +++ b/presentation/presentation.tex @@ -167,82 +167,146 @@ SuperCollider, Technische Universität Berlin, VBAP, WFS} \section{Spatial Audio Renderers} \begin{frame} \frametitle{What are they?} - Virtual auditory environment\\ - Headphones and loudspeakers\\ - Place sources inside and outside of listening area\\ + \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?} - Dynamic Binaural Synthesis\\ - Dynamic Binaural Room Synthesis\\ - Vector Based Amplitude Panning\\ - Ambisonics Amplitude Panning\\ - Wave Field Synthesis\\ + \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?} - sWONDER\\ - HoaLibrary\\ - 3Dj\\ - WFSCollider\\ - SoundScape Renderer\\ + \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?} - Scientific Research\\ - Virtual Reality\\ - Music\\ + \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?} - 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\\ + \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}\\ + \item Extending user base\\ + \end{itemize} \end{frame} \subsection{Use Cases} \begin{frame} \frametitle{Research} - BRS: \citet{mastersthesis:ackermannandilse2015}, - \citet{mastersthesis:boehm2015} or \citet{mastersthesis:grigoriev2017}\\ - WFS: \citet{bachelorsthesis:koslowski2013}\\ + \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} - XML formatted string over TCP/IP socket\\ - OSC through PureData\\ + \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} - GUI\\ - No direct interaction between instances\\ - Controlling multiple instances with PureData\\ + \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?} - OSC natively\\ - Inter-instance communication\\ - Client-Server architecture\\ - Controlling multiple instances with an SSR or other OSC capable - software\\ + \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} @@ -290,7 +354,7 @@ SuperCollider, Technische Universität Berlin, VBAP, WFS} \subsection{Message Interface} \begin{frame}[fragile] - \frametitle{Message Interface} + \frametitle{Alive, Message Level, Subscribe (Server)} \begin{table}[!htb] \renewcommand{\arraystretch}{1.2} \scriptsize @@ -326,31 +390,329 @@ SuperCollider, Technische Universität Berlin, VBAP, WFS} \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,allowframebreaks] + \begin{frame}[fragile] \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} + \begin{itemize} + \item{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} + \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} + \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!!!\\ + User Manual Extension\\ Non-Renderer\\ Alien-Loudspeaker\\ Status Messages\\ @@ -361,7 +723,17 @@ ssr-aap -N “server” -C “127.0.0.1:50002” Network Enabled Head Tracking\\ \end{frame} -\scriptsize -\bibliographystyle{../help/FG_AK_English_AuthorYear.bst} -\bibliography{../bib/ssr-networking} + \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} |