Class: Musicality::SuperCollider::Node

Inherits:
Object
  • Object
show all
Defined in:
lib/musicality/performance/supercollider/node.rb

Direct Known Subclasses

Group, Synth

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server, group) ⇒ Node

Returns a new instance of Node.

Raises:

  • (ArgumentError)


16
17
18
19
20
21
22
23
# File 'lib/musicality/performance/supercollider/node.rb', line 16

def initialize server, group
  raise ArgumentError unless (server.is_a?(Server) || server.nil?)
  raise ArgumentError unless (group.is_a?(Group) || group.nil?)
  @server, @group = server, group
  @id = Node.next_id
  @freed, @running = false, true
  @queue = []
end

Instance Attribute Details

#freedObject (readonly)

Returns the value of attribute freed.



14
15
16
# File 'lib/musicality/performance/supercollider/node.rb', line 14

def freed
  @freed
end

#groupObject (readonly)

Returns the value of attribute group.



14
15
16
# File 'lib/musicality/performance/supercollider/node.rb', line 14

def group
  @group
end

#idObject (readonly)

Returns the value of attribute id.



14
15
16
# File 'lib/musicality/performance/supercollider/node.rb', line 14

def id
  @id
end

#runningObject (readonly)

Returns the value of attribute running.



14
15
16
# File 'lib/musicality/performance/supercollider/node.rb', line 14

def running
  @running
end

#serverObject (readonly)

Returns the value of attribute server.



14
15
16
# File 'lib/musicality/performance/supercollider/node.rb', line 14

def server
  @server
end

Class Method Details

.next_idObject



5
6
7
# File 'lib/musicality/performance/supercollider/node.rb', line 5

def self.next_id
  @@next_id += 1
end

.reset_id_counterObject



9
10
11
# File 'lib/musicality/performance/supercollider/node.rb', line 9

def self.reset_id_counter
  @@next_id = 999
end

Instance Method Details

#after(node) ⇒ Object



88
89
90
91
# File 'lib/musicality/performance/supercollider/node.rb', line 88

def after node
  @group = node.group
  send_msg(Message.new( '/n_after', @id, node.id))
end

#before(node) ⇒ Object

def mapan end



83
84
85
86
# File 'lib/musicality/performance/supercollider/node.rb', line 83

def before node
  @group = node.group
  send_msg(Message.new( '/n_before', @id, node.id))
end

#bundle_queue(time) ⇒ Object



33
34
35
# File 'lib/musicality/performance/supercollider/node.rb', line 33

def bundle_queue time
  Bundle.new(time, *@queue.shift(@queue.size))
end

#fill(idx_or_name, value, n) ⇒ Object



67
68
69
# File 'lib/musicality/performance/supercollider/node.rb', line 67

def fill idx_or_name, value, n
  send_msg(OSC:Message.new('/n_fill', @id, idx_or_name, n, value))
end

#freeObject

def wait_for_msg expected_response_addr

@server.wait_for_msg(expected_response_addr)

end



45
46
47
48
# File 'lib/musicality/performance/supercollider/node.rb', line 45

def free
  @group, @running, freed = nil, false, true
  send_msg(Message.new('/n_free', id))
end

#send_msg(msg) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/musicality/performance/supercollider/node.rb', line 25

def send_msg msg
  if @server.nil?
    @queue.push msg
  else
    @server.send_msg(msg)
  end
end

#set(args = {}) ⇒ Object



58
59
60
# File 'lib/musicality/performance/supercollider/node.rb', line 58

def set args = {}
  send_msg(Message.new('/n_set', @id, *args.to_a.flatten))
end

#setn(args = {}) ⇒ Object



62
63
64
65
# File 'lib/musicality/performance/supercollider/node.rb', line 62

def setn args = {}
  ary = args.map {|idx_or_name, vals| [ idx_or_name, vals.size, vals ]}.flatten
  send_msg(Message.new('/n_setn', @id, *ary))
end

#startObject



50
51
52
# File 'lib/musicality/performance/supercollider/node.rb', line 50

def start
  run(true)
end

#stopObject



54
55
56
# File 'lib/musicality/performance/supercollider/node.rb', line 54

def stop
  run(false)
end

#traceObject

def query

notifying = @server.notifying
unless notifying
  @server.start_notification
end
send_msg(OSC::Message.new('/n_query', @id))
info = @server.await_notification '/n_info'
if notifying
  @server.stop_notification
end
info

end



106
107
108
# File 'lib/musicality/performance/supercollider/node.rb', line 106

def trace
  send_msg(Message.new( '/n_trace', @id))
end