Class: Deftones::Instrument::Synth
Instance Attribute Summary collapse
#mute, #output, #volume
#context, #input
Instance Method Summary
collapse
-
#active? ⇒ Boolean
-
#initialize(type: :triangle, attack: 0.005, decay: 0.1, sustain: 0.3, release: 1.0, context: Deftones.context, &block) ⇒ Synth
constructor
-
#play(note, duration: "8n", at: nil, velocity: 1.0) ⇒ Object
-
#resolve_time(time) ⇒ Object
private
-
#trigger_attack(note, time = nil, velocity = 1.0) ⇒ Object
-
#trigger_attack_release(note, duration, time = nil, velocity = 1.0) ⇒ Object
-
#trigger_release(time = nil) ⇒ Object
#apply_volume!, #dispose, #get, #input, #mute?, #releaseAll, #release_all, #render, #render_block, #set, #triggerAttack, #triggerAttackRelease, #triggerRelease
#>>, #attach_destination, #attach_source, #block_time, #chain, #channel_count, #channel_count_mode, #channel_interpretation, #connect, #connected?, #default_input_channels, #default_output_channels, #destination_for_connection, #detach_all_destinations, #detach_destination, #detach_source, #disconnect, #dispose, #disposed?, #fan, #get, #immediate, #input_for_index, #inputs, #mix_source_blocks, #multichannel_process?, #name, #normalize_connection_index, #normalize_output_block, #now, #number_of_inputs, #number_of_outputs, #output, #output_for_connection, #output_for_index, #outputs, #process, #raise_connection_index_error!, #reaches_node?, #render, #render_block, #sample_time, #set, #to_destination, #to_frequency, #to_master, #to_midi, #to_output, #to_s, #to_seconds, #to_ticks, #uses_legacy_render_for_block?, #validate_connectable!, #validate_connection_index!
Constructor Details
#initialize(type: :triangle, attack: 0.005, decay: 0.1, sustain: 0.3, release: 1.0, context: Deftones.context, &block) ⇒ Synth
Returns a new instance of Synth.
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/deftones/instrument/synth.rb', line 8
def initialize(type: :triangle, attack: 0.005, decay: 0.1, sustain: 0.3, release: 1.0,
context: Deftones.context, &block)
super(context: context)
@oscillator = Source::Oscillator.new(type: type, context: context)
@envelope = Component::AmplitudeEnvelope.new(
attack: attack,
decay: decay,
sustain: sustain,
release: release,
context: context
)
@oscillator.start(0.0)
@oscillator >> @envelope >> @output
block&.call(self)
end
|
Instance Attribute Details
#envelope ⇒ Object
Returns the value of attribute envelope.
6
7
8
|
# File 'lib/deftones/instrument/synth.rb', line 6
def envelope
@envelope
end
|
#oscillator ⇒ Object
Returns the value of attribute oscillator.
6
7
8
|
# File 'lib/deftones/instrument/synth.rb', line 6
def oscillator
@oscillator
end
|
Instance Method Details
#active? ⇒ Boolean
47
48
49
|
# File 'lib/deftones/instrument/synth.rb', line 47
def active?
@envelope.active?
end
|
#play(note, duration: "8n", at: nil, velocity: 1.0) ⇒ Object
24
25
26
|
# File 'lib/deftones/instrument/synth.rb', line 24
def play(note, duration: "8n", at: nil, velocity: 1.0)
trigger_attack_release(note, duration, at, velocity)
end
|
#resolve_time(time) ⇒ Object
53
54
55
56
57
|
# File 'lib/deftones/instrument/synth.rb', line 53
def resolve_time(time)
return context.current_time if time.nil?
Deftones::Music::Time.parse(time)
end
|
#trigger_attack(note, time = nil, velocity = 1.0) ⇒ Object
28
29
30
31
32
33
|
# File 'lib/deftones/instrument/synth.rb', line 28
def trigger_attack(note, time = nil, velocity = 1.0)
scheduled_time = resolve_time(time)
@oscillator.frequency.set_value_at_time(note, scheduled_time)
@envelope.trigger_attack(scheduled_time, velocity)
self
end
|
#trigger_attack_release(note, duration, time = nil, velocity = 1.0) ⇒ Object
40
41
42
43
44
45
|
# File 'lib/deftones/instrument/synth.rb', line 40
def trigger_attack_release(note, duration, time = nil, velocity = 1.0)
scheduled_time = resolve_time(time)
trigger_attack(note, scheduled_time, velocity)
trigger_release(scheduled_time + Deftones::Music::Time.parse(duration))
self
end
|
#trigger_release(time = nil) ⇒ Object
35
36
37
38
|
# File 'lib/deftones/instrument/synth.rb', line 35
def trigger_release(time = nil)
@envelope.trigger_release(resolve_time(time))
self
end
|