86 lines
No EOL
2 KiB
Python
86 lines
No EOL
2 KiB
Python
# Here, s stands for the sonnum object,
|
|
# c stands for compiler object
|
|
|
|
OPCODES = {
|
|
|
|
'create': 0,
|
|
'wire': 1,
|
|
'air': 2,
|
|
'endtick': 3,
|
|
'relay': 4,
|
|
'accumulate': 5,
|
|
'reset': 6,
|
|
'setfreq': 7,
|
|
'setpos': 8,
|
|
|
|
}
|
|
|
|
def i_create_simple(c, s, name):
|
|
# ;name*
|
|
|
|
node = s.add_node(name)
|
|
c.add_activity('create', 0, 0, node, None, [])
|
|
|
|
def i_create_relay(c, s, name):
|
|
# ;name@
|
|
|
|
node = s.add_node(name)
|
|
c.add_activity('create', 0, 0, node, None, [])
|
|
c.add_activity('relay', 0, s.g('endtick'), node, None, [])
|
|
|
|
def i_create_accumulate(c, s, name):
|
|
# ;name@
|
|
|
|
node = s.add_node(name)
|
|
c.add_activity('create', 0, 0, node, None, [])
|
|
c.add_activity('accumulate', 0, s.g('endtick'), node, None, [])
|
|
|
|
def i_end_tick(c, s, endtick):
|
|
# ;endtick!
|
|
c.add_activity('endtick', 0, endtick, None, None, [])
|
|
s.s('endtick', endtick)
|
|
|
|
def i_wire(c, s, src_name, trg_name):
|
|
# ;name=>name
|
|
|
|
src_node = s.node_by_name(src_name)
|
|
trg_node = s.node_by_name(trg_name)
|
|
|
|
if src_node and trg_node:
|
|
c.add_activity('wire', 0, 0, src_node, trg_node, [])
|
|
|
|
def i_air(c, s, src_name, trg_name):
|
|
# ;name->name
|
|
|
|
src_node = s.node_by_name(src_name)
|
|
trg_node = s.node_by_name(trg_name)
|
|
|
|
if src_node and trg_node:
|
|
c.add_activity('air', 0, 0, src_node, trg_node, [])
|
|
|
|
def i_setpos(c, s, start_tick, end_tick, node_name, x, y, z):
|
|
|
|
node = s.node_by_name(node_name)
|
|
c.add_activity('setpos', start_tick, end_tick, node, None, [x, y, z])
|
|
|
|
def i_setfreq(c, s, start_tick, end_tick, node_name, freq, r_amp):
|
|
|
|
node = s.node_by_name(node_name)
|
|
c.add_activity('setfreq', start_tick, end_tick, node, None, [freq, r_amp])
|
|
|
|
def i_triangle(c, s, start_tick, end_tick, node_name, harmonics_q, freq, r_amp):
|
|
|
|
node = s.node_by_name(node_name)
|
|
c.add_activity('reset', 0, 0, node, None, [])
|
|
|
|
for i in range(0, int(harmonics_q)):
|
|
|
|
har_freq = freq*(i*2 + 1)
|
|
|
|
if i%2 == 0:
|
|
m = 1
|
|
else:
|
|
m = -1
|
|
|
|
c.add_activity('setfreq', start_tick, end_tick, node, None, [har_freq, m * r_amp / float((i*2 + 1)**2)])
|
|
|