From 4fa53dd20389e9fedeaf772fb67b54d5faee0cfe Mon Sep 17 00:00:00 2001 From: David Runge Date: Thu, 22 Jun 2017 00:06:22 +0200 Subject: thesis/thesis.tex: Expanding subsubsections OSC, message interface, workflow examples. Adding subsection on assigning inputs on the fly to discussion. Minor fixes on line breaks. --- thesis/thesis.tex | 162 +++++++++++++++++++++++++++++++++++------------------- 1 file 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} -- cgit v1.2.3-54-g00ecf