The original sketch was a blank-screen here is lame attempt to make it a bit more interesting, note use of ruby-processings map1d convenience method in favour of vanilla processings map convenience method (map is used for a different function in ruby, and python and a host of other languages for that matter). This one of those sketches that needs to use jruby-complete (some permission thing according to headius).
# # This is a sound file player. # NB: requires jruby-complete to run # either --nojruby flag or use config # load_library :sound include_package 'processing.sound' attr_reader :sound_file def setup size 640, 360 background 255 no_stroke # Load a soundfile @sound_file = SoundFile.new(self, 'vibraphon.aiff') report_settings # Play the file in a loop sound_file.loop end def draw red = map1d(mouse_x, (0..width), (30..255)) green = map1d(mouse_y, (height..0), (30..255)) fill(red, green, 0, 100) ellipse(mouse_x, mouse_y, 10, 10) manipulate_sound end def manipulate_sound # Map mouse_x from 0.25 to 4.0 for playback rate. 1 equals original playback # speed 2 is an octave up 0.5 is an octave down. sound_file.rate(map1d(mouse_x, (0..width), (0.25..4.0))) # Map mouse_y from 0.2 to 1.0 for amplitude sound_file.amp(map1d(mouse_y, (0..width), (0.2..1.0))) # Map mouse_y from -1.0 to 1.0 for left to right sound_file.pan(map1d(mouse_y, (0..height), (-1.0..1.0))) end def report_settings # These methods return useful infos about the file p format('SFSampleRate= %d Hz', sound_file.sample_rate) p format('SFSamples= %d samples', sound_file.frames) p format('SFDuration= %d seconds', sound_file.duration) end