# Here, s stands for the sonnum object, # c stands for compiler object OPCODES = { 'create': 0, 'wire': 1, 'air': 2, 'endtick': 3, 'relay': 4, 'setpos': 5, 'sine': 6, } 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_sine(c, s, start_tick, end_tick, node_name, freq, r_amp): node = s.node_by_name(node_name) c.add_activity('sine', 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)])