diff options
Diffstat (limited to 'thesis/thesis.tex')
-rw-r--r-- | thesis/thesis.tex | 159 |
1 files changed, 152 insertions, 7 deletions
diff --git a/thesis/thesis.tex b/thesis/thesis.tex index 8e7f0c1..1d509fc 100644 --- a/thesis/thesis.tex +++ b/thesis/thesis.tex @@ -26,7 +26,6 @@ \definecolor{audio-in}{RGB}{255,0,0} \definecolor{audio-out}{RGB}{0,206,0} -%\usepackage{color} \usepackage{hyperref} \hypersetup{hidelinks, colorlinks = false} \usepackage[font=scriptsize]{caption} @@ -35,13 +34,18 @@ % glossary \usepackage[acronym,nonumberlist,toc]{glossaries} \newacronym{bs}{BS}{Binaural Synthesis} +\newacronym{brs}{BRS}{Binaural Room Synthesis} +\newacronym{gpl}{GPL}{GNU General Public License} +\newacronym{lgpl}{LGPL}{GNU Lesser General Public License} \newacronym{hoa}{HOA}{Higher Order Ambisonics} \newacronym{ip}{IP}{Internet Protocol} \newacronym{jack}{JACK}{JACK Audio Connection Kit} \newacronym{oop}{OOP}{Object-oriented Programming} \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{vbap}{VBAP}{Vector Based Amplitude Panning} @@ -150,9 +154,9 @@ environments, with varying stages of feature richness.\\ The proposed work will focus on one of them and its extension towards \gls{wfs} on large scale systems. - \subsubsection{\gls{hoa} and \gls{vbap}} + \subsubsection{Higher order ambisonics and vector based amplitude panning} \label{subsubsec:hoaandvbap} - \subsubsection{\gls{bs}} + \subsubsection{Binaural (Room) Synthesis} \label{subsubsec:binaural} \subsection{WONDER} @@ -306,7 +310,7 @@ call the publisher functionality in Controller, which in turn will send out messages to all of its subscribers. - \subsection{\gls{ip} interface} + \subsection{IP interface} \label{subsec:ip-interface} The \gls{ssr} from early on incorporated a network interface, that accepts specially terminated \gls{xml}-formatted strings over a \gls{tcp} @@ -339,10 +343,41 @@ \cleardoublepage \section{Results} \label{sec:results} - \subsection{\gls{osc} interface} + \subsection{Open Sound Control interface} \label{subsec:osc-interface} \subsubsection{liblo} \label{subsubsec:liblo} + Liblo \citep{website:liblo2017} is an implementation of the \gls{osc} + protocol for \gls{posix} systems. It was initially developed by Steve + Harris and is now actively maintained by Stephen Sinclair.\\ + The library, written in C, offers a C++ abstraction layer and is + released under the \gls{lgpl} v2.1 or greater. Additionally there are + wrappers for the Perl and Python programming languages.\\ + Due to its long standing availability and usage in many small and + large-scale software projects, alongside its fairly straight forward + implementability, it was chosen as the candidate for establishing a + \gls{osc} interface for the \gls{ssr}.\\ + At the time of writing liblo's lastet stable release (0.28) was issued + on 27th January 2014. Many changes and improvements have been applied + to the codebase since then. One of them is the implementation of a + ServerThread for the C++ abstraction layer, which runs a Server object + on a separate thread automatically.\\ + In programming, threads are a way to implement simultaneous and/ or + asynchroneous execution of code. The liblo Server class, at the core of + the C++ side of the library, is responsible for assigning a network + port to listen to for incoming messages, listening for messages, + executing code on their arrival (callback handling) and sending + messages to clients. As most applications, that use liblo, use + \gls{osc} only as a messaging system, it usually means, that the + application itself is not single-purpose and is busy computing + something else most of the time. Therefore it makes sense to run a + Server object on a separate background thread, to not interfere with + the executional flow of the rest of the program.\\ + The ServerThread class is able to free its ressources upon going ot of + scope, known as \gls{raii}. For this reason, the latest development + version instead of the current stable version of liblo was chosen for + the implementation. + \subsubsection{Client-Server setup} \label{subsubsec:client_server_setup} \begin{figure}[!htb] @@ -360,7 +395,84 @@ } \label{fig:ssr-client-server-shared-output} \end{figure} - + \begin{figure}[!htb] + \centering + \includegraphics[scale=1.0, trim = 20mm 204mm 10mm 10mm, clip] + {ssr-client-server-separate-output.pdf} + \caption{A diagram displaying a \gls{ssr} client/server setup, in + which the server and the clients render audio to separate outputs + (e.g.\ multiple \gls{bs} renderers). The server instance is not + controlled via \gls{osc}, but controls its clients through it.\\ + {\color{osc-in}\textbf{--}} \gls{osc} input + {\color{osc-out}\textbf{--}} \gls{osc} output + {\color{audio-in}\textbf{--}} Audio input + {\color{audio-out}\textbf{--}} Audio output + } + \label{fig:ssr-client-server-separate-output} + \end{figure} + \begin{figure}[!htb] + \centering + \includegraphics[scale=1.0, trim = 20mm 204mm 10mm 10mm, clip] + {ssr-external-client-server-shared-output.pdf} + \caption{A diagram displaying a \gls{ssr} client/server setup, in + which the server and the clients render audio collectively (e.g. + \gls{wfs}). The server instance is controlled by an \gls{osc} + capable application (acting as another client) and controls its + clients through \gls{osc} as well.\\ + {\color{osc-in}\textbf{--}} \gls{osc} input + {\color{osc-out}\textbf{--}} \gls{osc} output + {\color{audio-in}\textbf{--}} Audio input + {\color{audio-out}\textbf{--}} Audio output + } + \label{fig:ssr-external-client-server-shared-output} + \end{figure} + \begin{figure}[!htb] + \centering + \includegraphics[scale=1.0, trim = 20mm 204mm 10mm 10mm, clip] + {ssr-external-client-server-separate-output.pdf} + \caption{A diagram displaying a \gls{ssr} client/server setup, in + which the server and the clients render audio separately (e.g.\ + multiple \gls{bs} renderers). The server instance is controlled by + an \gls{osc} capable application (acting as another client) and + controls its clients through \gls{osc} as well.\\ + {\color{osc-in}\textbf{--}} \gls{osc} input + {\color{osc-out}\textbf{--}} \gls{osc} output + {\color{audio-in}\textbf{--}} Audio input + {\color{audio-out}\textbf{--}} Audio output + } + \label{fig:ssr-external-client-server-separate-output} + \end{figure} + \begin{figure}[!htb] + \centering + \includegraphics[scale=1.0, trim = 20mm 204mm 10mm 10mm, clip] + {ssr-external-clients-only-separate-output.pdf} + \caption{A diagram displaying a \gls{ssr} client cluster setup, in + which a set of clients render audio separately (e.g.\ multiple + \gls{bs} renderers). An \gls{osc} capable application acts as a + \gls{ssr} server instance and controls the clients.\\ + {\color{osc-in}\textbf{--}} \gls{osc} input + {\color{osc-out}\textbf{--}} \gls{osc} output + {\color{audio-in}\textbf{--}} Audio input + {\color{audio-out}\textbf{--}} Audio output + } + \label{fig:ssr-external-clients-only-separate-output} + \end{figure} + \begin{figure}[!htb] + \centering + \includegraphics[scale=1.0, trim = 20mm 204mm 10mm 10mm, clip] + {ssr-external-clients-only-shared-output.pdf} + \caption{A diagram displaying a \gls{ssr} client cluster setup, in + which a set of clients render audio collectively (e.g.\ medium or + large-scale \gls{wfs} setup). An \gls{osc} capable application acts + as a \gls{ssr} server instance and controls the clients.\\ + {\color{osc-in}\textbf{--}} \gls{osc} input + {\color{osc-out}\textbf{--}} \gls{osc} output + {\color{audio-in}\textbf{--}} Audio input + {\color{audio-out}\textbf{--}} Audio output + } + \label{fig:ssr-external-clients-only-shared-output} + \end{figure} + \cleardoublepage \subsubsection{Layered clients} \label{subsubsec:layered_clients} \subsubsection{Message interface} @@ -370,8 +482,42 @@ \label{sec:discussion} \paragraph{Stress testing the \gls{osc} interface} \label{par:stress_testing_the_osc_interface} + \cleardoublepage \paragraph{Implementing a NullRenderer} \label{par:implementing_a_nullrenderer} + \begin{figure}[!htb] + \centering + \includegraphics[scale=1.0, trim = 20mm 204mm 10mm 10mm, clip] + {ssr-client-server-clients-only-shared-output.pdf} + \caption{A diagram displaying a \gls{ssr} client/server setup, in which + only the clients render audio collectively (e.g.\ medium or + large-scale \gls{wfs}). The server instance is not controlled via + \gls{osc}, but controls its clients through it. Additionally its + rendering engine does not have any outputs.\\ + {\color{osc-in}\textbf{--}} \gls{osc} input + {\color{osc-out}\textbf{--}} \gls{osc} output + {\color{audio-in}\textbf{--}} Audio input + {\color{audio-out}\textbf{--}} Audio output + } + \label{fig:ssr-client-server-clients-only-shared-output} + \end{figure} + \begin{figure}[!htb] + \centering + \includegraphics[scale=1.0, trim = 20mm 204mm 10mm 10mm, clip] + {ssr-client-server-clients-only-separate-output.pdf} + \caption{A diagram displaying a \gls{ssr} client/server setup, in + which only the clients render audio to separate outputs (e.g.\ + multiple \glspl{bs} renderers). The server instance is not controlled + via \gls{osc}, but controls its clients through it. Additionally its + rendering engine does not have any outputs.\\ + {\color{osc-in}\textbf{--}} \gls{osc} input + {\color{osc-out}\textbf{--}} \gls{osc} output + {\color{audio-in}\textbf{--}} Audio input + {\color{audio-out}\textbf{--}} Audio output + } + \label{fig:ssr-client-server-clients-only-separate-output} + \end{figure} + \cleardoublepage \paragraph{Implementing AlienLoudspeaker} \label{par:implementing_alienloudspeaker} \paragraph{Interpolation of moving sources} @@ -386,7 +532,6 @@ \listoftables \cleardoublepage \printindex - \glsaddall \printglossaries \cleardoublepage \bibliographystyle{plainnat} |