fixed the pin system, workable
This commit is contained in:
parent
3f30771451
commit
f143f98948
4 changed files with 41 additions and 110 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
s.setup(s.sec(60))
|
s.setup(s.sec(10))
|
||||||
|
|
||||||
n = s.node()
|
n = s.node()
|
||||||
n.setbasefreq(0, s.note("D4"))
|
n.setbasefreq(0, s.note("D4"))
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,7 @@ pub const Activity = struct {
|
||||||
|
|
||||||
const amp = gain * math.sin(utility.corrected_tau * self.soundnode.basefreq * current_tick - self.soundnode.basephase * utility.tau);
|
const amp = gain * math.sin(utility.corrected_tau * self.soundnode.basefreq * current_tick - self.soundnode.basephase * utility.tau);
|
||||||
self.soundnode.add_r_amp(amp);
|
self.soundnode.add_r_amp(amp);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
|
const print = std.debug.print;
|
||||||
const SoundNode = @import("soundnode.zig").SoundNode;
|
const SoundNode = @import("soundnode.zig").SoundNode;
|
||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
|
|
||||||
|
|
||||||
pub const Pin = struct {
|
pub const Pin = struct {
|
||||||
|
|
||||||
uid: usize = 0,
|
|
||||||
allocator: Allocator,
|
allocator: Allocator,
|
||||||
|
|
||||||
src_node: *SoundNode,
|
src_node: *SoundNode,
|
||||||
|
|
@ -17,7 +17,6 @@ pub const Pin = struct {
|
||||||
active: u8 = 0,
|
active: u8 = 0,
|
||||||
|
|
||||||
pub fn create(allocator: Allocator,
|
pub fn create(allocator: Allocator,
|
||||||
uid: usize,
|
|
||||||
src_node: *SoundNode,
|
src_node: *SoundNode,
|
||||||
trg_node: *SoundNode,
|
trg_node: *SoundNode,
|
||||||
src_pin: usize,
|
src_pin: usize,
|
||||||
|
|
@ -27,7 +26,6 @@ pub const Pin = struct {
|
||||||
|
|
||||||
pin.* = .{
|
pin.* = .{
|
||||||
.allocator = allocator,
|
.allocator = allocator,
|
||||||
.uid = uid,
|
|
||||||
.src_node = src_node,
|
.src_node = src_node,
|
||||||
.trg_node = trg_node,
|
.trg_node = trg_node,
|
||||||
.src_pin = src_pin,
|
.src_pin = src_pin,
|
||||||
|
|
@ -71,7 +69,7 @@ pub const Pin = struct {
|
||||||
|
|
||||||
},
|
},
|
||||||
6 => {self.trg_node.in6 += self.src_node.r_amp; },
|
6 => {self.trg_node.in6 += self.src_node.r_amp; },
|
||||||
7 => {self.trg_node.in7 *= self.src_node.r_amp; },
|
7 => {self.trg_node.in7 += self.src_node.r_amp; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -104,7 +102,7 @@ pub const Pin = struct {
|
||||||
|
|
||||||
},
|
},
|
||||||
6 => {self.trg_node.in6 += self.src_node.out1; },
|
6 => {self.trg_node.in6 += self.src_node.out1; },
|
||||||
7 => {self.trg_node.in7 *= self.src_node.out1; },
|
7 => {self.trg_node.in7 += self.src_node.out1; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -137,7 +135,7 @@ pub const Pin = struct {
|
||||||
|
|
||||||
},
|
},
|
||||||
6 => {self.trg_node.in6 += self.src_node.out6; },
|
6 => {self.trg_node.in6 += self.src_node.out6; },
|
||||||
7 => {self.trg_node.in7 *= self.src_node.out6; },
|
7 => {self.trg_node.in7 += self.src_node.out6; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -170,7 +168,7 @@ pub const Pin = struct {
|
||||||
|
|
||||||
},
|
},
|
||||||
6 => {self.trg_node.in6 += self.src_node.out7; },
|
6 => {self.trg_node.in6 += self.src_node.out7; },
|
||||||
7 => {self.trg_node.in7 *= self.src_node.out7; },
|
7 => {self.trg_node.in7 += self.src_node.out7; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -181,7 +179,7 @@ pub const Pin = struct {
|
||||||
3 => {self.trg_node.in_basephase += self.src_node.gain; },
|
3 => {self.trg_node.in_basephase += self.src_node.gain; },
|
||||||
4 => {self.trg_node.in_phase += self.src_node.gain; },
|
4 => {self.trg_node.in_phase += self.src_node.gain; },
|
||||||
8 => {self.trg_node.in8 += self.src_node.gain; },
|
8 => {self.trg_node.in8 += self.src_node.gain; },
|
||||||
9 => {self.trg_node.in9 *= self.src_node.gain; },
|
9 => {self.trg_node.in9 += self.src_node.gain; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -192,7 +190,7 @@ pub const Pin = struct {
|
||||||
3 => {self.trg_node.in_basephase += self.src_node.basephase; },
|
3 => {self.trg_node.in_basephase += self.src_node.basephase; },
|
||||||
4 => {self.trg_node.in_phase += self.src_node.basephase; },
|
4 => {self.trg_node.in_phase += self.src_node.basephase; },
|
||||||
8 => {self.trg_node.in8 += self.src_node.basephase; },
|
8 => {self.trg_node.in8 += self.src_node.basephase; },
|
||||||
9 => {self.trg_node.in9 *= self.src_node.basephase; },
|
9 => {self.trg_node.in9 += self.src_node.basephase; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -203,7 +201,7 @@ pub const Pin = struct {
|
||||||
3 => {self.trg_node.in_basephase += self.src_node.phase; },
|
3 => {self.trg_node.in_basephase += self.src_node.phase; },
|
||||||
4 => {self.trg_node.in_phase += self.src_node.phase; },
|
4 => {self.trg_node.in_phase += self.src_node.phase; },
|
||||||
8 => {self.trg_node.in8 += self.src_node.phase; },
|
8 => {self.trg_node.in8 += self.src_node.phase; },
|
||||||
9 => {self.trg_node.in9 *= self.src_node.phase; },
|
9 => {self.trg_node.in9 += self.src_node.phase; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -214,7 +212,7 @@ pub const Pin = struct {
|
||||||
3 => {self.trg_node.in_basephase += self.src_node.out8; },
|
3 => {self.trg_node.in_basephase += self.src_node.out8; },
|
||||||
4 => {self.trg_node.in_phase += self.src_node.out8; },
|
4 => {self.trg_node.in_phase += self.src_node.out8; },
|
||||||
8 => {self.trg_node.in8 += self.src_node.out8; },
|
8 => {self.trg_node.in8 += self.src_node.out8; },
|
||||||
9 => {self.trg_node.in9 *= self.src_node.out8; },
|
9 => {self.trg_node.in9 += self.src_node.out8; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -225,7 +223,7 @@ pub const Pin = struct {
|
||||||
3 => {self.trg_node.in_basephase += self.src_node.out9; },
|
3 => {self.trg_node.in_basephase += self.src_node.out9; },
|
||||||
4 => {self.trg_node.in_phase += self.src_node.out9; },
|
4 => {self.trg_node.in_phase += self.src_node.out9; },
|
||||||
8 => {self.trg_node.in8 += self.src_node.out9; },
|
8 => {self.trg_node.in8 += self.src_node.out9; },
|
||||||
9 => {self.trg_node.in9 *= self.src_node.out9; },
|
9 => {self.trg_node.in9 += self.src_node.out9; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -235,7 +233,7 @@ pub const Pin = struct {
|
||||||
switch (self.trg_pin) {
|
switch (self.trg_pin) {
|
||||||
5 => {self.trg_node.in_basefreq += self.src_node.basefreq; },
|
5 => {self.trg_node.in_basefreq += self.src_node.basefreq; },
|
||||||
10 => {self.trg_node.in10 += self.src_node.basefreq; },
|
10 => {self.trg_node.in10 += self.src_node.basefreq; },
|
||||||
11 => {self.trg_node.in11 *= self.src_node.basefreq; },
|
11 => {self.trg_node.in11 += self.src_node.basefreq; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -244,7 +242,7 @@ pub const Pin = struct {
|
||||||
switch (self.trg_pin) {
|
switch (self.trg_pin) {
|
||||||
5 => {self.trg_node.in_basefreq += self.src_node.out10; },
|
5 => {self.trg_node.in_basefreq += self.src_node.out10; },
|
||||||
10 => {self.trg_node.in10 += self.src_node.out10; },
|
10 => {self.trg_node.in10 += self.src_node.out10; },
|
||||||
11 => {self.trg_node.in11 *= self.src_node.out10; },
|
11 => {self.trg_node.in11 += self.src_node.out10; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -253,7 +251,7 @@ pub const Pin = struct {
|
||||||
switch (self.trg_pin) {
|
switch (self.trg_pin) {
|
||||||
5 => {self.trg_node.in_basefreq += self.src_node.out11; },
|
5 => {self.trg_node.in_basefreq += self.src_node.out11; },
|
||||||
10 => {self.trg_node.in10 += self.src_node.out11; },
|
10 => {self.trg_node.in10 += self.src_node.out11; },
|
||||||
11 => {self.trg_node.in11 *= self.src_node.out11; },
|
11 => {self.trg_node.in11 += self.src_node.out11; },
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,6 @@ const SoundSettings = @import("settings.zig").SoundSettings;
|
||||||
const utility = @import("utility.zig");
|
const utility = @import("utility.zig");
|
||||||
|
|
||||||
|
|
||||||
pub fn singleSineTick(st: *SoundSettings, freq: f64, t: u32, phase: f64) f64 {
|
|
||||||
const ft: f64 = @floatFromInt(t);
|
|
||||||
return math.sin(st.sine_multiplier * freq * ft - phase * utility.tau);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn returnSoundNodeToList(snlist: *ArrayList(*SoundNode), sn: *SoundNode) !void {
|
pub fn returnSoundNodeToList(snlist: *ArrayList(*SoundNode), sn: *SoundNode) !void {
|
||||||
|
|
||||||
for (snlist.items, 0..) |soundnode, ind| {
|
for (snlist.items, 0..) |soundnode, ind| {
|
||||||
|
|
@ -55,43 +50,6 @@ pub fn removeSoundNodeFromList(snlist: *ArrayList(*SoundNode), sn: *SoundNode) u
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn returnPinToList(pinlist: *ArrayList(*Pin), pn: *Pin) !void {
|
|
||||||
|
|
||||||
for (pinlist.items, 0..) |pin, ind| {
|
|
||||||
|
|
||||||
if (pn.uid < pin.uid) {
|
|
||||||
try pinlist.insert(ind, pn);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
try pinlist.append(pn);
|
|
||||||
return;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn removePinFromList(pinlist: *ArrayList(*Pin), pn: *Pin) !void {
|
|
||||||
|
|
||||||
var found: u8 = 0;
|
|
||||||
var toremove: usize = 0;
|
|
||||||
|
|
||||||
for (pinlist.items, 0..) |pin, ind| {
|
|
||||||
|
|
||||||
if (pn.uid == pin.uid) {
|
|
||||||
toremove = ind;
|
|
||||||
found = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (found == 1) {
|
|
||||||
_ = pinlist.orderedRemove(toremove);
|
|
||||||
}
|
|
||||||
|
|
||||||
return found;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn reactivateSoundNode(alist: *ArrayList(*SoundNode), plist: *ArrayList(*SoundNode), sn: *SoundNode) !void {
|
pub fn reactivateSoundNode(alist: *ArrayList(*SoundNode), plist: *ArrayList(*SoundNode), sn: *SoundNode) !void {
|
||||||
|
|
||||||
|
|
@ -109,21 +67,6 @@ pub fn deactivateSoundNode(alist: *ArrayList(*SoundNode), plist: *ArrayList(*Sou
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn reactivatePin(alist: *ArrayList(*Pin), plist: *ArrayList(*Pin), pn: *Pin) !void {
|
|
||||||
|
|
||||||
const remove_success = removePinFromList(plist, pn);
|
|
||||||
_ = remove_success;
|
|
||||||
try returnSoundNodeToList(alist, pn);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn deactivatePin(alist: *ArrayList(*Pin), plist: *ArrayList(*Pin), pn: *Pin) !void {
|
|
||||||
|
|
||||||
const remove_success = removePinFromList(alist, pn);
|
|
||||||
_ = remove_success;
|
|
||||||
try plist.append(pn);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
|
|
||||||
|
|
@ -142,11 +85,7 @@ pub fn main() !void {
|
||||||
defer a_soundnodes.deinit();
|
defer a_soundnodes.deinit();
|
||||||
var p_soundnodes = ArrayList(*SoundNode).init(allocator);
|
var p_soundnodes = ArrayList(*SoundNode).init(allocator);
|
||||||
defer p_soundnodes.deinit();
|
defer p_soundnodes.deinit();
|
||||||
|
|
||||||
// Creating a list of soundnodes
|
|
||||||
var pins = ArrayList(*Pin).init(allocator);
|
|
||||||
defer pins.deinit();
|
|
||||||
|
|
||||||
// Determining length of resulting audio in ticks
|
// Determining length of resulting audio in ticks
|
||||||
const start_tick: u32 = 0;
|
const start_tick: u32 = 0;
|
||||||
var end_tick: u32 = 44100 * 10;
|
var end_tick: u32 = 44100 * 10;
|
||||||
|
|
@ -277,6 +216,7 @@ pub fn main() !void {
|
||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
|
|
||||||
0 => {
|
0 => {
|
||||||
|
|
||||||
const uid: usize = @as(usize, src_node);
|
const uid: usize = @as(usize, src_node);
|
||||||
const sn = try SoundNode.create(allocator, uid);
|
const sn = try SoundNode.create(allocator, uid);
|
||||||
//print("Added node {s} at tick {d}\n", .{nodename, tick});
|
//print("Added node {s} at tick {d}\n", .{nodename, tick});
|
||||||
|
|
@ -290,14 +230,11 @@ pub fn main() !void {
|
||||||
const trg = soundnodes.items[trg_node];
|
const trg = soundnodes.items[trg_node];
|
||||||
//print("Wired nodes at tick {d}\n", .{tick});
|
//print("Wired nodes at tick {d}\n", .{tick});
|
||||||
|
|
||||||
const uid: usize = pins.items.len;
|
|
||||||
const src_pin: usize = @intFromFloat(op1);
|
const src_pin: usize = @intFromFloat(op1);
|
||||||
const trg_pin: usize = @intFromFloat(op2);
|
const trg_pin: usize = @intFromFloat(op2);
|
||||||
|
|
||||||
const pin = try Pin.create(allocator, uid, src, trg, src_pin, trg_pin);
|
const pin = try Pin.create(allocator, src, trg, src_pin, trg_pin);
|
||||||
|
try trg.pins.append(pin);
|
||||||
try pins.append(pin);
|
|
||||||
try src.pins.append(pin);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
3 => {
|
3 => {
|
||||||
|
|
@ -313,21 +250,16 @@ pub fn main() !void {
|
||||||
|
|
||||||
else => {
|
else => {
|
||||||
|
|
||||||
const src = soundnodes.items[src_node];
|
const soundnode = soundnodes.items[src_node];
|
||||||
const a = try Activity.create(allocator, tick_start, tick_end, opcode, src, [6]f64{op1, op2, op3, op4, op5, op6});
|
const a = try Activity.create(allocator, tick_start, tick_end, opcode, soundnode, [6]f64{op1, op2, op3, op4, op5, op6});
|
||||||
|
|
||||||
//print("Set activity {d} for node {d} s at tick {d}\n", .{opcode, src_node, tick});
|
//print("Set activity {d} for node {d} s at tick {d}\n", .{opcode, src_node, tick});
|
||||||
try src.activities.append(a);
|
try soundnode.activities.append(a);
|
||||||
|
|
||||||
if (src.activities.items.len == 1 and src.active == 0) {
|
if (soundnode.activities.items.len == 1 and soundnode.active == 0) {
|
||||||
src.active = 1;
|
soundnode.active = 1;
|
||||||
try reactivateSoundNode(&a_soundnodes, &p_soundnodes, src);
|
try reactivateSoundNode(&a_soundnodes, &p_soundnodes, soundnode);
|
||||||
|
|
||||||
for (src.pins.items, 0..) |pin, zj| {
|
|
||||||
pin.active = 1;
|
|
||||||
_ = zj;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
@ -351,6 +283,12 @@ pub fn main() !void {
|
||||||
if (a_soundnodes.items.len > 2) {
|
if (a_soundnodes.items.len > 2) {
|
||||||
for (a_soundnodes.items[2..], 0..) |soundnode, i| {
|
for (a_soundnodes.items[2..], 0..) |soundnode, i| {
|
||||||
|
|
||||||
|
for (soundnode.pins.items, 0..) |pin, zj| {
|
||||||
|
if (pin.src_node.active == 1 or pin.trg_pin == 1) {
|
||||||
|
pin.propagate();
|
||||||
|
}
|
||||||
|
_ = zj;
|
||||||
|
}
|
||||||
var toremove = ArrayList(usize).init(allocator);
|
var toremove = ArrayList(usize).init(allocator);
|
||||||
defer toremove.deinit();
|
defer toremove.deinit();
|
||||||
|
|
||||||
|
|
@ -363,10 +301,6 @@ pub fn main() !void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (soundnode.pins.items, 0..) |pin, zj| {
|
|
||||||
pin.propagate();
|
|
||||||
_ = zj;
|
|
||||||
}
|
|
||||||
|
|
||||||
var j: usize = toremove.items.len;
|
var j: usize = toremove.items.len;
|
||||||
|
|
||||||
|
|
@ -380,11 +314,7 @@ pub fn main() !void {
|
||||||
|
|
||||||
soundnode.active = 0;
|
soundnode.active = 0;
|
||||||
try deactivateSoundNode(&a_soundnodes, &p_soundnodes, soundnode);
|
try deactivateSoundNode(&a_soundnodes, &p_soundnodes, soundnode);
|
||||||
|
|
||||||
for (soundnode.pins.items, 0..) |pin, zj| {
|
|
||||||
pin.active = 0;
|
|
||||||
_ = zj;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -404,6 +334,13 @@ pub fn main() !void {
|
||||||
|
|
||||||
for (soundnodes.items[0..2], 0..) |soundnode, i| {
|
for (soundnodes.items[0..2], 0..) |soundnode, i| {
|
||||||
|
|
||||||
|
for (soundnode.pins.items, 0..) |pin, jz| {
|
||||||
|
if (pin.src_node.active == 1 or pin.trg_pin == 1) {
|
||||||
|
pin.propagate();
|
||||||
|
}
|
||||||
|
_ = jz;
|
||||||
|
}
|
||||||
|
|
||||||
var toremove = ArrayList(usize).init(allocator);
|
var toremove = ArrayList(usize).init(allocator);
|
||||||
defer toremove.deinit();
|
defer toremove.deinit();
|
||||||
|
|
||||||
|
|
@ -417,11 +354,6 @@ pub fn main() !void {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (soundnode.pins.items, 0..) |pin, jz| {
|
|
||||||
pin.propagate();
|
|
||||||
_ = jz;
|
|
||||||
}
|
|
||||||
|
|
||||||
var j: usize = toremove.items.len;
|
var j: usize = toremove.items.len;
|
||||||
|
|
||||||
while (j > 0) {
|
while (j > 0) {
|
||||||
|
|
@ -444,8 +376,8 @@ pub fn main() !void {
|
||||||
sample = @intFromFloat(right.r_amp * settings.max_amp_multiplier);
|
sample = @intFromFloat(right.r_amp * settings.max_amp_multiplier);
|
||||||
try stdout.writeInt(i24, sample, Endian.little);
|
try stdout.writeInt(i24, sample, Endian.little);
|
||||||
|
|
||||||
left.fab.increment_tick();
|
left.fab.current_tick += 1;
|
||||||
right.fab.increment_tick();
|
right.fab.current_tick += 1;
|
||||||
tick += 1;
|
tick += 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue