Sha256: 870c0397907a6c14a95358bac4650aafbb439e64ab3e6ea1f06400bc2c6f11c9

Contents?: true

Size: 1.23 KB

Versions: 6

Compression:

Stored size: 1.23 KB

Contents

# downloaded from http://github.com/aanand/feepogram
class Feepogram
  attr_reader :bloops, :length

  def initialize(bloops, &block)
    @bloops = bloops
    @length = 0

    @sounds        = {}
    @tracks        = {}
    @track_lengths = {}

    instance_eval(&block)
  end

  def metaclass
    class << self; self; end
  end

  def metaclass_eval(&block)
    metaclass.class_eval(&block)
  end

  def sound(name, base, &block)
    name = name.to_sym

    sound = bloops.sound(base)

    @sounds[name]        = sound
    @tracks[name]        = ""
    @track_lengths[name] = 0

    block.call(sound)

    instance_variable_set("@#{name}", sound)

    metaclass_eval do
      define_method(name) do |notes|
        dub(name, notes)
      end
    end
  end

  def phrase(&block)
    instance_eval(&block)
    @length += 32
  end

  def dub sound_name, notes
    catchup = @length - @track_lengths[sound_name]

    @tracks[sound_name] << ("4 " * catchup)
    @tracks[sound_name] << notes
    @track_lengths[sound_name] = length+32
  end

  def play
    @tracks.each do |sound_name, notes|
      bloops.tune @sounds[sound_name], notes

      #puts "#{sound_name}: #{notes.gsub(/\s+/, ' ')}"
    end

    bloops.play
    sleep 1 while !bloops.stopped?
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
scarpe-0.4.0 examples/bloopsaphone/working/feepogram.rb
scarpe-0.3.0 examples/bloopsaphone/working/feepogram.rb
scarpe-0.2.2 examples/bloopsaphone/working/feepogram.rb
lacci-0.2.1 examples/bloopsaphone/working/feepogram.rb
scarpe-0.2.1 examples/bloopsaphone/working/feepogram.rb
scarpe-0.2.0 examples/bloopsaphone/working/feepogram.rb