const std = @import("std"); const print = std.debug.print; pub const FreqAmpBuffer = struct { const buffer_ticks_default = 44100 * 2; buffer_ticks: u32 = buffer_ticks_default, current_tick: u32 = 0, current_index: u32 = 0, fal_array: [buffer_ticks_default]f64 = std.mem.zeroes([buffer_ticks_default]f64), pub fn increment_tick(self: *FreqAmpBuffer) void { self.current_tick += 1; const cur_index = self.index_by_tick(self.current_tick); self.current_index = cur_index; self.fal_array[cur_index] = 0; } pub fn index_by_tick(self: *FreqAmpBuffer, tick: u32) u32 { return tick % self.buffer_ticks; } pub fn prnt(self: *FreqAmpBuffer) void { print("CURRENT STATE:\n", .{}); const prev_index = self.index_by_tick(self.current_tick-%1); const cur_index = self.current_index; const next_index = self.index_by_tick(self.current_tick+%1); print("{d}: {*}\n", .{self.current_tick-%1, self.fal_array[prev_index]}); print("{d}\n", .{self.fal_array[prev_index]}); print("{d}: {*}\n", .{self.current_tick, self.fal_array[cur_index]}); print("{d}\n", .{self.fal_array[cur_index]}); print("{d}: {*}\n", .{self.current_tick+%1, self.fal_array[next_index]}); print("{d}\n", .{self.fal_array[next_index]}); } pub fn add_r_amp(self: *FreqAmpBuffer, r_amp: f64) void { self.fal_array[self.current_index] += r_amp; if (self.fal_array[self.current_index] > 1) { self.fal_array[self.current_index] = 1; } else if (self.fal_array[self.current_index] < -1) { self.fal_array[self.current_index] = -1; } } pub fn get_current_r_amp(self: *FreqAmpBuffer) f64 { return self.fal_array[self.current_index]; } pub fn get_r_amp(self: *FreqAmpBuffer, tick: u32) f64 { const ind: u32 = self.index_by_tick(tick); return self.fal_array[ind]; } };