Module: Scruby::Audio::Ugens

Defined in:
lib/scruby/audio/ugens/ugen.rb,
lib/scruby/audio/ugens/ugens.rb,
lib/scruby/audio/ugens/in_out.rb,
lib/scruby/audio/ugens/env_gen.rb,
lib/scruby/audio/ugens/multi_out_ugens.rb,
lib/scruby/audio/ugens/operation_ugens.rb,
lib/scruby/audio/ugens/ugen_operations.rb

Defined Under Namespace

Modules: OperationUgens, UgenOperations Classes: Control, EnvGen, In, MultiOutUgen, Out, OutputProxy, Ugen

Class Method Summary collapse

Class Method Details

.define_ugen(name, rates) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/scruby/audio/ugens/ugens.rb', line 7

def self.define_ugen(name, rates)
  rate_name = {:audio => :ar, :control => :kr, :scalar => :ir, :demand => :new}
  rates.delete_if{ |key, value| key == :demand  } #I don't know what to do with these
  
  methods = rates.collect{ |r| ":#{rate_name[r.first]}" }.join(', ')
  
  klass = "class #{name} < Ugen\nclass << self\n" +
  rates.collect do |r|
      new_args = ( [r.first] + r.last.collect{|a|a.first} ).join(', ')
      args = (r.last + [[:mul,1],[:add,0]]).collect{ |a| a.compact.join(' = ')}.join(', ')
      " def #{rate_name[r.first]}(#{args})\n" +
      "   new(:#{new_args}).muladd(mul, add)" + 
      "\n end"
  end.join("\n") + "\nnamed_args_for #{methods}\nend\nend\n"

  self.class_eval klass
end