From d827dbb754e6c889aa920fdf72fc18676d56e8ae Mon Sep 17 00:00:00 2001 From: aprilnightk Date: Mon, 8 Sep 2025 17:28:31 +0300 Subject: [PATCH] expanding on activity --- zigsonnum/activity.zig | 28 ++++++++++++++++++++++++---- zigsonnum/freqamp.zig | 37 ++++++++++++++++--------------------- zigsonnum/sonnum.zig | 22 +++++++++++++++++++--- 3 files changed, 59 insertions(+), 28 deletions(-) diff --git a/zigsonnum/activity.zig b/zigsonnum/activity.zig index 29823c2..c23c321 100644 --- a/zigsonnum/activity.zig +++ b/zigsonnum/activity.zig @@ -15,6 +15,7 @@ pub const Activity = struct { 0 => { try self.reset(); }, 1 => { try self.setfreq(); }, 2 => { try self.relay(); }, + 3 => { try self.slide_freq(); }, else => {}, } } @@ -27,6 +28,29 @@ pub const Activity = struct { try self.soundnode.freqamp.setfreq(self.operands[0], self.operands[1]); } + pub fn slide_freq(self: *Activity) !void { + + try self.soundnode.freqamp.reset(); + + const init_freq: f16 = self.operands[0]; + const final_freq: f16 = self.operands[1]; + + const timediff: u32 = self.end_tick - self.start_tick; + const elapsed: u32 = self.soundnode.freqamp.current_tick - self.start_tick; + const freqdiff: f128 = ((@as(f128, final_freq - init_freq))) / @as(f128, @floatFromInt(timediff)); + + const res_freq: f16 = init_freq + @as(f16, @floatCast(freqdiff * @as(f128, @floatFromInt(elapsed)) )); + + try self.soundnode.freqamp.setfreq(res_freq, self.operands[2]); + + if (self.soundnode.freqamp.current_tick % 44100 == 0) { + print("TIMEDIFF {d}\n", .{timediff}); + print("FREQDIFF {d}\n", .{@as(f16, @floatCast(freqdiff))}); + print("RESFREQ {d}\n", .{res_freq}); + self.soundnode.freqamp.prnt(); + } + } + pub fn relay(self: *Activity) !void { try self.soundnode.freqamp.reset(); @@ -34,10 +58,6 @@ pub const Activity = struct { for (self.soundnode.wire_in.items, 0..) |wired_sn, i| { const current_index: u32 = self.soundnode.freqamp.current_index(); - if (current_index == 0) { - print("relaying {s} to {s}\n", .{wired_sn.name, self.soundnode.name}); - } - const clist = wired_sn.freqamp.freqamps[current_index]; for (clist.lst.items) |freqamp| { diff --git a/zigsonnum/freqamp.zig b/zigsonnum/freqamp.zig index 39e1d30..fa10c83 100644 --- a/zigsonnum/freqamp.zig +++ b/zigsonnum/freqamp.zig @@ -69,7 +69,7 @@ pub const FreqAmpList = struct { pub const FreqAmpBuffer = struct { - const buffer_ticks_default = 44100 * 3; + const buffer_ticks_default = 44100; allocator: Allocator, buffer_ticks: u32 = buffer_ticks_default, @@ -178,18 +178,15 @@ pub const FreqAmpBuffer = struct { var clist = self.freqamps[cur_index]; // If this freq already is set, sum the r_amps - // Currently turned off - if (0>0) { - for (clist.lst.items) |freqamp| { + for (clist.lst.items) |freqamp| { - if (freqamp.freq == freq) { - - freqamp.r_amp = r_amp; - return; - } - + if (freqamp.freq == freq) { + + freqamp.r_amp = r_amp; + return; } + } // Otherwise, append new freqamp @@ -207,21 +204,19 @@ pub const FreqAmpBuffer = struct { // If this freq already is set, sum the r_amps - if (0>0) { - for (clist.lst.items) |freqamp| { + for (clist.lst.items) |freqamp| { + + if (freqamp.freq == freq) { - if (freqamp.freq == freq) { - - freqamp.r_amp += r_amp; - - if (freqamp.r_amp > 1) { - freqamp.r_amp = 1; - } - - return; + freqamp.r_amp += r_amp; + + if (freqamp.r_amp > 1) { + freqamp.r_amp = 1; } + return; } + } // Otherwise, append new freqamp diff --git a/zigsonnum/sonnum.zig b/zigsonnum/sonnum.zig index fdc033d..05f459f 100644 --- a/zigsonnum/sonnum.zig +++ b/zigsonnum/sonnum.zig @@ -26,7 +26,7 @@ pub fn main() !void { var settings: SoundSettings = SoundSettings{}; const start_tick: u32 = 0; - const end_tick: u32 = 44100 * 120; + const end_tick: u32 = 44100 * 10; var left: SoundNode = try SoundNode.init(allocator, "left_sink"); defer left.deinit(); @@ -49,7 +49,22 @@ pub fn main() !void { a.operands[0] = 410.0; a.operands[1] = 0.8; + var sine2: SoundNode = try SoundNode.init(allocator, "sine2"); + defer sine2.deinit(); + + var a4 = Activity{ + .start_tick = 0, + .end_tick = end_tick, + .opcode = 3, + .soundnode = &sine2, + }; + + a4.operands[0] = 410.0; + a4.operands[1] = 820.0; + a4.operands[2] = 0.5; + try sine.activities.append(&a); + try sine2.activities.append(&a4); var a2 = Activity{ .start_tick = 0, @@ -72,11 +87,12 @@ pub fn main() !void { //Preset sink nodes try soundnodes.append(&sine); + try soundnodes.append(&sine2); try soundnodes.append(&left); try soundnodes.append(&right); - try left.wire_in.append(&sine); - try right.wire_in.append(&sine); + try left.wire_in.append(&sine2); + try right.wire_in.append(&sine2); var tick: u32 = start_tick;