Class: Scruby::Env

Inherits:
Object show all
Defined in:
lib/scruby/audio/env.rb

Constant Summary collapse

SHAPE_NAMES =
{
  :step => 0,
  :lin => 1,
  :linear => 1,
  :exp => 2,
  :exponential => 2,
  :sin => 3,
  :sine => 3,
  :wel => 4,
  :welch => 4,
  :sqr => 6,
  :squared => 6,
  :cub => 7,
  :cubed => 7
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(levels, times, curves = :lin, release_node = nil, loop_node = nil) ⇒ Env

Returns a new instance of Env.

Raises:

  • (ArgumentError)


20
21
22
23
# File 'lib/scruby/audio/env.rb', line 20

def initialize( levels, times, curves = :lin, release_node = nil, loop_node = nil )
  @levels, @times, @curves, @release_node, @loop_node = levels, times, curves.to_array, release_node, loop_node
  raise ArgumentError, "levels and times should be array" unless levels.instance_of?(Array) and times.instance_of?(Array)
end

Instance Attribute Details

#arrayObject

Returns the value of attribute array.



3
4
5
# File 'lib/scruby/audio/env.rb', line 3

def array
  @array
end

#curvesObject

Returns the value of attribute curves.



3
4
5
# File 'lib/scruby/audio/env.rb', line 3

def curves
  @curves
end

#levelsObject

Returns the value of attribute levels.



3
4
5
# File 'lib/scruby/audio/env.rb', line 3

def levels
  @levels
end

#release_nodeObject

Returns the value of attribute release_node.



3
4
5
# File 'lib/scruby/audio/env.rb', line 3

def release_node
  @release_node
end

#timesObject

Returns the value of attribute times.



3
4
5
# File 'lib/scruby/audio/env.rb', line 3

def times
  @times
end

Class Method Details

.adsr(attackTime = 0.01, decayTime = 0.3, sustainLevel = 0.5, releaseTime = 1.0, peakLevel = 1.0, curve = -4.0,, bias = 0.0) ⇒ Object



53
54
55
# File 'lib/scruby/audio/env.rb', line 53

def adsr( attackTime=0.01, decayTime=0.3, sustainLevel=0.5, releaseTime=1.0, peakLevel=1.0, curve = -4.0, bias = 0.0 )
  new( [0, peakLevel, peakLevel * sustainLevel, 0].collect{ |e| e + bias }, [attackTime, decayTime, releaseTime], curve, 2 )
end

.asr(attackTime = 0.01, sustainLevel = 1.0, releaseTime = 1.0, curve = -4.0 )) ⇒ Object



57
58
59
# File 'lib/scruby/audio/env.rb', line 57

def asr( attackTime=0.01, sustainLevel=1.0, releaseTime=1.0, curve = -4.0 )
  new( [0, sustainLevel, 0], [attackTime, releaseTime], curve, 1 )
end

.cutoff(releaseTime = 0.1, level = 1.0, curve = :lin) ⇒ Object



45
46
47
# File 'lib/scruby/audio/env.rb', line 45

def cutoff( releaseTime = 0.1, level = 1.0, curve = :lin )
  new( [level, 0], [releaseTime], curve, 0 )
end

.dadsr(delayTime = 0.1, attackTime = 0.01, decayTime = 0.3, sustainLevel = 0.5, releaseTime = 1.0, peakLevel = 1.0, curve = -4.0,, bias = 0.0) ⇒ Object



49
50
51
# File 'lib/scruby/audio/env.rb', line 49

def dadsr( delayTime=0.1, attackTime=0.01, decayTime=0.3, sustainLevel=0.5, releaseTime=1.0, peakLevel=1.0, curve = -4.0, bias = 0.0 )
  new( [0, 0, peakLevel, peakLevel * sustainLevel, 0].collect{ |e| e + bias }, [delayTime, attackTime, decayTime, releaseTime], curve, 3 )
end

.linen(attackTime = 0.01, sustainTime = 1.0, releaseTime = 1.0, level = 1.0, curve = :lin) ⇒ Object



41
42
43
# File 'lib/scruby/audio/env.rb', line 41

def linen( attackTime=0.01, sustainTime=1.0, releaseTime=1.0, level=1.0, curve = :lin )
  new [0, level, level, 0], [attackTime, sustainTime, releaseTime], curve
end

.perc(attackTime = 0.01, releaseTime = 1.0, level = 1.0, curve = -4.0 )) ⇒ Object



37
38
39
# File 'lib/scruby/audio/env.rb', line 37

def perc( attackTime=0.01, releaseTime=1.0, level=1.0, curve = -4.0 )
  new( [0, level, 0], [attackTime, releaseTime], curve )
end

.sine(dur = 1.0, level = 1.0) ⇒ Object



32
33
34
35
# File 'lib/scruby/audio/env.rb', line 32

def sine(dur = 1.0, level = 1.0)
  dur = (dur * 0.5)
  new( [0, level, 0], [dur, dur], :sine)
end

.triangle(dur = 1.0, level = 1.0) ⇒ Object

fixed duration envelopes



27
28
29
30
# File 'lib/scruby/audio/env.rb', line 27

def triangle(dur = 1.0, level = 1.0)
  dur = (dur * 0.5)
  new( [0, level, 0], [dur, dur] )
end

Instance Method Details

#collect_constantsObject

:nodoc:



93
94
# File 'lib/scruby/audio/env.rb', line 93

def collect_constants #:nodoc:
end

#curve_valuesObject



75
76
77
78
79
# File 'lib/scruby/audio/env.rb', line 75

def curve_values
  curves.collect do |curve| 
    curve.valid_ugen_input? ? curve : 0
  end
end

#loop_nodeObject



85
86
87
# File 'lib/scruby/audio/env.rb', line 85

def loop_node
  @loop_node ||= -99
end

#shape_numbersObject



69
70
71
72
73
# File 'lib/scruby/audio/env.rb', line 69

def shape_numbers
  curves.collect do |curve| 
    curve.valid_ugen_input? ? 5 : SHAPE_NAMES[curve]
  end
end

#to_arrayObject



64
65
66
67
# File 'lib/scruby/audio/env.rb', line 64

def to_array
  *contents = levels[0], times.size, release_node, loop_node
  contents + levels[1..-1].wrap_and_zip( times, shape_numbers, curve_values  ).flatten
end

#valid_ugen_input?Boolean

returns true

Returns:

  • (Boolean)


89
90
91
# File 'lib/scruby/audio/env.rb', line 89

def valid_ugen_input? #returns true
  true
end