phase support
This commit is contained in:
parent
866b9e66c1
commit
04690d9df8
3 changed files with 34 additions and 31 deletions
|
|
@ -26,11 +26,12 @@ pub const Activity = struct {
|
|||
}
|
||||
|
||||
pub fn setfreq(self: *Activity) !void {
|
||||
try self.soundnode.fab.setfreq(self.operands[0], self.operands[1]);
|
||||
try self.soundnode.fab.setfreq(self.operands[0], self.operands[1], self.operands[2]);
|
||||
}
|
||||
|
||||
pub fn slide_freq(self: *Activity) !void {
|
||||
|
||||
// NEEDS REDO
|
||||
try self.soundnode.fab.reset();
|
||||
|
||||
const init_freq: f64 = self.operands[0];
|
||||
|
|
@ -42,7 +43,7 @@ pub const Activity = struct {
|
|||
|
||||
const res_freq: f64 = init_freq + @as(f64, @floatCast(freqdiff * @as(f128, @floatFromInt(elapsed)) ));
|
||||
|
||||
try self.soundnode.fab.setfreq(res_freq, self.operands[2]);
|
||||
try self.soundnode.fab.setfreq(res_freq, self.operands[2], 0);
|
||||
|
||||
if (self.soundnode.fab.current_tick % 1000 == 0) {
|
||||
print("TIMEDIFF {d}\n", .{timediff});
|
||||
|
|
@ -64,7 +65,7 @@ pub const Activity = struct {
|
|||
current_fal = wired_sn.fab.fal_array[current_index];
|
||||
|
||||
for (current_fal.arraylist.items) |fa| {
|
||||
try self.soundnode.fab.addfreq(fa.freq, fa.r_amp);
|
||||
try self.soundnode.fab.addfreq(fa.freq, fa.r_amp, fa.phase);
|
||||
}
|
||||
|
||||
_ = i;
|
||||
|
|
@ -81,7 +82,7 @@ pub const Activity = struct {
|
|||
current_fal = aired_sn.fab.fal_array[sample_index];
|
||||
|
||||
for (current_fal.arraylist.items) |fa| {
|
||||
try self.soundnode.fab.addfreq(fa.freq, fa.r_amp * attenuation);
|
||||
try self.soundnode.fab.addfreq(fa.freq, fa.r_amp * attenuation, fa.phase);
|
||||
}
|
||||
|
||||
_ = i;
|
||||
|
|
|
|||
|
|
@ -8,17 +8,18 @@ pub const FreqAmp = struct {
|
|||
|
||||
freq: f64,
|
||||
r_amp: f64,
|
||||
phase: f64,
|
||||
|
||||
pub fn create(allocator: Allocator, freq: f64, r_amp: f64) !*FreqAmp {
|
||||
pub fn create(allocator: Allocator, freq: f64, r_amp: f64, phase: f64) !*FreqAmp {
|
||||
|
||||
const fa = try allocator.create(FreqAmp);
|
||||
fa.* = .{.freq = freq, .r_amp = r_amp};
|
||||
fa.* = .{.freq = freq, .r_amp = r_amp, .phase = phase};
|
||||
return fa;
|
||||
|
||||
}
|
||||
|
||||
pub fn prnt(self: *FreqAmp) void {
|
||||
print("<{d}::{d}>\n", .{self.freq, self.r_amp});
|
||||
print("<{d}::{d}::{d}>\n", .{self.freq, self.r_amp, self.phase});
|
||||
}
|
||||
|
||||
};
|
||||
|
|
@ -45,11 +46,11 @@ pub const FreqAmpList = struct {
|
|||
|
||||
}
|
||||
|
||||
pub fn setfreq(self: *FreqAmpList, freq: f64, r_amp: f64) !void {
|
||||
pub fn setfreq(self: *FreqAmpList, freq: f64, r_amp: f64, phase: f64) !void {
|
||||
|
||||
for (self.arraylist.items) |fa| {
|
||||
|
||||
if (fa.freq == freq) {
|
||||
if (fa.freq == freq and fa.phase == phase) {
|
||||
|
||||
fa.r_amp = r_amp;
|
||||
return;
|
||||
|
|
@ -58,16 +59,16 @@ pub const FreqAmpList = struct {
|
|||
|
||||
}
|
||||
|
||||
const fa = try FreqAmp.create(self.allocator, freq, r_amp);
|
||||
const fa = try FreqAmp.create(self.allocator, freq, r_amp, phase);
|
||||
try self.arraylist.append(fa);
|
||||
|
||||
}
|
||||
|
||||
pub fn addfreq(self: *FreqAmpList, freq: f64, r_amp: f64) !void {
|
||||
pub fn addfreq(self: *FreqAmpList, freq: f64, r_amp: f64, phase: f64) !void {
|
||||
|
||||
for (self.arraylist.items) |fa| {
|
||||
|
||||
if (fa.freq == freq) {
|
||||
if (fa.freq == freq and fa.phase == phase) {
|
||||
|
||||
fa.r_amp = r_amp;
|
||||
|
||||
|
|
@ -81,7 +82,7 @@ pub const FreqAmpList = struct {
|
|||
|
||||
}
|
||||
|
||||
const fa = try FreqAmp.create(self.allocator, freq, r_amp);
|
||||
const fa = try FreqAmp.create(self.allocator, freq, r_amp, phase);
|
||||
try self.arraylist.append(fa);
|
||||
|
||||
}
|
||||
|
|
@ -213,17 +214,17 @@ pub const FreqAmpBuffer = struct {
|
|||
|
||||
}
|
||||
|
||||
pub fn setfreq(self: *FreqAmpBuffer, freq: f64, r_amp: f64) !void {
|
||||
pub fn setfreq(self: *FreqAmpBuffer, freq: f64, r_amp: f64, phase: f64) !void {
|
||||
|
||||
var current_fal = self.fal_array[self.current_index];
|
||||
try current_fal.setfreq(freq, r_amp);
|
||||
try current_fal.setfreq(freq, r_amp, phase);
|
||||
|
||||
}
|
||||
|
||||
pub fn addfreq(self: *FreqAmpBuffer, freq: f64, r_amp: f64) !void {
|
||||
pub fn addfreq(self: *FreqAmpBuffer, freq: f64, r_amp: f64, phase: f64) !void {
|
||||
|
||||
var current_fal = self.fal_array[self.current_index];
|
||||
try current_fal.addfreq(freq, r_amp);
|
||||
try current_fal.addfreq(freq, r_amp, phase);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,11 +8,12 @@ const Endian = std.builtin.Endian;
|
|||
const SoundNode = @import("soundnode.zig").SoundNode;
|
||||
const Activity = @import("activity.zig").Activity;
|
||||
const SoundSettings = @import("settings.zig").SoundSettings;
|
||||
const utility = @import("utility.zig");
|
||||
|
||||
|
||||
pub fn singleSineTick(st: *SoundSettings, freq: f64, t: u32) f64 {
|
||||
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);
|
||||
return math.sin(st.sine_multiplier * freq * ft - phase * utility.tau);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -46,7 +47,7 @@ pub fn main() !void {
|
|||
.soundnode = &sine,
|
||||
};
|
||||
|
||||
a.operands[0] = 820.0;
|
||||
a.operands[0] = 440.0;
|
||||
a.operands[1] = 0.5;
|
||||
|
||||
var sine2: SoundNode = try SoundNode.init(allocator, "sine2");
|
||||
|
|
@ -54,17 +55,17 @@ pub fn main() !void {
|
|||
|
||||
var a4 = Activity{
|
||||
.start_tick = 0,
|
||||
.end_tick = end_tick-44100,
|
||||
.opcode = 3,
|
||||
.soundnode = &sine2,
|
||||
.end_tick = 0,
|
||||
.opcode = 1,
|
||||
.soundnode = &sine,
|
||||
};
|
||||
|
||||
a4.operands[0] = 410.0;
|
||||
a4.operands[1] = 820.0;
|
||||
a4.operands[2] = 0.5;
|
||||
a4.operands[0] = 449.0;
|
||||
a4.operands[1] = 0.5;
|
||||
a4.operands[2] = 0.55;
|
||||
|
||||
try sine.activities.append(&a);
|
||||
try sine2.activities.append(&a4);
|
||||
try sine.activities.append(&a4);
|
||||
|
||||
var a2 = Activity{
|
||||
.start_tick = 0,
|
||||
|
|
@ -91,8 +92,8 @@ pub fn main() !void {
|
|||
try soundnodes.append(&left);
|
||||
try soundnodes.append(&right);
|
||||
|
||||
try left.air_in.append(&sine);
|
||||
try right.air_in.append(&sine2);
|
||||
try left.wire_in.append(&sine);
|
||||
try right.wire_in.append(&sine);
|
||||
|
||||
var tick: u32 = start_tick;
|
||||
|
||||
|
|
@ -163,7 +164,7 @@ pub fn main() !void {
|
|||
const current_fal_left = left.fab.fal_array[current_index];
|
||||
|
||||
for (current_fal_left.arraylist.items) |fa| {
|
||||
amp += fa.r_amp * singleSineTick(&settings, fa.freq, tick);
|
||||
amp += fa.r_amp * singleSineTick(&settings, fa.freq, tick, fa.phase);
|
||||
}
|
||||
|
||||
sample = @intFromFloat(amp * @as(f64, @floatFromInt(settings.max_amp)));
|
||||
|
|
@ -174,7 +175,7 @@ pub fn main() !void {
|
|||
const current_fal_right = right.fab.fal_array[current_index];
|
||||
|
||||
for (current_fal_right.arraylist.items) |fa| {
|
||||
amp += fa.r_amp * singleSineTick(&settings, fa.freq, tick);
|
||||
amp += fa.r_amp * singleSineTick(&settings, fa.freq, tick, fa.phase);
|
||||
}
|
||||
|
||||
sample = @intFromFloat(amp * @as(f64, @floatFromInt(settings.max_amp)));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue