diff options
Diffstat (limited to 'thesis')
-rw-r--r-- | thesis/thesis.tex | 128 |
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 |