const std = @import("std"); const print = std.debug.print; const SoundNode = @import("soundnode.zig").SoundNode; pub const Activity = struct { start_tick: u32, end_tick: u32, opcode: u16, soundnode: *SoundNode, operands: [10]f16 = std.mem.zeroes([10]f16), pub fn do(self: *Activity) !void { switch (self.opcode) { 0 => { try self.reset(); }, 1 => { try self.setfreq(); }, 2 => { try self.relay(); }, 3 => { try self.slide_freq(); }, else => {}, } } pub fn reset(self: *Activity) !void { try self.soundnode.freqamp.reset(); } pub fn setfreq(self: *Activity) !void { 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(); for (self.soundnode.wire_in.items, 0..) |wired_sn, i| { const current_index: u32 = self.soundnode.freqamp.current_index(); const clist = wired_sn.freqamp.freqamps[current_index]; for (clist.lst.items) |freqamp| { try self.soundnode.freqamp.addfreq(freqamp.freq, freqamp.r_amp); } _ = i; } } };