Sound library

5A vanilla processing (java) library

First load the sound library (assumes it was installed using propane --install Sound)

You might just as well include_package to get namespace access to the processing.sound package.

# This is a simple pink noise generator. It can be started with .play(amp).
# In this example it is started and stopped by clicking into the renderer window.
require 'propane'

class PinkNoiseApp < Propane::App
  load_library :sound
  include_package 'processing.sound'

  attr_reader :amp, :noise

  def settings
    size(640, 360)
  end

  def setup
    sketch_title 'Pink Noise'
    background(255)
    @amp = 0.0
    # Create the noise generator
    @noise = PinkNoise.new(self)
    noise.play(amp)
  end      

  def draw
    # Map mouseX from 0.0 to 1.0 for amplitude
    noise.amp(map1d(mouse_x, (0..width), (0.0..1.0)))
    # Map mouseY from -1.0 to 1.0 for left to right
    noise.pan(map1d(mouse_y, (0..height), (-1.0..1.0)))
  end
end

PinkNoiseApp.new

Listing vanilla processing contributed libraries and their urls

wget http://download.processing.org/contribs/contribs.txt

Installing contributed vanilla processing libraries

Install libraries to your ~/.propane/libraries folder. NB: this created for you when you install the glvideo, sound or video libraries. The one unfortunate / fortunate thing is that you will be responsible for updating versions manually (can be good / bad thing).

propane -i Sound
propane -i Video
propane -i glvideo

It can make sense to convert the library names and jars from camelcase to snakecase, (ie when library creators have messed up) but just be to be consistent, as example below

cd ~/.propane/libraries
wget http://staff.city.ac.uk/~jwo/giCentre/utils/gicentreUtils.zip
unzip gicentreUtils.zip # NB: British English spelling of centre
mv gicentreUtils gicenter_utils # Use snake case, and convert spelling
cd gicenter_utils/library
mv gicentreUtils.jar gicenter_utils.jar

Here is an example sketch translated to propane, main differences are how we load libraries and access package namespace in propane. Also note the use of the data_path wrapper to access sketch data folder. Another twist is the need to cast array of ruby Numbers to java float.

require 'propane'
# Sketch to demonstrate the use of the BarChart class to draw simple bar charts.
# Version 1.3, 6th February, 2016.
# Author Jo Wood, giCentre.
class BarChartSketch < Propane::App
  load_library :gicenter_utils
  include_package 'org.gicentre.utils.stat' # British spelling

  def settings
    size(800, 300)
    smooth
  end

  def setup # a static sketch no need for draw loop
    sketch_title 'Bar Chart Sketch'
    title_font = load_font(data_path('Helvetica-22.vlw'))
    small_font = load_font(data_path('Helvetica-12.vlw'))
    text_font(small_font)
    bar_chart = BarChart.new(self)
    data_float = [
      2_462, 2_801, 3_280, 3_983, 4_490, 4_894, 5_642, 6_322, 6_489, 6_401,
      7_657, 9_649, 9_767, 12_167, 15_154, 18_200, 23_124, 28_645, 39_471
    ]
    bar_chart.setData(data_float.to_java(:float))
    data_label = %w(1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 2010)
    bar_chart.setBarLabels(data_label)
    bar_chart.setBarColour(color(200, 80, 80, 100))
    bar_chart.setBarGap(2)
    bar_chart.setValueFormat('$###,###')
    bar_chart.showValueAxis(true)
    bar_chart.showCategoryAxis(true)
    background(255)
    bar_chart.draw(10, 10, width - 20, height - 20)
    fill(120)
    text_font(title_font)
    text('Income per person, United Kingdom', 70, 30)
    text_height = text_ascent # of title font
    text_font(small_font)
    text('Gross domestic product measured in inflation-corrected $US', 70, 30 + text_height)
  end
end

BarChartSketch.new

bar chart sketch

You can even use processings built in libraries, if you put them ~/.propane/libraries folder.

#!/usr/bin/env jruby -v -W2
#
#  Geometry
#  by Marius Watz.
#

require 'propane'

class Complex3D < Propane::App
  load_library :pdf
  include_package 'processing.pdf'
  attr_reader :num, :pt, :style, :dosave

  def setup
    sketch_title 'Complex 3D'
    background(255)
    @dosave = false
    @num = 150
    @pt = []
    @style = []
    # Set up arc shapes
    index = 0
    (0...num).each do |i|
      pt << rand(TAU) # Random X axis rotation
      pt << rand(TAU) # Random Y axis rotation
      pt << rand(60..80) # Short to quarter-circle arcs
      pt[pt.length - 1] = rand(8..27) * 10 if rand(100) > 90
      pt << rand(2..50) * 5 # Radius. Space them out nicely
      pt << rand(4..32) # Width of band
      pt[pt.length - 1] = rand(40..60) if (rand(100) > 90) # Width of band
      pt << rand(0.005..0.0334)# Speed of rotation
      # get colors
      prob = rand(100)
      case prob
      when (0..30)
        style[i * 2] = color_blended(rand, 255,0,100, 255,0,0, 210)
      when (30..70)
        style[i * 2] = color_blended(rand, 0,153,255, 170,225,255, 210)
      when (70..90)
        style[i * 2] = color_blended(rand, 200,255,0, 150,255,0, 210)
      else
        style[i * 2] = color(255,255,255, 220)
      end
      case prob
      when (0..50)
        style[i * 2] = color_blended(rand, 200,255,0, 50,120,0, 210)
      when (50..90)
        style[i * 2] = color_blended(rand, 255,100,0, 255,255,0, 210)
      else
        style[i * 2] = color(255, 255, 255, 220)
        style[i * 2 + 1] = rand(100) % 3
      end
    end
  end