summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--thesis/thesis.tex159
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}