109 lines
No EOL
2.4 KiB
Python
109 lines
No EOL
2.4 KiB
Python
from .soundnode import SoundNode
|
|
from .notes import *
|
|
|
|
class Sonnum:
|
|
|
|
def __init__(self, compiler):
|
|
|
|
self.c = compiler
|
|
self.nodes = [] # {order: name}
|
|
self.properties = dict() # {k: v}
|
|
|
|
def setup(self, endtick):
|
|
|
|
endtick = self.sec(endtick)
|
|
self.end = endtick
|
|
self.endtick(endtick)
|
|
|
|
self.left = self.relay()
|
|
self.right = self.relay()
|
|
|
|
self.left.act("setpos", 0, 0, self.left, None, [-0.3, 0, 0])
|
|
self.right.act("setpos", 0, 0, self.right, None, [0.3, 0, 0])
|
|
|
|
def add_node(self, name, freq_q):
|
|
|
|
order = len(self.nodes)
|
|
node = SoundNode(self, order, name)
|
|
node.freq_q = freq_q
|
|
self.nodes.append(node)
|
|
|
|
return node
|
|
|
|
def node_by_order(self, order):
|
|
|
|
for node in self.nodes:
|
|
if node.order == order:
|
|
return node
|
|
|
|
def g(self, k):
|
|
return self.properties.get(k)
|
|
|
|
def s(self, k, v):
|
|
self.properties[k] = v
|
|
|
|
def act(self, *args):
|
|
self.c.add_activity(*args)
|
|
|
|
def node(self, freq_q = 1):
|
|
|
|
node = self.add_node("", freq_q)
|
|
fakenode = SoundNode(self, freq_q, '')
|
|
self.act('create', 0, 0, node, fakenode, [])
|
|
|
|
return node
|
|
|
|
def sec(self, seconds):
|
|
return seconds * 44100
|
|
|
|
def note(self, note):
|
|
return note_to_freq(note)
|
|
|
|
def relay(self):
|
|
|
|
node = self.add_node("", 0)
|
|
self.act('create', 0, 0, node, None, [])
|
|
self.act('relay', 0, self.g('endtick'), node, None, [])
|
|
|
|
return node
|
|
|
|
def endtick(self, endtick):
|
|
|
|
self.act('endtick', 0, endtick, None, None, [])
|
|
self.s('endtick', endtick)
|
|
|
|
def wire(self, src_nodes, trg_nodes):
|
|
|
|
if not isinstance(src_nodes, list):
|
|
src_nodes = [src_nodes]
|
|
|
|
if not isinstance(trg_nodes, list):
|
|
trg_nodes = [trg_nodes]
|
|
|
|
for src_node in src_nodes:
|
|
for trg_node in trg_nodes:
|
|
self.act('feed', 0, 0, src_node, trg_node, [0, 0])
|
|
|
|
def air(self, src_nodes, trg_nodes):
|
|
|
|
if not isinstance(src_nodes, list):
|
|
src_nodes = [src_nodes]
|
|
|
|
if not isinstance(trg_nodes, list):
|
|
trg_nodes = [trg_nodes]
|
|
|
|
for src_node in src_nodes:
|
|
for trg_node in trg_nodes:
|
|
self.act('feed', 0, 0, src_node, trg_node, [0, 1])
|
|
|
|
def feed(self, src_nodes, src_pin, trg_nodes, trg_pin):
|
|
|
|
if not isinstance(src_nodes, list):
|
|
src_nodes = [src_nodes]
|
|
|
|
if not isinstance(trg_nodes, list):
|
|
trg_nodes = [trg_nodes]
|
|
|
|
for src_node in src_nodes:
|
|
for trg_node in trg_nodes:
|
|
self.act('feed', 0, 0, src_node, trg_node, [src_pin, trg_pin]) |