class Negasonic::Instrument

Attributes

all[RW]
input_node[R]
name[R]

Public Class Methods

add(name) click to toggle source
# File lib/negasonic/instrument.rb, line 17
def add(name)
  new(name).tap do |instrument|
    @all << instrument
  end
end
find(name) click to toggle source
# File lib/negasonic/instrument.rb, line 11
def find(name)
  @all.find do |instrument|
    instrument.name == name
  end
end
new(name) click to toggle source
# File lib/negasonic/instrument.rb, line 26
def initialize(name)
  @name = name
  @nodes = []
  @effects_set = EffectsSet.new
end

Public Instance Methods

connect_nodes(new_synth) click to toggle source
# File lib/negasonic/instrument.rb, line 37
def connect_nodes(new_synth)
  new_nodes = [new_synth, @effects_set.nodes].flatten

  if @nodes != new_nodes
    @input_node = new_synth
    @input_node.chain(*@effects_set.nodes)

    old_nodes = @nodes
    @nodes = new_nodes

    Tone::Transport.schedule_after(1) do |time|
      old_nodes.each(&:dispose)
    end
  end
end
effects(&block) click to toggle source
# File lib/negasonic/instrument.rb, line 32
def effects(&block)
  @effects_set.reload
  @effects_set.instance_eval(&block)
end