SlideShare une entreprise Scribd logo
1  sur  22
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
                            !

Contenu connexe

Tendances

Something about Golang
Something about GolangSomething about Golang
Something about GolangAnton Arhipov
 
ZCA: A component architecture for Python
ZCA: A component architecture for PythonZCA: A component architecture for Python
ZCA: A component architecture for PythonTimo Stollenwerk
 
Rust Mozlando Tutorial
Rust Mozlando TutorialRust Mozlando Tutorial
Rust Mozlando Tutorialnikomatsakis
 
Gevent what's the point
Gevent what's the pointGevent what's the point
Gevent what's the pointseanmcq
 
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Platonov Sergey
 
Zope component architechture
Zope component architechtureZope component architechture
Zope component architechtureAnatoly Bubenkov
 
Fourier project presentation
Fourier project  presentationFourier project  presentation
Fourier project presentation志璿 楊
 
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
 
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 2014Fantix King 王川
 
Java Concurrency Idioms
Java Concurrency IdiomsJava Concurrency Idioms
Java Concurrency IdiomsAlex 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 matterDawid Weiss
 
Aspect Mining for Large Systems
Aspect Mining for Large SystemsAspect Mining for Large Systems
Aspect Mining for Large SystemsThomas 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 moduleSaúl Ibarra Corretgé
 

Tendances (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
 

En vedette

Introduction a taste of french
Introduction a taste of frenchIntroduction a taste of french
Introduction a taste of frenchDavid 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 SalonsPeggy Wynne Borgman
 
Profile7 services 2015
Profile7 services 2015Profile7 services 2015
Profile7 services 2015Profile7
 
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.1leafboi
 
電腦鑑識程序之研究
電腦鑑識程序之研究電腦鑑識程序之研究
電腦鑑識程序之研究guestce8b9
 
E Commerce
E CommerceE Commerce
E Commercebootbeet
 
Exploring Healthcare With Second Life
Exploring Healthcare With Second LifeExploring Healthcare With Second Life
Exploring Healthcare With Second Liferdpritchard
 
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 SystemZbigniew Jerzak
 
資料庫延續
資料庫延續資料庫延續
資料庫延續guestce8b9
 
NMT Product Possibilities Part 2
NMT Product Possibilities Part 2NMT Product Possibilities Part 2
NMT Product Possibilities Part 2metalplastech
 

En vedette (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
 

Similaire à 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 + ProcessingDemetrio Siragusa
 
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 RustGermán Küber
 
Arduino coding class part ii
Arduino coding class part iiArduino coding class part ii
Arduino coding class part iiJonah 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.docxajoy21
 
Game unleashedjavascript
Game unleashedjavascriptGame unleashedjavascript
Game unleashedjavascriptReece 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 RunMaja 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 runMaja 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 .pdfarorasales234
 
-- 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.pdfAdrianEBJKingr
 
[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
 
Actionscript 3 - Session 4 Core Concept
Actionscript 3 - Session 4 Core ConceptActionscript 3 - Session 4 Core Concept
Actionscript 3 - Session 4 Core ConceptOUM SAOKOSAL
 
NoiseGen at Arlington Ruby 2012
NoiseGen at Arlington Ruby 2012NoiseGen at Arlington Ruby 2012
NoiseGen at Arlington Ruby 2012awwaiid
 
Example of JAVA Program
Example of JAVA ProgramExample of JAVA Program
Example of JAVA ProgramTrenton 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 kotlinAhmad Arif Faizin
 

Similaire à 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
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 

Dernier (20)

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

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