74 lines
No EOL
1.9 KiB
Zig
74 lines
No EOL
1.9 KiB
Zig
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;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}; |