summaryrefslogtreecommitdiffstats
path: root/expose
diff options
context:
space:
mode:
Diffstat (limited to 'expose')
-rw-r--r--expose/bib/ssr-networking.bib98
-rw-r--r--expose/expose.pdfbin0 -> 161854 bytes
-rw-r--r--expose/expose.tex265
-rw-r--r--expose/images/ssr-networking.pdfbin0 -> 7212 bytes
-rw-r--r--expose/images/ssr-networking.svg530
-rw-r--r--expose/input/abstract.tex3
-rw-r--r--expose/input/introduction.tex2
7 files changed, 898 insertions, 0 deletions
diff --git a/expose/bib/ssr-networking.bib b/expose/bib/ssr-networking.bib
new file mode 100644
index 0000000..0ebf2b4
--- /dev/null
+++ b/expose/bib/ssr-networking.bib
@@ -0,0 +1,98 @@
+@phdthesis{ baalman2007,
+ title = "On wave field synthesis and electro-acoustic music",
+ author = "Marije A.J. Baalman",
+ year = "2007",
+ month = "Dec",
+ publisher = "Technische Universität Berlin",
+ volume = "1"}
+
+@inproceedings{ baalmanetal2007,
+ title = "Renewed architecture of the sWONDER software for Wave Field Synthesis on large scale systems",
+ author = "Marije A.J. Baalman and Torben Hohn and Simon Schampijer and Thilo Koch",
+ year = "2007",
+ month = "May",
+ school = "Technische Universität Berlin",
+ publisher = "Linux Audio Conference",
+ volume = "1"}
+
+@mastersthesis{ goltz2010,
+ title = "Planung und Konfiguration eines Labors zur Wellenfeldsynthese",
+ author = "Florian Goltz",
+ year = "2010",
+ month = "Aug",
+ publisher = "Technische Universität Berlin",
+ volume = "1"}
+
+@conference{ ahrensetal2008,
+ title = "Analysis and Improvement of Pre-equalization in 2.5-Dimensional Wave Field Synthesis",
+ author = "Sascha Spors, Jens Ahrens",
+ year = "2010",
+ month = "May",
+ publisher = "Audio Engineering Society Inc.",
+ volume = "1"}
+
+@conference{ ahrensetal2008,
+ title = "The Theory of Wave Field Synthesis Revisited",
+ author = "Sascha Spors, Rudolf Rabenstein, Jens Ahrens",
+ year = "2008",
+ month = "May",
+ publisher = "Audio Engineering Society Inc.",
+ volume = "1"}
+
+@phdthesis{ melchior2011,
+ title = "Investigations on spatial sound design based on measured room impulse responses",
+ author = "Frank Melchior",
+ note = "Spatial Sound Design",
+ year = "2011",
+ month = "Jun",
+ publisher = "Technische Universiteit Delft",
+ volume = "1"}
+
+@misc{ website:jackaudio2016,
+ title = "JACK Audio Connection Kit",
+ author = "Paul Davis",
+ year = "2016",
+ month = "May",
+ url = "http://jackaudio.org/"}
+
+@misc{ website:swonder2016,
+ title = "sWONDER",
+ author = "Marije Baalman",
+ year = "2016",
+ month = "May",
+ url = "https://sourceforge.net/projects/swonder/"}
+
+@misc{ website:wfscollider2016,
+ title = "WFSCollider on Github",
+ author = "Game Of Life Foundation",
+ year = "2016",
+ month = "May",
+ url = "https://github.com/GameOfLife/WFSCollider"}
+
+@misc{ website:gameoflife2016,
+ title = "Game Of Life Foundation",
+ author = "Game Of Life Foundation",
+ year = "2016",
+ month = "May",
+ url = "http://gameoflife.nl/en"}
+
+@misc{ website:ssr2016,
+ title = "SoundScape Renderer",
+ author = "Quality and Usability Lab/TU Berlin and Institut für Nachrichtentechnik/Universität Rostock",
+ year = "2016",
+ month = "May",
+ url = "http://spatialaudio.net/ssr/"}
+
+@misc{ website:supercollider2016,
+ title = "SuperCollider",
+ author = "James McCartney",
+ year = "2016",
+ month = "May",
+ url = "http://supercollider.github.io/"}
+
+@misc{ website:puredata2016,
+ title = "PureData",
+ author = "Miller Puckette",
+ year = "2016",
+ month = "May",
+ url = "http://puredata.info"}
diff --git a/expose/expose.pdf b/expose/expose.pdf
new file mode 100644
index 0000000..f014812
--- /dev/null
+++ b/expose/expose.pdf
Binary files differ
diff --git a/expose/expose.tex b/expose/expose.tex
new file mode 100644
index 0000000..b785684
--- /dev/null
+++ b/expose/expose.tex
@@ -0,0 +1,265 @@
+\documentclass[12pt,a4paper,oneside,titlepage]{article}
+\usepackage[english]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp} % Sonderzeichen, z.B. €
+%\usepackage{citep}
+\usepackage{listings}
+\lstdefinelanguage{Ini}{basicstyle=\ttfamily\tiny,
+ columns=fullflexible,
+ tag=[s]{[]},
+ tagstyle=\color{blue}\bfseries,
+ usekeywordsintag=true
+}[html]
+\lstdefinelanguage{bash}{basicstyle=\ttfamily\tiny}
+\usepackage{ulem}
+\usepackage{lmodern}
+\usepackage{multirow}
+\usepackage{url}
+\usepackage{graphicx} % for PDF scaling
+\usepackage{pdfpages}
+\usepackage{float}
+\floatstyle{boxed}
+\restylefloat{figure}
+\usepackage{color}
+\usepackage{bbding}
+\usepackage{hyperref}
+\usepackage[font=scriptsize]{caption}
+\usepackage[numbers]{natbib}
+\graphicspath{{images//}}
+
+\begin{document}
+ \title{Exposé: SoundScape Renderer Networking}
+ \author{David Runge\\
+ Audiokommunikation und -technologie\\
+ Fachgebiet Audiokommunikation\\
+ Technische Universität Berlin\\
+ \href{dave@sleepmap.de}{dave@sleepmap.de}
+ }
+ \date{\today}
+ \maketitle
+ \begin{abstract}
+ Wave Field Synthesis (WFS) as a technological concept has been around for
+ many years now and all over the world several institutions run small and
+ some even large scale setups ranging from single speaker lines to those
+ facilitating a couple of hundred loudspeakers respectively.\\
+ The still evolving implementations are driven by several rendering
+ engines, of which two free and open-source ones, namely sWONDER and
+ SoundScape Renderer, have (partially) been developed at TU Berlin.\\
+ The latter due to its current design is not yet able to render for large
+ scale setups, ie.\ those using several computers to render audio on a
+ loudspeaker setup, due to the high amount of channels.\\
+ Its solid codebase however, which additionally offers a framework for many
+ more renderers, and the ongoing development, deems further work on this
+ application a good future investment.\\
+ The proposed work seeks to extend the SoundScape Renderer functionality to
+ turn it into a networking application for large scale WFS setups.
+\end{abstract}
+ \section{Introduction}
+ Wave Field Synthesis (WFS) describes a spatial technique for rendering audio. As
+ such it aims at synthesizing a sound field of desired acoustic preference
+ in a given listening area, assuming a planar reproduction to be most
+ suitable for most applications.\\
+ WFS is typically implemented using a curved or linear loudspeaker array
+ surrounding the listening area.\\
+ Several free and open-source renderer applications exist for WFS
+ environments, with varying stages of feature richness.\\
+ The proposed work will focus on one of them and its extension towards WFS
+ on large scale systems.
+
+ \section{Free and open-source wave field synthesis renderers}
+ To date there exist three (known of) free and open-source Wave Field
+ Synthesis renderers, which are all \href{http://jackaudio.org/}{JACK Audio
+ Connection Kit (JACK)} \citep{website:jackaudio2016} clients:
+ \begin{itemize}
+ \item \href{https://sourceforge.net/projects/swonder/}{sWONDER} \citep{website:swonder2016},
+ developed by Technische Universität Berlin, Germany
+ \item \href{https://github.com/GameOfLife/WFSCollider}{WFSCollider} \citep{website:wfscollider2016},
+ developed by \href{http://gameoflife.nl/en}{Game Of Life Foundation} \citep{website:gameoflife2016},
+ The Hague, Netherlands
+ \item \href{http://spatialaudio.net/ssr/}{SoundScape Renderer (SSR)} \citep{website:ssr2016},
+ developed by Quality \& Usability Lab, Deutsche Telekom Laboratories
+ and TU Berlin and Institut für Nachrichtentechnik, Universität Rostock
+ \end{itemize}
+ Currently only WFSCollider and the SSR are actively maintained and
+ developed, thussWONDER, although used in some setups, loses significance.
+ Generally it can be said, that different concepts apply to the three
+ renderers, which are about to be explained briefly in the following
+ sections.
+
+ \subsection{WONDER}
+ sWONDER \citep{baalman2007} consists of a set of C++ applications that provide binaural and
+ WFS rendering. In 2007 it was specifically redesigned
+ \citep{baalmanetal2007} to cope with large scale WFS setups in which
+ several (computer) nodes, providing several speakers each, drive a system
+ together.\\
+ In these setups each node receives all available audio streams (which
+ represent one virtual audio source respectively) redundantly and a master
+ application signals which node is responsible for rendering what source
+ on which speaker.\\
+ It uses Open Sound Control (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.
+ 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.
+
+ \subsection{WFSCollider}
+ WFSCollider was built on top of
+ \href{https://supercollider.github.io}{SuperCollider} 3.5
+ \citep{website:supercollider2016} and is also capable of driving large
+ scale systems. It uses a different approach in
+ doing so, though: Whereas withsWONDER 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
+ 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
+ an OSC enabled application and can thus also be used for mere
+ multi-channel playback of audio.\\
+ Although it has many useful features, it requires MacOSX (Linux version
+ still untested) to run, is built upon a quite old version of
+ \href{https://supercollider.github.io}{SuperCollider} and is likely never
+ to be merged into it, due to many core changes to it.
+
+ \subsection{SoundScape Renderer}
+ SoundScape Renderer (SSR), also a C++ application, running on Linux and
+ MacOSX, is a multi-purpose spatial audio renderer, as it is not only
+ capable of Binaural Synthesis and WFS, but also Higher-Order Ambisonics
+ and Vector Base Amplitude Panning.\\
+ It can be used with a GUI or headless (without one), depicting the
+ virtual sources, their volumes and positions, alongside which speakers
+ are currently used for rendering a selected source.
+ SSR uses TCP/IP sockets for communication and thus is not directly OSC
+ enabled. This functionality can be achieved using the capapilities of
+ other applications such as \href{http://puredata.info}{PureData}
+ \citep{website:puredata2016} in combination with it though.\\
+ Unlike the two renderers above, the SSR is not able to run large-scale
+ WFS setups, as it lacks the features to communicate between instances of
+ itself on several computers, while these instances serve a subset of the
+ available loudspeakers.
+
+ \section{Extending Sound Scape Renderer functionality}
+ The SSR, due to its diverse set of rendering engines, which are made
+ available through an extensible framework, and its clean codebase, is a
+ good candidate for future large scale WFS setups. These type of features
+ are not yet implemented though and will need testing.\\
+ Therefore I propose the implementation and testing of said feature, making
+ the SSR capable of rendering on large scale WFS setups with many nodes,
+ controlled by a master instance.\\
+ The sought implementation is inspired by the architecture of sWONDER, but
+ instead of creating many single purpose applications, the master/node
+ feature will be made available through flags to the ssr executable, when
+ starting it. This behavior is already actively harnessed eg.\ for selecting
+ one of the several rendering engines.
+ \begin{figure}[!htb]
+ \centering
+ \includegraphics[scale=0.9, trim = 31mm 190mm 24mm 8mm, clip]{ssr-networking.pdf}
+ \caption{A diagram displaying the SSR master/node setup with TCP/IP
+ socket connections over network (green lines), audio channels (red dashed
+ lines) and OSC connection (blue dashed line). Machines are indicated as red
+ dashed rectangles and connections to audio hardware as outputs of SSR
+ nodes as black lines below them.}
+ \label{fig:ssr-networking}
+ \end{figure}
+ While the SSR already has an internal logic to know which loudspeaker will
+ be used for what virtual audio source, this will have to be extended to be
+ able to know which renderer node has to render what source on which
+ loudspeaker (see Figure~\ref{fig:ssr-networking}).
+ To achieve the above features, the SSR's messaging (and thus also settings)
+ capabilities have to be extended alongside its internal logic concerning
+ the selection of output channels (and the master to node notification
+ thereof). To introduce as little redundant code as possible, most likely a
+ ``the client knows all'' setup is desirable, in which each node knows about
+ the whole setup, but is also set to only serve its own subset of
+ loudspeakers in it. This will make sure that the rendering engine remains
+ functional also in a small scale WFS setup.\\
+ The lack of a direct OSC functionality, as provided by the two other
+ renderers, will not be problematic, as master and nodes can communicate
+ through their builtin TCP/IP sockets directly and the master can, if
+ needed, be controlled via OSC.
+
+ \section{Prelimenaries}
+ In preparation to the exposé I tried to implement a side-by-side
+ installation, using Arch Linux on a medium scale setup, facilitating the
+ WFS system of the Electronic Studio at TU Berlin. Unfortunately the
+ proprietary Dante driver, that is used in that system is very complex to be
+ built, as well as underdeveloped and thus keeps the system from being
+ easily updated, which is needed for testing purposes (finding a suitable
+ real-time, low-latency Linux kernel), trying out new software features,
+ building new software and keeping a system safe. The driver will most
+ likely require changes to the hardware due to implemention of hardware
+ branding by the vendor and dire testing before usage.\\
+ Although eventually using a proper WFS setup for testing will be necessary,
+ it is luckily not needed for implementing the features, as they can already be
+ worked out using two machines running Linux, JACK and the development version
+ of SSR.\\
+ The hardware of the large scale setup at TU Berlin in H0104 is currently
+ about to be updated and therefore a valuable candidate for testing of the
+ sought SSR features.
+
+ \section{Schedule}
+ I propose a six month schedule for the implementation and testing of the
+ changes to the source code and writing of an accompanying thesis. The
+ following rough schedule should serve as a guideline for the realization of
+ the work:\\
+ \begin{tabular}{|l|l|l|l|}
+ \hline
+ \multicolumn{4}{|c|}{\textbf{Schedule}}\\
+ \hline
+ \textbf{Week} & \textbf{Implementation} & \textbf{Tests} & \textbf{Thesis} \\
+ \hline
+ 1 & Reading into codebase & & \\
+ \hline
+ 2 & Reading into codebase & & \\
+ \hline
+ 3 & Reading into codebase & & \\
+ \hline
+ 4 & Reading into codebase & & \\
+ \hline
+ 5 & Assessing changes & & Documentation \\
+ \hline
+ 6 & Assessing changes & & Documentation \\
+ \hline
+ 7 & Implementing changes & & \\
+ \hline
+ 8 & Implementing changes & & \\
+ \hline
+ 9 & Implementing changes & & \\
+ \hline
+ 10 & Implementing changes & & \\
+ \hline
+ 11 & Implementing changes & & \\
+ \hline
+ 12 & Implementing changes & & \\
+ \hline
+ 13 & Implementing changes & & Preparation\\
+ \hline
+ 14 & Implementing changes & & Preparation\\
+ \hline
+ 15 & & Small scale setup & Writing\\
+ \hline
+ 16 & & Large scale setup & Writing\\
+ \hline
+ 17 & & Large scale setup & Writing\\
+ \hline
+ 18 & & Large scale setup & Writing\\
+ \hline
+ 19 & Large scale setup (scripts) & & Writing\\
+ \hline
+ 20 & Large scale setup (scripts) & & Writing\\
+ \hline
+ 21 & Large scale setup (scripts) & & Writing\\
+ \hline
+ 22 & & & Writing\\
+ \hline
+ 23 & & & Writing\\
+ \hline
+ 24 & & & Writing\\
+ \hline
+ \end{tabular}
+ \pagebreak
+ \bibliographystyle{plainnat}
+ \bibliography{bib/ssr-networking}
+\end{document}
diff --git a/expose/images/ssr-networking.pdf b/expose/images/ssr-networking.pdf
new file mode 100644
index 0000000..0efe0b4
--- /dev/null
+++ b/expose/images/ssr-networking.pdf
Binary files differ
diff --git a/expose/images/ssr-networking.svg b/expose/images/ssr-networking.svg
new file mode 100644
index 0000000..5ad38b3
--- /dev/null
+++ b/expose/images/ssr-networking.svg
@@ -0,0 +1,530 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 744.09448819 1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="ssr-networking.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2"
+ inkscape:cx="549.99356"
+ inkscape:cy="538.40824"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer4"
+ showgrid="true"
+ inkscape:snap-text-baseline="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ objecttolerance="20"
+ guidetolerance="8"
+ inkscape:snap-tangential="true"
+ inkscape:snap-perpendicular="true"
+ inkscape:window-width="3838"
+ inkscape:window-height="2138"
+ inkscape:window-x="1"
+ inkscape:window-y="21"
+ inkscape:window-maximized="1">
+ <sodipodi:guide
+ position="339.41126,667.50882"
+ orientation="0,1"
+ id="guide11497" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid11499" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Audio lines">
+ <g
+ style=""
+ id="g11736">
+ <path
+ inkscape:connector-curvature="0"
+ id="path11715"
+ d="m 347.24178,212.60097 c -85.52772,64.27369 -85.52772,64.27369 -85.52772,64.27369 l 0,0 85.52772,-64.27369 0,0 -85.52772,64.27369"
+ style="fill:none;fill-rule:evenodd;stroke:#871310;stroke-width:1.00674486px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11718"
+ d="m 354.3171,212.60157 c -10.9777,64.27324 -10.9777,64.27324 -10.9777,64.27324 z"
+ style="fill:none;fill-rule:evenodd;stroke:#871310;stroke-width:1.02015305px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11728"
+ d="m 357.87641,212.60082 c 63.77474,64.64974 63.77474,64.64974 63.77474,64.64974"
+ style="fill:none;fill-rule:evenodd;stroke:#871310;stroke-width:1.00676119px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11730"
+ d="m 364.96219,212.35144 c 134.76755,64.3985 134.76755,64.3985 134.76755,64.3985"
+ style="fill:none;fill-rule:evenodd;stroke:#871310;stroke-width:1.0052954px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Audio boxes">
+ <rect
+ y="152.77347"
+ x="313.63739"
+ height="59.610664"
+ width="80.546021"
+ id="rect11713"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.66879374;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.3375874, 2.67517478999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <rect
+ y="276.88834"
+ x="202.04231"
+ height="65.926254"
+ width="68.064415"
+ id="rect11713-6"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.64654303;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.29308591, 2.58617179999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <rect
+ y="276.88834"
+ x="281.74911"
+ height="65.926254"
+ width="68.064415"
+ id="rect11713-6-4"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.64654303;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.29308591, 2.58617179999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <rect
+ y="276.77045"
+ x="361.6153"
+ height="65.926254"
+ width="68.064415"
+ id="rect11713-6-4-7"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.64654303;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.29308591, 2.58617179999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <rect
+ y="276.87439"
+ x="440.45193"
+ height="65.926254"
+ width="68.064415"
+ id="rect11713-6-4-7-0"
+ style="fill:none;fill-opacity:0.87058824;stroke:#871310;stroke-width:0.64654303;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.29308591, 2.58617179999999980;stroke-dashoffset:1;stroke-opacity:1" />
+ <g
+ id="g11853"
+ transform="translate(-1.6464466,0.44194174)">
+ <g
+ id="g11842">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 212.59843,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11813"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 219.68504,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11815"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.77165,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11817"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 233.85827,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11819"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 240.94488,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11821"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 248.0315,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11823"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 255.11811,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11825"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11851"
+ d="m 262.20472,301.1811 c 0,7.08662 0,7.08662 0,7.08662 l 0,0 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g11853-2"
+ transform="translate(78.133078,0.8986376)">
+ <g
+ id="g11842-7">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 212.59843,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11813-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 219.68504,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11815-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.77165,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11817-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 233.85827,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11819-9"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 240.94488,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11821-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 248.0315,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11823-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 255.11811,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11825-0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11851-5"
+ d="m 262.20472,301.1811 c 0,7.08662 0,7.08662 0,7.08662 l 0,0 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g11853-4"
+ transform="translate(157.80237,0.8986376)">
+ <g
+ id="g11842-6">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 212.59843,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11813-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 219.68504,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11815-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.77165,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11817-4"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 233.85827,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11819-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 240.94488,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11821-5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 248.0315,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11823-62"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 255.11811,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11825-04"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11851-4"
+ d="m 262.20472,301.1811 c 0,7.08662 0,7.08662 0,7.08662 l 0,0 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g11853-42"
+ transform="translate(237.29843,0.8986376)">
+ <g
+ id="g11842-0">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 212.59843,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11813-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 219.68504,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11815-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.77165,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11817-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 233.85827,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11819-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 240.94488,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11821-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 248.0315,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11823-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 255.11811,301.1811 c 0,7.08662 0,7.08662 0,7.08662"
+ id="path11825-5"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11851-6"
+ d="m 262.20472,301.1811 c 0,7.08662 0,7.08662 0,7.08662 l 0,0 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ id="g11667">
+ <path
+ inkscape:connector-curvature="0"
+ id="path11636"
+ d="M 208.70157,276.7315 C 350.43385,177.5189 350.43385,177.5189 350.43385,177.5189 Z"
+ style="fill:none;fill-rule:evenodd;stroke:#68a754;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11639"
+ d="m 354.08071,177.41535 c -63.77953,99.2126 0,0 0,0 l -63.77953,99.2126 z"
+ style="fill:none;fill-rule:evenodd;stroke:#68a754;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11663"
+ d="m 357.87402,177.54035 c 10.62992,99.2126 10.62992,99.2126 10.62992,99.2126 l -10.62992,-99.2126 10.62992,99.2126 z"
+ style="fill:none;fill-rule:evenodd;stroke:#68a754;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path11665"
+ d="m 361.79232,177.54035 c 85.03937,99.2126 85.03937,99.2126 85.03937,99.2126 z"
+ style="fill:none;fill-rule:evenodd;stroke:#68a754;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <g
+ id="g11616">
+ <g
+ transform="matrix(0.97104866,0,0,1.0034172,90.167774,-93.814154)"
+ id="g11468">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336"
+ width="60.772362"
+ height="24.912886"
+ x="120.05743"
+ y="369.42239" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="123.14749"
+ y="385.58472"
+ id="text4141"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143"
+ x="123.14749"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Node</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.97104866,0,0,1.0034172,169.91194,-93.814154)"
+ id="g11468-7">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-5"
+ width="60.772362"
+ height="24.912886"
+ x="120.05743"
+ y="369.42239" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="123.14749"
+ y="385.58472"
+ id="text4141-1"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143-2"
+ x="123.14749"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Node</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.97104866,0,0,1.0034172,249.52819,-93.837483)"
+ id="g11468-7-0">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-5-2"
+ width="60.772362"
+ height="24.912886"
+ x="120.05743"
+ y="369.42239" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="123.14749"
+ y="385.58472"
+ id="text4141-1-0"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143-2-6"
+ x="123.14749"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Node</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.97104866,0,0,1.0034172,328.58513,-93.814154)"
+ id="g11468-7-0-8">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-5-2-6"
+ width="60.772362"
+ height="24.912886"
+ x="120.05743"
+ y="369.42239" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="123.14749"
+ y="385.58472"
+ id="text4141-1-0-8"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143-2-6-0"
+ x="123.14749"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Node</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g11468-9"
+ transform="matrix(0.97104866,0,0,1.0034172,202.46698,-217.8299)">
+ <g
+ id="g11611">
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1.07921612;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-8"
+ width="71.007797"
+ height="24.83367"
+ x="120.09704"
+ y="369.46201" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="122.05521"
+ y="385.58472"
+ id="text4141-4"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4143-7"
+ x="122.05521"
+ y="385.58472"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">SSR Master</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40.52273178px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="213.77092"
+ y="407.3364"
+ id="text11607"
+ sodipodi:linespacing="125%"
+ transform="scale(1.0165302,0.98373864)"><tspan
+ sodipodi:role="line"
+ id="tspan11609"
+ x="213.77092"
+ y="407.3364"></tspan></text>
+ </g>
+ <rect
+ style="fill:none;fill-opacity:0.87058824;stroke:#360000;stroke-width:1.0652945;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3336-8-1"
+ width="68.952026"
+ height="24.918531"
+ x="212.78783"
+ y="78.485184" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:39.48400879px;line-height:100%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="228.40347"
+ y="87.221191"
+ id="text4141-4-0"
+ sodipodi:linespacing="100%"
+ transform="scale(0.98373863,1.0165302)"><tspan
+ sodipodi:role="line"
+ id="tspan4143-7-6"
+ x="228.40347"
+ y="87.221191"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">Control</tspan><tspan
+ id="tspan11709"
+ sodipodi:role="line"
+ x="228.40347"
+ y="99.884544"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:100%;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">Machine</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text11607-4"
+ y="109.84251"
+ x="307.18109"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ y="109.84251"
+ x="307.18109"
+ id="tspan11609-4"
+ sodipodi:role="line" /></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path11711"
+ d="m 248.0315,102.75591 c 74.40944,49.60629 74.40944,49.60629 74.40944,49.60629 l -74.40944,-49.60629 74.40944,49.60629 -74.40944,-49.60629 0,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000064;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 4;stroke-dashoffset:1.01306832;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/expose/input/abstract.tex b/expose/input/abstract.tex
new file mode 100644
index 0000000..46bfd8f
--- /dev/null
+++ b/expose/input/abstract.tex
@@ -0,0 +1,3 @@
+\begin{abstract}
+Lorem ipsum blah
+\end{abstract}
diff --git a/expose/input/introduction.tex b/expose/input/introduction.tex
new file mode 100644
index 0000000..f96114a
--- /dev/null
+++ b/expose/input/introduction.tex
@@ -0,0 +1,2 @@
+\section{Introduction}
+