summaryrefslogtreecommitdiffstats
path: root/thesis
diff options
context:
space:
mode:
Diffstat (limited to 'thesis')
-rw-r--r--thesis/thesis.tex162
1 files changed, 105 insertions, 57 deletions
diff --git a/thesis/thesis.tex b/thesis/thesis.tex
index 20ec079..b2adedd 100644
--- a/thesis/thesis.tex
+++ b/thesis/thesis.tex
@@ -438,7 +438,8 @@ parskip=never]{paper}
\caption{A diagram depicting a simplified version of the \gls{pubsub}
used within the \gls{ssr}.\\
{\color{pubsub-in}\textbf{--}} Calls from Publisher to Subscriber
- {\color{controller-in}\textbf{--}} Calls from Subscribers to Controller (Publisher)
+ {\color{controller-in}\textbf{--}} Calls from Subscribers to
+ Controller (Publisher)
}
\label{fig:ssr-publisher-with-all-subscribers}
\end{figure}
@@ -454,7 +455,8 @@ parskip=never]{paper}
Depending on the design of an application, \gls{pubsub} is not necesarily
a one-way-road. As showin in
Figure~\ref{fig:ssr-publisher-with-all-subscribers}, subscribers can also
- be able to call functions of the Publisher, if the implementation permits it.
+ be able to call functions of the Publisher, if the implementation permits
+ it.\\
In the \gls{ssr} this is possible, because each Subscriber holds a
reference to the Controller instance and is therefore able to call its
public functions.\\
@@ -528,7 +530,8 @@ parskip=never]{paper}
\end{itemize}
According to the specification, applications sending \gls{osc} packets
are considered a client and the ones receiving packets a server.
- Applications can therefore be client and server at the same time.
+ Applications can therefore be client and server at the same time.\\
+
\begin{table}[!htb]
\scriptsize
\centering
@@ -571,6 +574,14 @@ parskip=never]{paper}
\label{tab:ssr-osc-data-type-acronyms}
\end{table}
+ As shown in Table~\ref{tab:ssr-osc-data-type-acronyms}, only int32,
+ float32, \gls{osc}-string and \gls{osc}-blob are considered
+ standardized. Most of the remaining non-standard types are however
+ implemented and used by many different clients.
+ For implementing the \gls{ssr} \gls{osc} interface, described in the
+ following subsubsections, it was necessary to use the non-standard types
+ \textit{True} and \textit{False} alongside the standard-types.
+
\subsubsection{liblo}
\label{subsubsec:liblo}
Liblo \citep{website:liblo2017} is an implementation of the \gls{osc}
@@ -890,17 +901,44 @@ ssr-aap -N “server” -C “127.0.0.1:50002”
\subsubsection{Message interface}
\label{subsubsec:message_interface}
\gls{osc} offers the possibility of a hierarchical path tree, that can
- be used to group messages by type. In conjunction with messages only
- understood by client or server (or a context dependant meaning), most
- of the messages understood by the \nameref{subsec:ip-interface} could
- be implemented. Additional features, related to the server-client setup
- were integrated as well.\\
- When starting a \gls{ssr} server instance (see
- \nameref{para:server-instance}), it responds to the messages shown in
- Table~\ref{tab:ssr-osc-subscribe},
- Table~\ref{tab:ssr-osc-scene},
- Table~\ref{tab:ssr-osc-processing-tracker-transport},
- Table~\ref{tab:ssr-osc-reference} and Table~\ref{tab:ssr-osc-update}.
+ be used to group messages by type (i.e.\ context). In conjunction with
+ messages only understood by client or server (or a context dependant
+ meaning), most of the messages understood by the
+ \nameref{subsec:ip-interface} are implemented. Additional features,
+ related to server-client and client-only functionality were integrated
+ as well.\\
+ Generally it can be distinguished between \textit{direct} messages -
+ sent from a server (or an application mimicking one) to a client to
+ trigger processing (see
+ Table~\ref{tab:ssr-osc-processing-tracker-transport}), reference (see
+ Table~\ref{tab:ssr-osc-reference}), scene (see
+ Table~\ref{tab:ssr-osc-scene}), source (see
+ Table~\ref{tab:ssr-osc-source}), tracker (see
+ Table~\ref{tab:ssr-osc-processing-tracker-transport}) or transport (see
+ Table~\ref{tab:ssr-osc-processing-tracker-transport}) related
+ operations in the \gls{ssr} - and \textit{update} messages (see
+ Table~\ref{tab:ssr-osc-update}) - sent from a client to a server upon
+ successful processing an operation related to a \textit{direct}
+ message.\\
+ A special set of \textit{direct} message are the subscribe and message
+ level (see Table~\ref{tab:ssr-osc-subscribe}) and poll and message
+ level (see Table~\ref{tab:ssr-osc-client-poll-message-level}) messages.
+ The former - understood only by \gls{ssr} server instances - enable
+ clients to subscribe (with a certain message level) or subscribe other
+ clients (with a predefined message level) and set their own message
+ level or that of another client. The latter set - only understood by
+ clients - enables servers (or applications mimicking one) to poll yet
+ unsubscribed clients to have them subscribe and subscribed clients to
+ reply with an alive message. Similar to the message level message
+ understood by server instances, the one understood by clients sets the
+ message level (of the server representation in the client).\\
+
+ When starting a \gls{ssr} server instance
+ (see~\ref{para:server-instance}), it responds to the messages shown in
+ Table~\ref{tab:ssr-osc-subscribe}
+ ,~\ref{tab:ssr-osc-scene}
+ ,~\ref{tab:ssr-osc-processing-tracker-transport}
+ ,~\ref{tab:ssr-osc-reference} and~\ref{tab:ssr-osc-update}.
\begin{table}[!htb]
\scriptsize
@@ -947,7 +985,8 @@ ssr-aap -N “server” -C “127.0.0.1:50002”
\hline
\texttt{/message\_level} & i & Set message level of sender (the
server) & \texttt{[/message\_level, 1]} \\
- \texttt{/poll} & & Polls clients (continuously) to (re-)subscribe &
+ \texttt{/poll} & & Poll client (continously sent), triggering
+ subscribe (see Table~\ref{tab:ssr-osc-subscribe}) &
\texttt{[/poll]} \\
\end{tabular}
\caption{\gls{osc} messages relevant for polling and setting of
@@ -1025,9 +1064,6 @@ ssr-aap -N “server” -C “127.0.0.1:50002”
\scriptsize
\centering
\rowcolors{2}{table-background-one}{table-background-two}
- \caption*{(Data types and their acronyms are listed in
- Table~\ref{tab:ssr-osc-data-type-acronyms}.)
- }
\begin{tabular}{ p{4.5cm} | p{0.9cm} | p{2.5cm} | p{4.3cm} }
\textbf{Path} & \textbf{Types} & \textbf{Description} &
\textbf{Example} \\
@@ -1218,47 +1254,55 @@ ssr-aap -N “server” -C “127.0.0.1:50002”
simple workflows using sclang (the SuperCollider programming language)
and should therefore be \gls{os} agnostic.\\
- \begin{listing}[!htb]
- \begin{mdframed}
- \inputminted[numbers=left, firstline=3, lastline=29,
- fontsize=\footnotesize]{supercollider}{../../../../ssr-tests.scd}
- \end{mdframed}
- \caption{supercollider/ssr-workflows.scd: sclang as client
- controlling a \gls{ssr} server instance}
- \label{lst:ssr-workflow-sclang-controls-server}
- \end{listing}\\
-
- As shown in Listing~\ref{lst:ssr-workflow-sclang-controls-server}, it
- is necessary to subscribe to the server instance with a
- \textit{MessageLevel} of \textit{SERVER} or higher.\\
- After doing so, all non-update \gls{osc} messages (i.e.
- Table~\ref{tab:ssr-osc-source},~\ref{tab:ssr-osc-scene}
- ,~\ref{tab:ssr-osc-reference},~\ref{tab:ssr-osc-subscribe})
- are evaluated when sent to the \gls{ssr}.\\
- The server instance will relay all valid messages from a client with
- \textit{MessageLevel} \textit{SERVER} to all of its active clients.
+ \paragraph{Controlling a server}
+ \label{para:controlling_a_server}
- \begin{listing}[!htb]
- \begin{mdframed}
- \inputminted[numbers=left, firstline=31, lastline=61,
- fontsize=\footnotesize]{supercollider}{../../../../ssr-tests.scd}
- \end{mdframed}
- \caption{supercollider/ssr-workflows.scd: sclang mimics server,
- controlling a \gls{ssr} client instance}
- \label{lst:ssr-workflow-sclang-is-server-controls-client}
- \end{listing}\\
+ \begin{listing}[!htb]
+ \begin{mdframed}
+ \inputminted[numbers=left, firstline=3, lastline=29,
+ fontsize=\footnotesize]{supercollider}{../../ssr/supercollider/workflows.scd}
+ \end{mdframed}
+ \caption{supercollider/workflows.scd: sclang as client
+ controlling a \gls{ssr} server instance}
+ \label{lst:ssr-workflow-sclang-controls-server}
+ \end{listing}\\
+
+ As shown in Listing~\ref{lst:ssr-workflow-sclang-controls-server}, it
+ is necessary to subscribe to the server instance with a
+ \textit{MessageLevel} of \textit{SERVER} or higher.\\
+ After doing so, also all \textit{direct} \gls{osc} messages (i.e.
+ Table~\ref{tab:ssr-osc-source},~\ref{tab:ssr-osc-scene}
+ ,~\ref{tab:ssr-osc-reference},~\ref{tab:ssr-osc-subscribe}) are
+ evaluated when sent to the \gls{ssr}.\\
+ The server instance will relay valid messages to all of its active
+ clients.
+
+ \paragraph{Server mimicry}
+ \label{para:server_mimicry}
- When mimicking a \gls{ssr} server instance in a server-less setup (e.g.
- Figure~\ref{fig:ssr-external-clients-only-shared-output} or
- Figure~\ref{fig:ssr-external-clients-only-separate-output}), it is
- necessary to send a poll message to the client instance to make it
- subscribe (which sets the server's address and port up internally).\\
- Afterwards again all non-update \gls{osc} messages are accepted by the
- client instance, when coming from the server address and port.
- An interesting concept here is to (temporarily) set a different
- \textit{MessageLevel} for the application acting as a server (e.g.\ to
- \textit{GUI\_SERVER}, to receive \gls{gui} relevant messages, as
- explained in \nameref{subsubsec:message_interface}.\\
+ \begin{listing}[!htb]
+ \begin{mdframed}
+ \inputminted[numbers=left, firstline=31, lastline=61,
+ fontsize=\footnotesize]{supercollider}{../../ssr/supercollider/workflows.scd}
+ \end{mdframed}
+ \caption{supercollider/workflows.scd: sclang mimics server,
+ controlling a \gls{ssr} client instance}
+ \label{lst:ssr-workflow-sclang-is-server-controls-client}
+ \end{listing}\\
+
+ When mimicking a \gls{ssr} server instance in a client-only setup
+ (e.g.\ Figure~\ref{fig:ssr-external-clients-only-shared-output} or
+ Figure~\ref{fig:ssr-external-clients-only-separate-output}), it is
+ necessary to send a poll message to the client instance to make it
+ subscribe (which sets the server's address and port up internally).\\
+ Afterwards - similar to the example in the paragraph
+ \nameref{para:clients_only} - all \textit{direct} \gls{osc} messages
+ are accepted by the client instance, when coming from the server
+ address and port.\\
+ An interesting concept here is to (temporarily) set a different
+ \textit{MessageLevel} for the application acting as a server (e.g.\
+ to \textit{GUI\_SERVER}), to receive \gls{gui} relevant messages, as
+ explained in \nameref{subsubsec:message_interface}.\\
\cleardoublepage
\section{Discussion}
@@ -1303,6 +1347,10 @@ ssr-aap -N “server” -C “127.0.0.1:50002”
\cleardoublepage
\subsection{Implementing AlienLoudspeaker}
\label{subsec:implementing_alienloudspeaker}
+
+ \subsection{Assigning inputs on the fly}
+ \label{subsec:assigning_inputs_on_the_fly}
+
\subsection{Interpolation of moving sources}
\label{subsec:interpolation_of_moving_sources}