summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--thesis/thesis.tex264
1 files changed, 165 insertions, 99 deletions
diff --git a/thesis/thesis.tex b/thesis/thesis.tex
index 8e8d25c..9cb0d3e 100644
--- a/thesis/thesis.tex
+++ b/thesis/thesis.tex
@@ -54,6 +54,7 @@
\newacronym{cc}{CC}{Creative Commons}
\newacronym{fdl}{FDL}{GNU Free Documentation License}
\newacronym{gpl}{GPL}{GNU General Public License}
+\newacronym{gui}{GUI}{Graphical user interface}
\newacronym{lgpl}{LGPL}{GNU Lesser General Public License}
\newacronym{lts}{LTS}{Long Term Support}
\newacronym{hoa}{HOA}{Higher Order Ambisonics}
@@ -212,7 +213,7 @@
on which speaker.\\
It uses \gls{osc} for messaging between its parts and for
setting its controls. Apart from that, it can be controlled through a
- Graphical User Interface (GUI), that was specifically designed for it.
+ \gls{gui}, that was specifically designed for it.
Unfortunately sWONDER has not been actively maintained for several years,
has a complex setup chain and many bugs, that are not likely to get fixed
any time soon.
@@ -231,7 +232,7 @@
doing so, though: Whereas with sWONDER all audio streams are distributed
to each node, WFSCollider usually uses the audio files to be played on
all machines simultaneously and synchronizes between them.\\
- It has a feature-rich GUI in the ``many window'' style, making available
+ It has a feature-rich \gls{gui} in the \textit{many window} style, making available
time lines and movement of sources through facilitating what the sclang
(SuperCollider programming language) has to offer.\\
As WFSCollider basically is SuperCollider plus extra features, it is also
@@ -248,7 +249,7 @@
MacOSX, is a multi-purpose spatial audio renderer, as it is not only
capable of \gls{bs} and \gls{wfs}, but also \gls{hoa}
and \gls{vbap}.\\
- It can be used with a GUI or headless (without one), depicting the
+ It can be used with a \gls{gui} or headless (without one), depicting the
virtual sources, their volumes and positions, alongside which speakers
are currently used for rendering a selected source.
\gls{ssr} uses TCP/IP sockets for communication and is therefore not directly
@@ -564,104 +565,169 @@
version, instead of the current stable version of liblo was chosen for
the implementation.
- \subsubsection{Client-Server setup}
- \label{subsubsec:client_server_setup}
+ \subsubsection{Setups}
+ \label{subsubsec:setups}
+ The \gls{ssr} offers the possibility for many different \gls{osc}
+ enabled client-server and client-only setups. They will be explained in
+ the following paragraphs.\\
+ All examples provide audio input via a \gls{jack} client, which can be
+ local (on each client's or server's host computer) or provided through
+ external audio inputs from another host computer (e.g.\ through
+ \gls{adat} orj \gls{madi}). This however is not mandatory, as the
+ \gls{ssr} is capable of playing back audio files directly.\\
+ The differences between server and client messaging is further
+ elaborated upon in \textbf{\nameref{subsubsec:message_interface}}.
+
+ \paragraph{Client-Server, shared rendering}
+ \label{para:client_server_shared_rendering}
+ In Figure~\ref{fig:ssr-client-server-shared-output}, the setup shows
+ \textit{1} to \textit{n} client instances, controlled by a server
+ instance. All instances are receiving audio from an external
+ \gls{jack} client or from reading local files. Collectively, the
+ \textit{n} clients and the server are rendering audio on a shared
+ output system (e.g. \gls{wfs} or \gls{hoa}).\\
+ The server instance is controlled through its \gls{gui}, sends out
+ \gls{osc} messages to all \textit{n} clients and receives their
+ updated information (again through \gls{osc}).
+ \begin{figure}[!htb]
+ \centering
+ \includegraphics[scale=1.0, trim = 20mm 204mm 10mm 10mm, clip]
+ {ssr-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 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-shared-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}
+ The setup shown in
+ Figure~\ref{fig:ssr-external-client-server-shared-output} is similar
+ to the previous one, with the exception, that the server instance is
+ controlled by an external \gls{osc} capable application. This way,
+ the server instance can also be run headless (without a \gls{gui}).\\
+ The set of \textit{n} clients report back to the server instance,
+ which in turn reports back to the \gls{osc} enabled application
+ (acting as another client).
+ \cleardoublepage
+ \paragraph{Client-Server, separate rendering}
+ \label{para:client_server_separate_rendering}
+ As shown in Figure~\ref{fig:ssr-client-server-separate-output}, it is
+ possible to have a setup, in which, similar to the one described in
+ Figure~\ref{fig:ssr-client-server-shared-output}, server and
+ \textit{n} clients render the same sources, but on separate output
+ systems (e.g.\ several \gls{bs}/\gls{brs} renderers or even a mixture
+ of a \gls{wfs}/\gls{hoa} system and several \gls{bs}/\gls{brs}
+ renderers).\\
+
+ \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}
+
+ Figure~\ref{fig:ssr-external-client-server-separate-output} is an
+ example of a similar setup, but again using an external \gls{osc}
+ capable application to control the server instance.\\
+ \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}
+ \cleardoublepage
+
+ \paragraph{Clients only}
+ \label{para:client_server_separate_rendering}
+ Using the new \gls{osc} interface, it is also possible to have
+ client-only setups, in which an \gls{osc} capable application mimics
+ a \gls{ssr} server. This way a set of \textit{n} clients can
+ collectively (see
+ Figure~\ref{fig:ssr-external-clients-only-shared-output}) or
+ separately (see
+ Figure~\ref{fig:ssr-external-clients-only-separate-output}) render
+ audio, without the specific need of a \gls{ssr} server instance
+ controlling them. The clients send their update information back to
+ the controlling application.\\
+ Much of the functionality implemented in the server-side of the
+ \gls{osc} interface however has to be reapplied to the controlling
+ software and its behavior, when dealing with \gls{ssr} clients.
+
+ \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}
+
+ \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-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 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-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 levels}
+ \label{subsubsec:message_levels}
+
\subsubsection{Message interface}
\label{subsubsec:message_interface}
\gls{osc} offers the possibility of a hierarchical path tree, that can be used to group messages