User Tools

Site Tools


courses:intro.prototyping.fall.2016.oct07

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

courses:intro.prototyping.fall.2016.oct07 [2016/10/10 01:09] (current)
rickard created
Line 1: Line 1:
 +===Sound in Processing ===
 +
 +Today we worked with a library for sound called Minim.
 +[[http://​code.compartmental.net/​minim/​javadoc/​|Minim documentation]]
 +
 +== Free sound for downloading==
 +
 +http://​www.mediacollege.com/​downloads/​sound-effects/​
 +
 +http://​www.freesoundeffects.com/​
 +
 +There are also a whole heap of sounds on the server under the "​public"​ folder.
 +
 +We moved on to a brief look into object oriented programming and on to play with sound using the Minim [[http://​code.compartmental.net/​minim/​|library]]. The full documentation is [[http://​code.compartmental.net/​minim/​javadoc/​|here]].
 +
 +
 +Two of the classes we played around with was audioSample and audioPlayer.
 +
 +== Audiosample - short samples ==
 +<code java>
 +import ddf.minim.*;​
 + 
 +Minim minim;
 +AudioSample money, gun;
 + 
 +void setup()
 +{
 +  size(640, 480);
 +  // always start Minim before you do anything with it
 +  minim = new Minim(this);​
 +  // load soundfile from the data folder
 +  money = minim.loadSample("​CASH2.WAV"​);​
 +  gun = minim.loadSample("​SHOTGUN-X3.WAV"​);​
 +  ​
 +}
 + 
 +void draw()
 +{
 +  //nothing to actually draw
 +}
 + 
 +void keyPressed()
 +{  ​
 +  if ( key == '​y'​ ) 
 +  {
 +    money.trigger();​
 +  }
 +  ​
 +  if ( key == '​p'​ ) 
 +  {
 +    gun.trigger();​
 +  }
 +}
 +  ​
 +void stop()
 +{
 +  // always close Minim audio classes when you are done with them
 +  money.close();​
 +  gun.close();​
 +  minim.stop();​
 +}
 +</​code>​
 +
 +
 +
 +== AudioPlayer - longer audio files ==
 +
 +<code java>
 +import ddf.minim.*;​
 +
 +Minim minim;
 +AudioPlayer soundtrack;
 +
 +void setup()
 +{
 +  size(640, 480);
 +  // always start Minim before you do anything with it
 +  minim = new Minim(this);​
 +  //load a file, 
 +  soundtrack = minim.loadFile("​song2.mp3"​);​
 +}
 +
 +void draw()
 +{
 +  //nothing to actually draw
 +}
 +
 +void keyPressed()
 +{
 +  if ( key == '​q'​ ) 
 +  {
 +    if(soundtrack.isPlaying()) //checking if the song is playing to choose play/pause
 +     ​soundtrack.pause();​
 +    else
 +     ​soundtrack.play();​
 +  }
 +  ​
 +  if ( key == '​w'​)
 +  {
 +    soundtrack.skip(3000);​ //skipping three seconds
 +  }
 +  ​
 +  if( key == '​e'​)
 +  {
 +    soundtrack.rewind();​ //​well...yeah,​ guess. :-)
 +  }
 +}
 +
 +void stop()
 +{
 +  // always close Minim audio classes when you are done with them
 +  soundtrack.close();​
 +  minim.stop(); ​
 +}
 +  ​
 +</​code>​
 +
 +== States/​Modes ==
 +Some of you got caught in the situation where you wanted things to trigger on things with keyPressed, for example, but only got a very quick reaction and then back to the original behavior. That is because the trigger concepts we've worked with are just a brief interaction. If you want to make lasting changes it's better to use what is called a "state machine"​ in programming. You have a variable to keep track of what "​state"​ or "​mode"​ the program is in and use keyPressed and it's siblings to change that variable. In draw() you instead have a bunch of if-statements that say what to do depending on that variable. In the example below the background color will change depending on the variable that is set by the user pressing arrow-buttons.
 +
 +<code java>
 +int mode;
 +
 +
 +void setup()
 +{
 +  size(640,​480);​
 +  mode=0;
 +}
 +
 +void draw()
 +{
 +  if(mode==0)
 +  {
 +    background(128,​128,​255);​
 +  }
 +  ​
 +  if(mode==1)
 +  {
 +    background(128,​255,​128);​
 +  }
 +  ​
 +  if(mode==2)
 +  {
 +    background(255,​128,​128);​
 +  }
 +  ​
 +  if(mode==3)
 +  {
 +    background(255,​255,​128);​
 +  }
 +}
 +
 +void keyPressed()
 +{
 +   ​if(key==CODED)
 +   {
 +     ​if(keyCode==UP)
 +     {
 +       ​mode=0;​
 +     }
 +     ​if(keyCode==DOWN)
 +     {
 +       ​mode=1;​
 +     }
 +     ​if(keyCode==LEFT)
 +     {
 +       ​mode=2;​
 +     }
 +     ​if(keyCode==RIGHT)
 +     {
 +       ​mode=3;​
 +     }
 +   }
 +}
 +</​code> ​
 +
 +
 +
 +
 +== Concepts we worked with ==
 +<code java>
 +
 +audioPlayer
 +play()
 +pause()
 +rewind()
 +isPlaying()
 +position()
 +skip()
 +cue()
 +
 +
 +audioSample
 +trigger()
 +length()
 +stop()
 +</​code>​
  
courses/intro.prototyping.fall.2016.oct07.txt · Last modified: 2016/10/10 01:09 by rickard