<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see AdvancedOptions
<<importTiddlers>>
The ~PlaySoundGround is a musical playground built by [[Manifold, Plank, and Sprocket.]]  It is currently in the construction process, and will first be displayed at Burning Man 2008.  It needs your help!  [[Contact]] us to help us out, and take a look at the [[Work Schedule]] too.

The ~PlaySoundGround consists of three pieces of equipment: a Merry-Go-Round, a Teeter-Totter, and a [[Slide]].  Each of these is a functional playground item scaled to adult-size. Each unit has [[Sensors]] installed in it that will transmit data to software that will generate music based on how it is being used. 

This data mapping will take a number of forms ranging from a literal representation of physical motion with intuitive responses (for example, a rising and falling scale from the teeter-totter or a simulated Doppler effect from the merry-go-round), to more abstract auditory mappings that require the players to learn and explore the mappings and create contexts for them. Users will have the possibility of designing mappings through a control panel with intuitive controls such as ‘literal/abstract’, textural density, tonality, etc. 

For a little more discussion of the ideas behind this project, check out our [[Rationale]] page.
We use five of [[Sonic Impact's 5065 second-generation class-T amplifiers|http://www.si5.com/products.php?pID=4046]].  They offer incredible sound quality for the price and power draw.
We use an [[Arduino Diecimila|http://arduino.cc/en/Main/ArduinoBoardDiecimila]] microcontroller to interpret the data we get from the [[Potentiometers]] on the [[Swings]] and the HallEffectSensor on the [[Merry-Go-Round]].  The Arduino is a tough little microcontroller with 14 digital input/output pins, 6 analog input pins, and a USB interface.  We do very little computation on the Arduino itself; we mostly just use it for routing.  By using the SimpleMessageSystem library, we can easily read the data from our sensors and send it to Max/MSP over a serial connection opened on the Arduino's USB connection.
We use one of Echo's [[AudioFire 12|http://www.echoaudio.com/Products/FireWire/AudioFire12/index.php]] interfaces.  It's basically just a smart, reliable, low-latency box that can take digital audio over Firewire and send it to up to 12 separate analog audio channels.  (It also has 12 analog audio inputs, but we don't use those.)
The climbing structure is a multi-tiered platform structure designed for climbing and playing.  It contains a number of AcousticInstruments designed by the students of Jonathan Berger's Technology and Art [[Class]].  It also supports, and is supported by, the [[Swings]].
You can contact the project at mpsprocket(at)gmail.com.
PlaySoundGroundHello
[[Diagram]]
NotebookNavigation
[img[2922680681_c4182af2b3.jpg]]
''Q: So wait.  What is this all about?''
A: The ~PlaySoundGround is a piece of interactive audio installation art -- more specifically, a musical playground.

''Q: Arrgh!  What is a musical playground?''
A: A musical playground is a playground that makes music.

''Q: How?''
A: There are sensors on the slide, the merry-go-round, and the teeter-totter that send information to a computer.  The computer turns that information into music.

''Q: What do you mean by "turns that information into music?"  Can I tell that my movement made a noise, or is this one of those experimental music things where you average out 800 people's motion over a period of 25.2 hours to make some music that supposedly has something to do with it but actually all sounds the same?''
A: You can tell your movement made a noise.  Most of the translation is pretty direct, and if it's collecting a series of motion together, it's over a period of seconds or minutes (to get a sense of the speed or "rhythm" of play), not hours.

''Q: Is this just for kids?''
A: No.  It is an adult-sized playground.  It is perfectly suitable for both children and adults, though.  Smaller children, however, might have some trouble using the equipment due to its size.

''Q: Can I play on it?''
A: Yes, if you come to it.  The first place it's going to be publicly displayed is Burning Man 2008.  We'd like to set it up other places after that, but don't have any specific plans yet.

We have four pieces: a [[Climbing Structure]], a pair of [[Swings]] (attached to the climbing structure), a [[Merry-Go-Round]], and a [[Teeter-Totter]].  Check out their individual tiddlers for details.
We use a digital Hall effect sensor to sense the motion of the [[Merry-Go-Round]].  Hall effect sensors detect the presence of magnetic fields. We mounted our Hall effect sensor on the central axis of the merry-go-round, and a metal strip with a bunch of regularly-spaced rare earth magnets mounted on the outer rim of its bearing.  The Hall effect sensor sends out a signal every time a magnet passes into or out of its range, giving us a (sort of) regular series of "ticks" as the merry-go-round turns.  By counting these ticks and the time between them, we can get a good idea of how fast the merry-go-round is turning.
[[News]]
[[FAQ]]
[[About]]
[[Rationale]]
[[Furniture]]
[[Pictures]]
[[Technology]]
[[Music]]
[[Contact]]
We use [[Max/MSP|http://www.cycling74.com/twiki/bin/view/FAQs/MaxMSPFAQ]] to interpret the data we get from people playing on our [[Furniture]].  Max/MSP is a graphical programming language designed especially for audio processing.  We have a wide variety of patches (the Max/MSP term for programs) that serve as different modes for the playground; you can read about them on our [[Music]] page.
The Merry-Go-Round is built out of a number of metal pieces that rotate around a truck bearing assembly.

It uses a WiiRemote, mounted on its underside at its outer circumference, to detect its motion.  It makes use of the WiiRemote's IR sensor to detect its position with reference to a number of IR ~LEDs mounted on the central axis.

Its sound is piped primarily through an array of four speakers that surround it.
The ~PlaySoundGround has six main modes for turning motion into music, each defined by a unique [[Max/MSP]] patch or set of patches.  Here's a list of them all.
#A patch that uses simple additive synthesis techniques (techniques that add together simple waveforms like sine and square waves) to produce complex, organ-like chords.  The melodic sequences it produces are pseudo-random, based on one of several MarkovChains.  We sometimes call it our "Brian Eno patch" because of its similarity to some of his work, especially //[[Music for Airports|http://en.wikipedia.org/wiki/Music_for_Airports]]//.  The kinetic focus is on speed of motion and frequency of event
This Notebook runs on TiddlyWiki.

You can navigate from the links in this tiddler (what TiddlyWiki calls these little notecard posts), or by using the menu on the left.  A good place to start might be our [[About]] page or our [[FAQ]].  This file runs on your computer, so feel free to click on anything you like and even scribble notes -- you can't make permanent changes to this site.
You can take a look at pictures of the PlaySoundGround on our [[flickr account|http://www.flickr.com/photos/28510376@N08/?saved=1]]
Hi!  Welcome to the ~PlaySoundGround Notebook. The ~PlaySoundGround is the current project of [[Manifold, Plank, and Sprocket]], founded by Sasha Leitman and Michael St. Clair.  The ~PlaySoundGround is a musical playground.  It consists of a [[Slide]], a Merry-Go-Round, and a [[Teeter-Totter]].  The purpose of this Notebook is to provide basic information about the ~PlaySoundGround!

“The playground of today is the republic of tomorrow. If you want twenty years hence a 
nation of strong, efficient men and women, a nation in which there shall be justice and 
square dealing, work it out today with the boys and girls on the playground.” 
-Lee Hamner, early 20th-century recreation planner and community organizer
Each of the [[Swings]] uses a linear potentiometer, mounted at the top of its chain, to sense its movement.  A linear potentiometer is a sensor that varies its voltage evenly as it gets turned, like a dimmer switch for a lightbulb.  As a swing gets swung, its chain moves with it and the potentiometer turns, giving us a pretty good idea of where the swinger is at any given moment, from which we can derive speed and other physical quantities.  The potentiometers are connected to the [[Arduino]], which interprets their data and sends it to our MacMini.
!I.  Structure
The ~PlaySoundGround is a functioning playground that produces music when participants play on and with the equipment. It is, as such, also a musical instrument that allows participants to explore musical interaction and the creation and control of musical gestures by learning the auditory properties of the play structures. 

The basic premise of the ~PlaySoundGround is that the ‘play’ children perform in a playground and the ‘playing’ of music share the property of creative interaction within structural, physical and technological constraints, as well as a set of generally unwritten social rules.  The ~PlaySoundGround works to make this connection explicit by endowing recognizable, functional playground equipment with the power to generate audio, extending rehearsed, playful physical motions into the realm of musical expression.  In doing so, it also opens up new territories for instrument design and interactive audio art, acting as a musical instrument controlled by broad kinesthetic motion rather than fine motor movements. 
!II.  Culture
The designers of playground have often seen themselves as engineers of social progress.  From the late 19th century on, civic leaders have created playgrounds as schools for bodies, as vehicles for instilling children with physical culture and its moral benefits.  Education professionals believed that children with disciplined bodies and well-developed senses of sportsmanship would become better citizens, stronger leaders -- and more efficient, obedient workers.  But playgrounds also hold powerful personal significance for many people.  This significance can certainly rise from their official purposes.  Playgrounds can be places to make your first friends, to learn fair play, and to work hard at sports to try to impress the popular kids.  But playgrounds also act as spaces for free play and a thousand acts of resistance, large and small, heroic and grotesque.  They are places for bullying, for teenage makeout sessions, for fistfights, and for refusing to come in from recess. 

The ~PlaySoundGround celebrates both the official and outlaw aspects of playgrounds.  Following the ideas of progressive educators from the 1960s, it acts as a safe space for cooperative play and physical exercise.  However, it also acts as as an arena for a melange of chaotic improvisations, synaesthetic experiences, and gloriously pointless fun.  After all, the new acoustic capabilities that the ~PlaySoundGround affords to familiar objects and familiar motions defamiliarize these objects and motions just as much as they familiarize those capabilities.  The ~PlaySoundGround creates a space that is at once intimate, safe, unstable, and uncertain -- an uncanny space in which new possibilities can arise, in which forgotten possibilities can be remembered.  It is a ~PlaySoundGround is a playground that is also a musical instrument, an encompassing environment whose aural potentials encourage its users to reclaim the power and possibilities of play.
[[SimpleMessageSystem|http://www.arduino.cc/playground/Code/SimpleMessageSystem]] (which is now deprecated, but we are still using it) is a library for [[Arduino]] that facilitates simple communication, by means of ASCII characters, between the Arduino and programs like [[Max/MSP]] or [[Pure Data|http://puredata.info/]].  We use it in our Max patches to request information from the Arduino about the sensor data coming in from the [[Swings]] and the [[Merry-Go-Round]], which we then turn into [[Music]].

The ~PlaySoundGround Notebook
The [[Slide]] consists of a large wooden SlideStructure that supports a hollow tubular slide.

The tubular slide uses discrete IR sensors to detect users sliding through it.  Its sound is generated through an array of vibrating transducers that shake the slide, turning the object itself into a giant speaker.

You can look at [[images|http://www.flickr.com/photos/28510376@N08/sets/72157606074120402/]] of the [[Slide]] on our [[flickr account|http://www.flickr.com/photos/28510376@N08/]].

Here are some of [[David Kerr's photos|http://www.flickr.com/photos/slork/sets/72157606020299448]] of the construction of the SlideStructure on another flickr account.  
{{imgfloatleft{[img[speaker |tinyspeaker.jpg]]}}}    All the pieces of [[Furniture]] use the same speaker elements.  However, for each piece, they are mounted in different objects, providing distinctive, engaging timbres.







{{imgfloatleft{[img[speaker |tinywooden.jpg]]}}}     The [[Merry-Go-Round]] speakers are mounted in fairly conventional wooden cabinets, which provide a warm, responsive sound.  There are four of them, arranged in a square array around in the merry-go-round.










{{imgfloatleft{[img[speaker |tinycan.jpg]]}}}      The [[Teeter-Totter]] speakers are mounted in metal trash cans, giving a high-powered, extremely bright sound with interesting rattles in the bass range.  There are four of them, arranged in a rectangular array around the teeter-totter.






The speakers for the [[Swings]] are mounted in big blue plastic barrels partially filled with water (sorry, we don't have a nice image of them up yet).  They're quieter than the other speakers, but have a deep, complex resonant quality.  There are two of them, one at each end of the swings.  People sometimes get confused about these when no one is using the swings -- or sometimes even when they are, because their resonant qualities make it hard to tell exactly where the sound they make is coming from.  If you don't notice the speaker mounted in the top, or don't recognize it for what it is, they can easily be mistaken for tables, chairs, or drums.
.imgfloatleft{float:left;}
.imgfloatright{float:right;padding:5px}
.imgfloatcenter{float:center;}
Here's our signal chain:

The top of the chain is motion on the [[Furniture]] (other than the ClimbingStructure, which contains only acoustic instruments).  This gets translated into electrical signals by sensors installed in the [[Furniture]].  Each piece of furniture uses a different kind of sensor.  The [[Teeter-Totter]] uses a WiiRemote.  The Merry-Go-Round uses a HallEffectSensor and a strip of magnets.  The [[Swings]] use [[Potentiometers]].

Then, these signals get sent to our MacMini.  The WiiRemote communicates directly with the Mac using Bluetooth.  The signals from the HallEffectSensor and [[Potentiometers]] get sent to the Mac over a USB serial connection by an [[Arduino]] microcontroller.

These signals then get interpreted by means of a hierarchy of [[Max/MSP]] patches into digital audio.  This audio leaves our Mac by means of an AudioFire12 interface, which sends it to five [[Amplifiers]].  These amplifiers then send it out to our [[Speakers]].

Any questions?  Click the links.
The Teeter-Totter is made out of a repurposed truck loading ramp welded to a metal post.

It uses a WiiRemote, mounted at its fulcrum, to detect its motion.  It makes use of two of the WiiRemote's accelerometers, using the pull of gravity on them to determine how far it's tilted away from center.

Its sound is piped primarily through an array of four speakers that surround it.

You can look at some [[images|http://www.flickr.com/photos/28510376@N08/sets/72157606073360410/]] of the Teeter-Totter on our [[flickr account|http://www.flickr.com/photos/28510376@N08/]].
[[
TiddlyWiki is an awesome open-source application, developed by Jeremy Ruston and a large community, that places a complete wiki in a single HTML file.  To learn more about it, visit its [[webpage|www.tiddlywiki.com]].
The Nintendo Wii Remote, or "Wiimote," is an excellent sensor for our purposes.  It's got three accelerometers, a sensitive IR detector, and a tilt sensor.  It's cheap, well-sealed, and communicates easily by Bluetooth.  It's also durable enough for millions of people to swing it around frantically in their living rooms every day.  Kudos to Nintendo.

We make the Wiimotes talk to Max/MSP with Masayuki Akamatsu's spectacular [[aka.wiiremote|http://www.iamas.ac.jp/~aka/max/#aka_wiiremote]] object.  We then use various fiddly and not very interesting calculations to derive quantities like rotational position and velocity from its accelerometer.

[[Wikipedia's article|http://en.wikipedia.org/wiki/Wii_remote]] is a good source of general information about the Wiimote.

A lot of good technical data is available from the Wii Linux Project's [[Wiimote page|http://www.wiili.org/index.php/Wiimote]].

There are also a lot of other people doing cool, unintended stuff with Wii Remotes lately.  Just poke around the internet and you'll find a lot of things.
It's Manifold, Plank, and Sprocket to you.