// Learning Processing // Daniel Shiffman // http://www.learningprocessing.com // Example 20-4: Manipulating sound (with Sonia) // Import the Sonia library import pitaru.sonia_v2_9.*; // A Sample object (for a sound) Sample tone; void setup() { size(200,200); // Start Sonia engine. Sonia.start(this); // Create a new sample object. tone = new Sample( "tone.wav" ); // Loop the sound forever // (well, at least until stop() is called) tone.repeat(); smooth(); } void draw() { if (tone.isPlaying()) { background(255); } else { background(100); } // Set the volume to a range between 0 and 1.0 float ratio = (float) mouseX / width; tone.setVolume(ratio); // Set the rate to a range between 0 and 88,200 // Changing the rate alters the pitch ratio = (float) mouseY / height; // The rate is set according to the mouseY position. tone.setRate(ratio*88200); // Draw some rectangles to show what is going on stroke(0); fill(175); rect(0,160,mouseX,20); stroke(0); fill(175); rect(160,0,20,mouseY); } // Pressing the mouse stops and starts the sound void mousePressed() { if (tone.isPlaying()) { tone.stop(); // The sound can be stopped with the function stop(). } else { tone.repeat(); } } // Close the sound engine public void stop() { Sonia.stop(); super.stop(); }