From 666421310755a6dfc881b369abb046c89d284eed Mon Sep 17 00:00:00 2001 From: David Runge Date: Fri, 16 Jun 2017 16:17:07 +0200 Subject: thesis/thesis.tex: Moving all ssr setups to separate paragraphs. Renaming subsubsection layered clients to message levels. Adding acronym for GUI. --- thesis/thesis.tex | 264 ++++++++++++++++++++++++++++++++++-------------------- 1 file 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 -- cgit v1.2.3-70-g09d2