SlideShare a Scribd company logo
MC Squared
 a musical experience

        !
Introduction to Physical Computing
fall 2008

Diego Rioja
Filippo Vanucci
India Amos
MC Squared . . .
° 	is	a	musical	instrument	that	detects	motion	and	generates	sounds	
   from	each	side

°	can	be	played	with	any	part	of	the	body,	or	an	object
 	can	be	played	by	one	or	more	than	one	person

°	is	simple,	intuitive,	playful,	expressive
°
What People are Saying
about MC Squared
°	“This	is	so	fun!”
  	“Sexy!”

°	“Awesome!”
°
USer Profile
°		Musicians	and	nonmusicians.
 		 umans,	age	7	and	up.	Cats,	age	6	weeks	and	up.
  H

°	People	who	have	phobias	about	touching	things.
°



                                      A	cat	playing	a	theremin—one	of	many	such	talented	
                                      felines.
Inspiration
°	Experimenting	with	new	ways	of	playing,	new	interactions	for	music	
  performances.

°	The	Groovebox	(aka	the	Roland	MC-505),	a	drum	machine	that	
 	The	theremin,	an	unusual,	hands-off	device	for	music	composition.

° incorporates	a	motion	sensor	as	one	of	its	many	controls.
° discovered	during	our	observation	and	research	phase.
 	Somewhat	anachronistically,	Murat	Konar’s	loopqoob,	which	Diego
Filippo	showed	a	video	clip	of	Jon	Spencer	playing	a	theremin.	
It’s	pretty	fine.
videos: Groovebox observation




click image to play                                               click image to play

Diego	set	up	his	Groovebox	in	the	ITP	lobby,	and	we	observed	several	people	using	it.	This	device	was	one	of	the	inspirations	
behind	our	project.	I	has	a	motion	sensor	at	the	top,	just	to	the	left	of	the	numbers,	which	generates	wacky	thereminic	sounds.
how MC Squared works
° 		 ach	side	is	embedded	with	an	infrared	sensor	that	detects	
   E
   movements	within	a	range	of	about	2	to	12	inches	in	front	of	it.

° library	in	Processing.
 		 ignals	from	each	sensor	trigger	a	different	sound,	using	the	Minim	
  S
video: Initial version




click image to play

Diego	and	FIlippo	play	our	first	prototype.	This	two-sensor	model	
played	sounds	continuously,	as	long	as	an	object	was	in	range	of	the	
sensors.	Nearer	objects	generated	one	sound	from	each	sensor;	farther	
objects,	another,	for	a	total	of	four	sounds.	The	code	is	on	India’s	blog.
video: An intermediate version




click image to play

Diego	plays	a	version	with	more	sensors	and	revised	code.
video: The penultimate (?) version




click image to play

Carolina	Vallejo,	Sara	Bremen,	Eyal	Ohana,	Filippo,	and	
Diego	trying	out	the	newest	version	on	Tuesday	evening.	
This	model	sports	a	new,	larger		foam	box	and	plays	each	
sound	clip	only	once	for	each	(contact-free)	hit.
strates how to use the              preVal[i]=0;                 myPort = new Serial( this,    myPort.readStringUntil( ‘n’    //preVal=val;
<code>play</code> method of a       val[i]=0;                  Serial.list()[2], 9600 );       );                              //val=sensors[0];
<code>Playable</code> class.       }                             // Read bytes into a buf-       // If you got any bytes       //println(val);
   * The class used here is        minim = new Minim(this);    fer until you get a line        other than the line feed:           // Loop through to read
<code>AudioPlayer</code>,          sample1 = minim.loadSample( feed.                             if ( bufferedString != null   data from each sensor.
but you can also play an         “kick01.wav”, 2048 );           myPort.bufferUntil( ‘n’ );   )                                   for ( int sensorNum = 0;
<code>AudioSnippet</code>.         if ( sample1 == null ) {    }                                 {                             sensorNum < sensors.length;
   * Playing a                       println( “Didn’t get      void draw()                         bufferedString = trim(      sensorNum++ )




                 code
<code>Playable</code> causes     kick!” );                     {                               bufferedString );                   {
it to begin playing from the       }                             background(0);                    /* Split the string at            /* Print out the val-
current position. When it          minim = new Minim(this);                                    the tab(s) and convert the      ues received from the sensors
reaches                            sample2 = minim.loadSample( //println(preVal+” “+val);      sections into integers.         (whose number was
   * the end of the recording    “snare.wav”, 2048 );          //println(val);                      Each section represents           determined by the num-
it will emit silence, it will      if ( sample2 == null ) {      if (val[0]==1 && pre-         one of the sensors.             ber of tabbed sections.
not stop! In other words, if         println( “Didn’t get      Val[0]==0){                          */                                */




                 °	Arduino:	mc_squared_arduino_code.zip	(64 KB)
you play something and           kick!” );                         println(“DSAD”);                sensors = int( split(            // print( “Sen-
                     		 rocessing:	mc_squared_processing_code.zip	(957KB)
                      P
   * it gets to the end of the
file, it will not stop and
                                   }
                                   minim = new Minim(this);      }
                                                                   soundSample1();             bufferedString, ‘t’ ) );       sor “ + sensorNum + “: “ +
                                                                                                                               sensors[sensorNum] + “tt”
rewind, it will continue to        sample3 = minim.loadSample(   if (val[1]==1  pre-          /* println(sensors[0]);        );




                 °
try to read the file, but get    “snare2.wav”, 2048 );         Val[1]==0){                        println(sensors[1]);             }
   * nothing and send silence      if ( sample3 == null ) {        println(“BAM”);                println(sensors[2]);
to the audio system. If you          println( “Didn’t get          soundSample2();                println(sensors[3]);         }
call codeisPlaying()/code    kick!” );                       }                                println(sensors[4]);         }
at that point, it will return      }                             if (val[2]==1  pre-            println(sensors[5]);*/       void soundSample1(){
true,                              minim = new Minim(this);    Val[2]==0){                        if (sensors[0]  350){         sample1.trigger();
   * because the player is         sample4 = minim.loadSample(     println(“BAM”);                  val[0] = 1;                }
still trying to read the file,   “loop2.wav”, 2048 );              soundSample3();                } else {
think of a record player that      if ( sample4 == null ) {      }                                  val[0] = 0;                void soundSample2(){
gets to the end of a record.         println( “Didn’t get        if (val[3]==1  pre-            }                              sample2.trigger();
   * It just goes around on      kick!” );                     Val[3]==0){                        if (sensors[1]  350){       }
the same groove. It’s not          }                               println(“BAM”);                                             void soundSample3(){
making any sound (well,            minim = new Minim(this);        soundSample4();                  val[1] = 1;                  sample3.trigger();
crackles maybe) but it is          sample5 = minim.loadSample(   }                                } else {                     }
still playing.                   “hihat.wav”, 2048 );            if (val[4]==1  pre-              val[1] = 0;                void soundSample4(){
   * Press ‘p’ to play the         if ( sample5 == null ) {    Val[4]==0){                        }                              sample4.trigger();
file.                                println( “Didn’t get          println(“BAM”);                if (sensors[2]    350){     }
   *                             kick!” );                         soundSample5();                  val[2] = 1;                void soundSample5(){
   */                              }                             }                                } else {                       sample5.trigger();
                                   minim = new Minim(this);                                         val[2] = 0;                }
import processing.serial.*;        sample6 = minim.loadSample(   if (val[5]==1  pre-            }                            void soundSample6(){
import ddf.minim.*;              “loop1.wav”, 2048 );          Val[5]==0){                        if (sensors[3]    350){       sample6.trigger();
Serial myPort;                     if ( sample6 == null ) {        println(“BAM”);                  val[3] = 1;                }
Minim minim;                         println( “Didn’t get          soundSample6();                } else {
AudioSample sample1;             kick!” );                       }                                  val[3] = 0;                void stop()
AudioSample sample2;               }                              preVal[0]=val[0];               }                            {
AudioSample sample3;               /* List all the available      preVal[1]=val[1];               if (sensors[4]    350){       // always close Minim audio
AudioSample sample4;             serial ports. Don’t really       preVal[2]=val[2];                 val[4] = 1;                classes when you are done
AudioSample sample5;             need to do this, since           preVal[3]=val[3];               } else {                     with them
AudioSample sample6;                it’s always zero for me,      preVal[4]=val[4];                 val[4] = 0;                 sample1.close();
int[] sensors;                   but it doesn’t hurt.             preVal[5]=val[5];               }                             sample2.close();
int[] preVal = new int[6];          */                         }                                  if (sensors[5]    350){      sample3.close();
//int val=0;                       println(Serial.list() );    void serialEvent( Serial             val[5] = 1;                 sample4.close();
int[] val = new int[6];            // If I wanted a port       myPort )                           } else {                      sample5.close();
void setup(){                                                  {                                    val[5] = 0;                 sample6.close();
design decisions
° 		 ach	side	has	a	different	icon	and	color,	to	aid	the	players	in	
   E
   associating	each	side	with	a	specific	sound.

° make	the	interaction	with	MC Squared	predictable	and	intuitive.
 		 ach	side	uses	the	same	kind	of	sensor,	having	the	same	range,	to	
  E


° control,	to	make	it	simple	to	operate.
 		 ach	sensor	functions	as	a	digital	switch	rather	than	a	variable	
  E
Diego	demonstrating	how	the	MC Squared	(here		
represented	by	an	iPod	box)	stands	on	its	corner	so	that	
players	can	reach	all	sides.
Our	first	box,	made	of	black	foam	core,	held	together	with	black	fabric	tape,	Velcro	squares	(so	the	whole	box	can	
be	opened	out	flat	for	servicing),	and	a	wire	latch.	This	box	measures	6	inches	on	each	side,	which	turned	out	to	be	
an	extremely	tight	fit	for	an	Arduino	Diecimila	and	a	small	breadboard.
The	final	box	was	constructed	from	sheets	of	7/8-inch	
urethane	foam	which	we	cut	on	a	band	saw	to	8-inch	
squares.		Six	of	these	squares	have	the	centers	cut	
out.	The	whole	stack—except	for	the	lid—was	glued	
together	by	Diego,	aka	The	Human	Clamp.
Diego	learned	that	spraypainting	the	foam	would	
  cause	it	to	break	down,	and	we	didn’t	have	time	
  to	wait	for	paint	to	dry,	anyway.	So	we	covered	
   the	sides	with	printed	paper,	which	is	secured	
 with	a	ton	of	black	fabric	tape.	It’s	loose	around	
    the	sensors;	a	dab	of	glue	would	have	helped.
One	view	of	the	box	we	used	in	our	
presentation.

A	corner	of	the	box	gets	wedged	into	this	
block	so	that	players	can	reach	all	sides.	The	
block	can	be	mounted	on	a	platform	(what	we	
did)	or	tripod.
Future Possibilities
°	MC Squared	could	be	installed	in	public	places,	to	get	people	
  involved	in	playful	interactions	in	unexpected	environments	(e.g.,	
  airports,	train	stations).

°	MC Squared		could	come	with	alternate	sound	packs—electronica,	
  stringed	instruments,	etc.

° sound	loops	on	the	fly.
 	Buttons	and	a	mic	could	be	added	so	that	users	could	record	new
Thanks	to	all	who	helped	play,	helped	code,	lent	us	header	pins,		
showed	us	how	to	unlock	the	band	saw	blade,	and	much,	much	more.		
   And	special	thanks	to	Yasser	Ansari,	who	suggested	the	name




MC Squared
                            !

More Related Content

What's hot

Something about Golang
Something about GolangSomething about Golang
Something about Golang
Anton Arhipov
 
ZCA: A component architecture for Python
ZCA: A component architecture for PythonZCA: A component architecture for Python
ZCA: A component architecture for Python
Timo Stollenwerk
 
Microkernel Development
Microkernel DevelopmentMicrokernel Development
Microkernel Development
Rodrigo Almeida
 
Functions
FunctionsFunctions
Rust Mozlando Tutorial
Rust Mozlando TutorialRust Mozlando Tutorial
Rust Mozlando Tutorial
nikomatsakis
 
Gevent what's the point
Gevent what's the pointGevent what's the point
Gevent what's the point
seanmcq
 
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.
Platonov Sergey
 
Zope component architechture
Zope component architechtureZope component architechture
Zope component architechture
Anatoly Bubenkov
 
Understanding greenlet
Understanding greenletUnderstanding greenlet
Understanding greenlet
Saúl Ibarra Corretgé
 
Fourier project presentation
Fourier project  presentationFourier project  presentation
Fourier project presentation
志璿 楊
 
asyncio internals
asyncio internalsasyncio internals
asyncio internals
Saúl Ibarra Corretgé
 
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
aferrandini
 
Play image
Play imagePlay image
Play image
Fardian Syah
 
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
Fantix King 王川
 
java sockets
 java sockets java sockets
java sockets
Enam Ahmed Shahaz
 
Java Concurrency Idioms
Java Concurrency IdiomsJava Concurrency Idioms
Java Concurrency Idioms
Alex Miller
 
sizeof(Object): how much memory objects take on JVMs and when this may matter
sizeof(Object): how much memory objects take on JVMs and when this may mattersizeof(Object): how much memory objects take on JVMs and when this may matter
sizeof(Object): how much memory objects take on JVMs and when this may matter
Dawid Weiss
 
Multirate sim
Multirate simMultirate sim
Multirate sim
Alim Sheikh
 
Aspect Mining for Large Systems
Aspect Mining for Large SystemsAspect Mining for Large Systems
Aspect Mining for Large Systems
Thomas Zimmermann
 
A deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio moduleA deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio module
Saúl Ibarra Corretgé
 

What's hot (20)

Something about Golang
Something about GolangSomething about Golang
Something about Golang
 
ZCA: A component architecture for Python
ZCA: A component architecture for PythonZCA: A component architecture for Python
ZCA: A component architecture for Python
 
Microkernel Development
Microkernel DevelopmentMicrokernel Development
Microkernel Development
 
Functions
FunctionsFunctions
Functions
 
Rust Mozlando Tutorial
Rust Mozlando TutorialRust Mozlando Tutorial
Rust Mozlando Tutorial
 
Gevent what's the point
Gevent what's the pointGevent what's the point
Gevent what's the point
 
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.
 
Zope component architechture
Zope component architechtureZope component architechture
Zope component architechture
 
Understanding greenlet
Understanding greenletUnderstanding greenlet
Understanding greenlet
 
Fourier project presentation
Fourier project  presentationFourier project  presentation
Fourier project presentation
 
asyncio internals
asyncio internalsasyncio internals
asyncio internals
 
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
Artificial Neural Network in a Tic Tac Toe Symfony Console Application - Symf...
 
Play image
Play imagePlay image
Play image
 
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
About Those Python Async Concurrent Frameworks - Fantix @ OSTC 2014
 
java sockets
 java sockets java sockets
java sockets
 
Java Concurrency Idioms
Java Concurrency IdiomsJava Concurrency Idioms
Java Concurrency Idioms
 
sizeof(Object): how much memory objects take on JVMs and when this may matter
sizeof(Object): how much memory objects take on JVMs and when this may mattersizeof(Object): how much memory objects take on JVMs and when this may matter
sizeof(Object): how much memory objects take on JVMs and when this may matter
 
Multirate sim
Multirate simMultirate sim
Multirate sim
 
Aspect Mining for Large Systems
Aspect Mining for Large SystemsAspect Mining for Large Systems
Aspect Mining for Large Systems
 
A deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio moduleA deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio module
 

Viewers also liked

Introduction a taste of french
Introduction a taste of frenchIntroduction a taste of french
Introduction a taste of french
David CORDINA
 
Winning the Discount Wars: Strategies for Spas and Salons
Winning the Discount Wars: Strategies for Spas and SalonsWinning the Discount Wars: Strategies for Spas and Salons
Winning the Discount Wars: Strategies for Spas and Salons
Peggy Wynne Borgman
 
Profile7 services 2015
Profile7 services 2015Profile7 services 2015
Profile7 services 2015
Profile7
 
Web 2.0網拍經營者特質與消費者溝通策略
Web 2.0網拍經營者特質與消費者溝通策略Web 2.0網拍經營者特質與消費者溝通策略
Web 2.0網拍經營者特質與消費者溝通策略guestce8b9
 
What's your story V0.1
What's your story V0.1What's your story V0.1
What's your story V0.1
leafboi
 
Non Revenue Space Odyssey
Non Revenue Space OdysseyNon Revenue Space Odyssey
Non Revenue Space Odyssey
Peggy Wynne Borgman
 
El Escuchar
El  EscucharEl  Escuchar
El Escuchar
A_ Comerc
 
電腦鑑識程序之研究
電腦鑑識程序之研究電腦鑑識程序之研究
電腦鑑識程序之研究guestce8b9
 
E Commerce
E CommerceE Commerce
E Commerce
bootbeet
 
Braving The Financial Jungle
Braving The Financial JungleBraving The Financial Jungle
Braving The Financial Jungle
Peggy Wynne Borgman
 
social media
social mediasocial media
social media
mattclayton
 
Exploring Healthcare With Second Life
Exploring Healthcare With Second LifeExploring Healthcare With Second Life
Exploring Healthcare With Second Life
rdpritchard
 
Reseaux apprenants
Reseaux apprenantsReseaux apprenants
Reseaux apprenants
David CORDINA
 
XSiena: The Content-Based Publish/Subscribe System
XSiena: The Content-Based Publish/Subscribe SystemXSiena: The Content-Based Publish/Subscribe System
XSiena: The Content-Based Publish/Subscribe System
Zbigniew Jerzak
 
資料庫延續
資料庫延續資料庫延續
資料庫延續guestce8b9
 
Resouce
ResouceResouce
Resouce
bootbeet
 
NMT Product Possibilities Part 2
NMT Product Possibilities Part 2NMT Product Possibilities Part 2
NMT Product Possibilities Part 2
metalplastech
 

Viewers also liked (20)

Rischio
RischioRischio
Rischio
 
Introduction a taste of french
Introduction a taste of frenchIntroduction a taste of french
Introduction a taste of french
 
Winning the Discount Wars: Strategies for Spas and Salons
Winning the Discount Wars: Strategies for Spas and SalonsWinning the Discount Wars: Strategies for Spas and Salons
Winning the Discount Wars: Strategies for Spas and Salons
 
Profile7 services 2015
Profile7 services 2015Profile7 services 2015
Profile7 services 2015
 
Web 2.0網拍經營者特質與消費者溝通策略
Web 2.0網拍經營者特質與消費者溝通策略Web 2.0網拍經營者特質與消費者溝通策略
Web 2.0網拍經營者特質與消費者溝通策略
 
What's your story V0.1
What's your story V0.1What's your story V0.1
What's your story V0.1
 
Non Revenue Space Odyssey
Non Revenue Space OdysseyNon Revenue Space Odyssey
Non Revenue Space Odyssey
 
Presentation goodwin
Presentation goodwinPresentation goodwin
Presentation goodwin
 
El Escuchar
El  EscucharEl  Escuchar
El Escuchar
 
電腦鑑識程序之研究
電腦鑑識程序之研究電腦鑑識程序之研究
電腦鑑識程序之研究
 
E Commerce
E CommerceE Commerce
E Commerce
 
Braving The Financial Jungle
Braving The Financial JungleBraving The Financial Jungle
Braving The Financial Jungle
 
social media
social mediasocial media
social media
 
Exploring Healthcare With Second Life
Exploring Healthcare With Second LifeExploring Healthcare With Second Life
Exploring Healthcare With Second Life
 
Reseaux apprenants
Reseaux apprenantsReseaux apprenants
Reseaux apprenants
 
XSiena: The Content-Based Publish/Subscribe System
XSiena: The Content-Based Publish/Subscribe SystemXSiena: The Content-Based Publish/Subscribe System
XSiena: The Content-Based Publish/Subscribe System
 
資料庫延續
資料庫延續資料庫延續
資料庫延續
 
Resouce
ResouceResouce
Resouce
 
Rischio
RischioRischio
Rischio
 
NMT Product Possibilities Part 2
NMT Product Possibilities Part 2NMT Product Possibilities Part 2
NMT Product Possibilities Part 2
 

Similar to Mc Squared

Roberto Gallea: Workshop Arduino, giorno #2 Arduino + Processing
Roberto Gallea: Workshop Arduino, giorno #2 Arduino + ProcessingRoberto Gallea: Workshop Arduino, giorno #2 Arduino + Processing
Roberto Gallea: Workshop Arduino, giorno #2 Arduino + Processing
Demetrio Siragusa
 
Music as data
Music as dataMusic as data
Music as data
John Vlachoyiannis
 
Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en Rust
Germán Küber
 
Arduino coding class part ii
Arduino coding class part iiArduino coding class part ii
Arduino coding class part ii
Jonah Marrs
 
Write a Matlab code (a computerized program) for calculating plane st.docx
 Write a Matlab code (a computerized program) for calculating plane st.docx Write a Matlab code (a computerized program) for calculating plane st.docx
Write a Matlab code (a computerized program) for calculating plane st.docx
ajoy21
 
Game unleashedjavascript
Game unleashedjavascriptGame unleashedjavascript
Game unleashedjavascript
Reece Carlson
 
[SI] Ada Lovelace Day 2014 - Tampon Run
[SI] Ada Lovelace Day 2014  - Tampon Run[SI] Ada Lovelace Day 2014  - Tampon Run
[SI] Ada Lovelace Day 2014 - Tampon Run
Maja Kraljič
 
Linux seccomp(2) vs OpenBSD pledge(2)
Linux seccomp(2) vs OpenBSD pledge(2)Linux seccomp(2) vs OpenBSD pledge(2)
Linux seccomp(2) vs OpenBSD pledge(2)
Giovanni Bechis
 
[EN] Ada Lovelace Day 2014 - Tampon run
[EN] Ada Lovelace Day 2014  - Tampon run[EN] Ada Lovelace Day 2014  - Tampon run
[EN] Ada Lovelace Day 2014 - Tampon run
Maja Kraljič
 
Can you give an example of a binary heap programCan you give an .pdf
Can you give an example of a binary heap programCan you give an .pdfCan you give an example of a binary heap programCan you give an .pdf
Can you give an example of a binary heap programCan you give an .pdf
arorasales234
 
-- This is the shell-c Test- --shell -test sub #include -ctype-h- -- C.pdf
-- This is the shell-c Test- --shell -test sub #include -ctype-h- -- C.pdf-- This is the shell-c Test- --shell -test sub #include -ctype-h- -- C.pdf
-- This is the shell-c Test- --shell -test sub #include -ctype-h- -- C.pdf
AdrianEBJKingr
 
[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)
Evgeny Kaziak
 
Are we ready to Go?
Are we ready to Go?Are we ready to Go?
Are we ready to Go?
Adam Dudczak
 
MUST CS101 Lab11
MUST CS101 Lab11 MUST CS101 Lab11
MUST CS101 Lab11
Ayman Hassan
 
Actionscript 3 - Session 4 Core Concept
Actionscript 3 - Session 4 Core ConceptActionscript 3 - Session 4 Core Concept
Actionscript 3 - Session 4 Core Concept
OUM SAOKOSAL
 
PRACTICAL COMPUTING
PRACTICAL COMPUTINGPRACTICAL COMPUTING
PRACTICAL COMPUTING
Ramachendran Logarajah
 
NoiseGen at Arlington Ruby 2012
NoiseGen at Arlington Ruby 2012NoiseGen at Arlington Ruby 2012
NoiseGen at Arlington Ruby 2012
awwaiid
 
Example of JAVA Program
Example of JAVA ProgramExample of JAVA Program
Example of JAVA Program
Trenton Asbury
 
Dts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlinDts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlin
Ahmad Arif Faizin
 
Pdr ppt
Pdr pptPdr ppt
Pdr ppt
sid1232086
 

Similar to Mc Squared (20)

Roberto Gallea: Workshop Arduino, giorno #2 Arduino + Processing
Roberto Gallea: Workshop Arduino, giorno #2 Arduino + ProcessingRoberto Gallea: Workshop Arduino, giorno #2 Arduino + Processing
Roberto Gallea: Workshop Arduino, giorno #2 Arduino + Processing
 
Music as data
Music as dataMusic as data
Music as data
 
Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en Rust
 
Arduino coding class part ii
Arduino coding class part iiArduino coding class part ii
Arduino coding class part ii
 
Write a Matlab code (a computerized program) for calculating plane st.docx
 Write a Matlab code (a computerized program) for calculating plane st.docx Write a Matlab code (a computerized program) for calculating plane st.docx
Write a Matlab code (a computerized program) for calculating plane st.docx
 
Game unleashedjavascript
Game unleashedjavascriptGame unleashedjavascript
Game unleashedjavascript
 
[SI] Ada Lovelace Day 2014 - Tampon Run
[SI] Ada Lovelace Day 2014  - Tampon Run[SI] Ada Lovelace Day 2014  - Tampon Run
[SI] Ada Lovelace Day 2014 - Tampon Run
 
Linux seccomp(2) vs OpenBSD pledge(2)
Linux seccomp(2) vs OpenBSD pledge(2)Linux seccomp(2) vs OpenBSD pledge(2)
Linux seccomp(2) vs OpenBSD pledge(2)
 
[EN] Ada Lovelace Day 2014 - Tampon run
[EN] Ada Lovelace Day 2014  - Tampon run[EN] Ada Lovelace Day 2014  - Tampon run
[EN] Ada Lovelace Day 2014 - Tampon run
 
Can you give an example of a binary heap programCan you give an .pdf
Can you give an example of a binary heap programCan you give an .pdfCan you give an example of a binary heap programCan you give an .pdf
Can you give an example of a binary heap programCan you give an .pdf
 
-- This is the shell-c Test- --shell -test sub #include -ctype-h- -- C.pdf
-- This is the shell-c Test- --shell -test sub #include -ctype-h- -- C.pdf-- This is the shell-c Test- --shell -test sub #include -ctype-h- -- C.pdf
-- This is the shell-c Test- --shell -test sub #include -ctype-h- -- C.pdf
 
[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)[JAM 1.2] Design & Multitasking (Andrew Solovey)
[JAM 1.2] Design & Multitasking (Andrew Solovey)
 
Are we ready to Go?
Are we ready to Go?Are we ready to Go?
Are we ready to Go?
 
MUST CS101 Lab11
MUST CS101 Lab11 MUST CS101 Lab11
MUST CS101 Lab11
 
Actionscript 3 - Session 4 Core Concept
Actionscript 3 - Session 4 Core ConceptActionscript 3 - Session 4 Core Concept
Actionscript 3 - Session 4 Core Concept
 
PRACTICAL COMPUTING
PRACTICAL COMPUTINGPRACTICAL COMPUTING
PRACTICAL COMPUTING
 
NoiseGen at Arlington Ruby 2012
NoiseGen at Arlington Ruby 2012NoiseGen at Arlington Ruby 2012
NoiseGen at Arlington Ruby 2012
 
Example of JAVA Program
Example of JAVA ProgramExample of JAVA Program
Example of JAVA Program
 
Dts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlinDts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlin
 
Pdr ppt
Pdr pptPdr ppt
Pdr ppt
 

Recently uploaded

HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
Federico Razzoli
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
Postman
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Wask
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 

Recently uploaded (20)

HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 

Mc Squared

  • 1. MC Squared a musical experience !
  • 2. Introduction to Physical Computing fall 2008 Diego Rioja Filippo Vanucci India Amos
  • 3. MC Squared . . . ° is a musical instrument that detects motion and generates sounds from each side ° can be played with any part of the body, or an object can be played by one or more than one person ° is simple, intuitive, playful, expressive °
  • 4. What People are Saying about MC Squared ° “This is so fun!” “Sexy!” ° “Awesome!” °
  • 5. USer Profile ° Musicians and nonmusicians. umans, age 7 and up. Cats, age 6 weeks and up. H ° People who have phobias about touching things. ° A cat playing a theremin—one of many such talented felines.
  • 6. Inspiration ° Experimenting with new ways of playing, new interactions for music performances. ° The Groovebox (aka the Roland MC-505), a drum machine that The theremin, an unusual, hands-off device for music composition. ° incorporates a motion sensor as one of its many controls. ° discovered during our observation and research phase. Somewhat anachronistically, Murat Konar’s loopqoob, which Diego
  • 8. videos: Groovebox observation click image to play click image to play Diego set up his Groovebox in the ITP lobby, and we observed several people using it. This device was one of the inspirations behind our project. I has a motion sensor at the top, just to the left of the numbers, which generates wacky thereminic sounds.
  • 9. how MC Squared works ° ach side is embedded with an infrared sensor that detects E movements within a range of about 2 to 12 inches in front of it. ° library in Processing. ignals from each sensor trigger a different sound, using the Minim S
  • 10. video: Initial version click image to play Diego and FIlippo play our first prototype. This two-sensor model played sounds continuously, as long as an object was in range of the sensors. Nearer objects generated one sound from each sensor; farther objects, another, for a total of four sounds. The code is on India’s blog.
  • 11. video: An intermediate version click image to play Diego plays a version with more sensors and revised code.
  • 12. video: The penultimate (?) version click image to play Carolina Vallejo, Sara Bremen, Eyal Ohana, Filippo, and Diego trying out the newest version on Tuesday evening. This model sports a new, larger foam box and plays each sound clip only once for each (contact-free) hit.
  • 13. strates how to use the preVal[i]=0; myPort = new Serial( this, myPort.readStringUntil( ‘n’ //preVal=val; <code>play</code> method of a val[i]=0; Serial.list()[2], 9600 ); ); //val=sensors[0]; <code>Playable</code> class. } // Read bytes into a buf- // If you got any bytes //println(val); * The class used here is minim = new Minim(this); fer until you get a line other than the line feed: // Loop through to read <code>AudioPlayer</code>, sample1 = minim.loadSample( feed. if ( bufferedString != null data from each sensor. but you can also play an “kick01.wav”, 2048 ); myPort.bufferUntil( ‘n’ ); ) for ( int sensorNum = 0; <code>AudioSnippet</code>. if ( sample1 == null ) { } { sensorNum < sensors.length; * Playing a println( “Didn’t get void draw() bufferedString = trim( sensorNum++ ) code <code>Playable</code> causes kick!” ); { bufferedString ); { it to begin playing from the } background(0); /* Split the string at /* Print out the val- current position. When it minim = new Minim(this); the tab(s) and convert the ues received from the sensors reaches sample2 = minim.loadSample( //println(preVal+” “+val); sections into integers. (whose number was * the end of the recording “snare.wav”, 2048 ); //println(val); Each section represents determined by the num- it will emit silence, it will if ( sample2 == null ) { if (val[0]==1 && pre- one of the sensors. ber of tabbed sections. not stop! In other words, if println( “Didn’t get Val[0]==0){ */ */ ° Arduino: mc_squared_arduino_code.zip (64 KB) you play something and kick!” ); println(“DSAD”); sensors = int( split( // print( “Sen- rocessing: mc_squared_processing_code.zip (957KB) P * it gets to the end of the file, it will not stop and } minim = new Minim(this); } soundSample1(); bufferedString, ‘t’ ) ); sor “ + sensorNum + “: “ + sensors[sensorNum] + “tt” rewind, it will continue to sample3 = minim.loadSample( if (val[1]==1 pre- /* println(sensors[0]); ); ° try to read the file, but get “snare2.wav”, 2048 ); Val[1]==0){ println(sensors[1]); } * nothing and send silence if ( sample3 == null ) { println(“BAM”); println(sensors[2]); to the audio system. If you println( “Didn’t get soundSample2(); println(sensors[3]); } call codeisPlaying()/code kick!” ); } println(sensors[4]); } at that point, it will return } if (val[2]==1 pre- println(sensors[5]);*/ void soundSample1(){ true, minim = new Minim(this); Val[2]==0){ if (sensors[0] 350){ sample1.trigger(); * because the player is sample4 = minim.loadSample( println(“BAM”); val[0] = 1; } still trying to read the file, “loop2.wav”, 2048 ); soundSample3(); } else { think of a record player that if ( sample4 == null ) { } val[0] = 0; void soundSample2(){ gets to the end of a record. println( “Didn’t get if (val[3]==1 pre- } sample2.trigger(); * It just goes around on kick!” ); Val[3]==0){ if (sensors[1] 350){ } the same groove. It’s not } println(“BAM”); void soundSample3(){ making any sound (well, minim = new Minim(this); soundSample4(); val[1] = 1; sample3.trigger(); crackles maybe) but it is sample5 = minim.loadSample( } } else { } still playing. “hihat.wav”, 2048 ); if (val[4]==1 pre- val[1] = 0; void soundSample4(){ * Press ‘p’ to play the if ( sample5 == null ) { Val[4]==0){ } sample4.trigger(); file. println( “Didn’t get println(“BAM”); if (sensors[2] 350){ } * kick!” ); soundSample5(); val[2] = 1; void soundSample5(){ */ } } } else { sample5.trigger(); minim = new Minim(this); val[2] = 0; } import processing.serial.*; sample6 = minim.loadSample( if (val[5]==1 pre- } void soundSample6(){ import ddf.minim.*; “loop1.wav”, 2048 ); Val[5]==0){ if (sensors[3] 350){ sample6.trigger(); Serial myPort; if ( sample6 == null ) { println(“BAM”); val[3] = 1; } Minim minim; println( “Didn’t get soundSample6(); } else { AudioSample sample1; kick!” ); } val[3] = 0; void stop() AudioSample sample2; } preVal[0]=val[0]; } { AudioSample sample3; /* List all the available preVal[1]=val[1]; if (sensors[4] 350){ // always close Minim audio AudioSample sample4; serial ports. Don’t really preVal[2]=val[2]; val[4] = 1; classes when you are done AudioSample sample5; need to do this, since preVal[3]=val[3]; } else { with them AudioSample sample6; it’s always zero for me, preVal[4]=val[4]; val[4] = 0; sample1.close(); int[] sensors; but it doesn’t hurt. preVal[5]=val[5]; } sample2.close(); int[] preVal = new int[6]; */ } if (sensors[5] 350){ sample3.close(); //int val=0; println(Serial.list() ); void serialEvent( Serial val[5] = 1; sample4.close(); int[] val = new int[6]; // If I wanted a port myPort ) } else { sample5.close(); void setup(){ { val[5] = 0; sample6.close();
  • 14. design decisions ° ach side has a different icon and color, to aid the players in E associating each side with a specific sound. ° make the interaction with MC Squared predictable and intuitive. ach side uses the same kind of sensor, having the same range, to E ° control, to make it simple to operate. ach sensor functions as a digital switch rather than a variable E
  • 18.
  • 19. Diego learned that spraypainting the foam would cause it to break down, and we didn’t have time to wait for paint to dry, anyway. So we covered the sides with printed paper, which is secured with a ton of black fabric tape. It’s loose around the sensors; a dab of glue would have helped.
  • 21. Future Possibilities ° MC Squared could be installed in public places, to get people involved in playful interactions in unexpected environments (e.g., airports, train stations). ° MC Squared could come with alternate sound packs—electronica, stringed instruments, etc. ° sound loops on the fly. Buttons and a mic could be added so that users could record new