summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--thesis/thesis.tex128
1 files changed, 110 insertions, 18 deletions
diff --git a/thesis/thesis.tex b/thesis/thesis.tex
index 7b02882..2245348 100644
--- a/thesis/thesis.tex
+++ b/thesis/thesis.tex
@@ -1820,12 +1820,6 @@ ssr-aap -N “server” -C “127.0.0.1:50002”
The implementation could be desirable for massive multi-channel setups
and simply switching between several (local or network-attached)
\gls{ssr} instances alike.\\
- The functionalities of the \gls{ssr}'s \gls{gui}, its several spatial
- audio renderers and \gls{osc} interface (amongst other parts) are
- determined by its \gls{pubsub}. For the \gls{gui} part of the software
- to display information about a networked setup, or even switch between
- several of them, it is therefore not needed or even desirable for that
- instance to render audio at all.\\
\begin{figure}[!htb]
\centering
@@ -1844,6 +1838,13 @@ ssr-aap -N “server” -C “127.0.0.1:50002”
\label{fig:ssr-client-server-clients-only-shared-output}
\end{figure}
+ The functionalities of the \gls{ssr}'s \gls{gui}, its several spatial
+ audio renderers and \gls{osc} interface (amongst other parts) are
+ determined by its \gls{pubsub}. For the \gls{gui} part of the software
+ to display information about a networked setup, or even switch between
+ several of them, it is therefore not needed or even desirable for that
+ instance to render audio at all. An instance with such features could
+ be imagined as a \gls{gui} only frontend.\\
Figure~\ref{fig:ssr-client-server-clients-only-shared-output}
illustrates a scenario, in which a server instance is used to control a
set of \textit{n} clients, that collectively render audio (e.g.\ on a
@@ -1852,7 +1853,9 @@ ssr-aap -N “server” -C “127.0.0.1:50002”
outputs) and might not even need any audio input.\\
The server in this example could also be a client, subscribed to a
server instance in a cluster similar to the one in
- Figure~\ref{fig:ssr-external-client-server-shared-output}.
+ Figure~\ref{fig:ssr-external-client-server-shared-output} (i.e.\ as the
+ \gls{osc} capable application controlling the server instance by using
+ a \mintinline{c++}{MessageLevel} of \mintinline{c++}{SERVER} or higher).
\begin{figure}[!htb]
\centering
@@ -1873,31 +1876,120 @@ ssr-aap -N “server” -C “127.0.0.1:50002”
The example shown in
Figure~\ref{fig:ssr-client-server-clients-only-separate-output} is
- similar to the aforementioned, with the difference, that its \textit{n}
+ similar to the one before, with the difference, that its \textit{n}
clients render audio on separate systems.\\
- This could be a set of
-
+ Said client instances could be a cluster of headphone renderers, such
+ as \gls{brs} renderers, or loudspeaker renderers, such as \gls{vbap} or
+ \gls{wfs}, or even a combination of both types.\\
+ Analogous to the example given before, the \gls{gui} only frontend
+ could also act as a client with a \mintinline{c++}{MessageLevel} of
+ \mintinline{c++}{SERVER} or higher (i.e.\ again being the \gls{osc}
+ capable application), controlling the server in a setup, similar to the
+ one shown in
+ Figure~\ref{fig:ssr-external-client-server-separate-output}.\\
+ For the aforementioned use-cases to work, the \gls{gui} of the
+ \gls{ssr} has to be extended to show the networking specific
+ information and be able to use the \gls{osc} interface through the
+ \gls{pubsub} interface (which itself would probably have to be extended
+ as well). Additionally a renderer should be conceived, that does not
+ render audio, but still uses the \gls{pubsub}, so the internal
+ functionality of the \gls{ssr} can be reused, leading to a relatively
+ light-weight \gls{ssr} \gls{gui} variant, only for controlling
+ setups.\\
+ As there are many edge cases to networked setups, it seems still
+ unclear, whether audio inputs would actually be needed for such a
+ renderer.
\cleardoublepage
- \subsubsection{Implementing AlienLoudspeaker}
- \label{subsubsec:implementing_alienloudspeaker}
+ \subsubsection{Alien loudspeaker}
+ \label{subsubsec:alien_loudspeaker}
+ For the examples given in
+ Figure~\ref{fig:ssr-client-server-shared-output}
+ ,~\ref{fig:ssr-client-server-clients-only-shared-output}
+ ,~\ref{fig:ssr-external-clients-only-shared-output}
+ and~\ref{fig:ssr-external-client-server-shared-output}, which
+ facilitate a set of \textit{n} clients (server instances are counted as
+ clients for the point made, where applicable), used for rendering in a
+ medium or large scale loudspeaker based setup, an additional type of
+ loudspeaker should be conceived and implemented in the different
+ renderers.\\
- \subsubsection{Implementing automatic client discarding}
- \label{subsubsec:implementing_automatic_client_discarding}
+ \begin{listing}[!htb]
+ \begin{mdframed}
+ \inputminted[numbers=left, firstline=44, lastline=51,
+ fontsize=\footnotesize]{c++}{../../ssr/src/loudspeaker.h}
+ \end{mdframed}
+ \caption{src/loudspeaker.h: \mintinline{c++}{enum model_t}}
+ \label{lst:loudspeaker.h}
+ \end{listing}\\
+
+ In the setups, where rendering takes place collectively, each client
+ instance currently is reproducing the complete reproduction setup. This
+ means, that for a reproduction setup with several hundred loudspeakers,
+ each client creates exactly that amount of \gls{jack} outputs each,
+ although it would only be responsible for discretely rendering audio on
+ a subset of them.\\
+ To cope with this edge case, the current loudspeaker renderers would
+ have to be extended to be able to distinguish between the loudspeakers
+ of the current and that of other instances. This would enable them to
+ create \gls{jack} outputs in the amount of the loudspeakers they are
+ rendering audio for and reduce the overall processing usage.\\
+ In Listing~\ref{lst:loudspeaker.h} the \mintinline{c++}{enum model_t},
+ defining the loudspeaker types available to the \gls{ssr}, is extended
+ to facilitate the new model type \mintinline{c++}{alien}, which could
+ be used internally by the renderers to identify loudspeakers, not to
+ render on.\\
+
+ \begin{listing}[!htb]
+ \begin{mdframed}
+ \inputminted[numbers=left, firstline=44, lastline=62,
+ fontsize=\footnotesize, breaklines]{xml}{../../ssr/data/asdf.xsd}
+ \inputminted[numbers=left, firstline=250, lastline=264,
+ fontsize=\footnotesize]{xml}{../../ssr/data/asdf.xsd}
+ \inputminted[numbers=left, firstline=314, lastline=318,
+ fontsize=\footnotesize, breaklines]{xml}{../../ssr/data/asdf.xsd}
+ \inputminted[numbers=left, firstline=361, lastline=364,
+ fontsize=\footnotesize, breaklines]{xml}{../../ssr/data/asdf.xsd}
+ \inputminted[numbers=left, firstline=186, lastline=186,
+ fontsize=\footnotesize]{xml}{../../ssr/data/asdf.xsd}
+ \end{mdframed}
+ \caption{data/asdf.xsd: Reproduction setup, loudspeaker, circular
+ array and linear array definition in \gls{asdf} extended by a
+ \textit{hostname} attribute}
+ \label{lst:asdf.xsd}
+ \end{listing}\\
+
+ Already when defining a reproduction setup for the \gls{ssr},
+ host-specific loudspeakers have to be taken into account.
+ Listing~\ref{lst:asdf.xsd} shows an attempt at providing a unique
+ attribute for each part of the setup, that is referencing a loudspeaker
+ - the hostname or \gls{ip} address of the host - by extending the
+ \gls{asdf}.\\
+ More work has to be put into implementing this feature, or rather
+ improvement however, as it also requires tests in medium and large
+ scale setups, to ensure a discrete rendering, as if only using one
+ host.
+
+ \subsubsection{Automatic client discarding}
+ \label{subsubsec:automatic_client_discarding}
\subsubsection{Status messages}
\label{subsubsec:status_messages}
- \subsubsection{Assigning inputs on the fly}
- \label{subsubsec:assigning_inputs_on_the_fly}
+ \subsubsection{Scene transfer}
+ \label{subsubsec:scene_transfer}
+
+ \subsubsection{Assigning in- and outputs on the fly}
+ \label{subsubsec:assigning_in_and_outputs_on_the_fly}
\subsubsection{Interpolation of moving sources}
\label{subsubsec:interpolation_of_moving_sources}
- \subsubsection{Dynamic scores}
- \label{subsubsec:dynamic_scores}
+ \subsubsection{Dynamic scene}
+ \label{subsubsec:dynamic_scene}
+ \cleardoublepage
\pagestyle{empty}
\cleardoublepage
\appendix