2019-07-13 20:42:46 +00:00
|
|
|
// Custom plugins
|
|
|
|
const std = @import("std");
|
|
|
|
const lv2 = @import("lv2_helpers.zig");
|
|
|
|
const plugins = @import("plugin.zig");
|
|
|
|
|
|
|
|
const c = lv2.c;
|
|
|
|
|
2019-07-13 20:49:09 +00:00
|
|
|
const RunBuffers = plugins.RunBuffers;
|
2019-07-13 20:42:46 +00:00
|
|
|
|
|
|
|
pub const RandomNoise = struct {
|
2019-07-13 20:49:09 +00:00
|
|
|
r: std.rand.DefaultPrng,
|
2019-07-13 21:17:44 +00:00
|
|
|
rand_buf: ?[]f32,
|
|
|
|
cnt: usize = 0,
|
2019-07-13 20:42:46 +00:00
|
|
|
|
|
|
|
pub fn init(
|
|
|
|
allocator: *std.mem.Allocator,
|
2019-07-13 21:17:44 +00:00
|
|
|
params: *plugins.ParamMap,
|
|
|
|
) !RandomNoise {
|
|
|
|
const seed = @floatToInt(u64, params.get("seed").?.value);
|
|
|
|
const fillbytes = @floatToInt(usize, params.get("fill_bytes").?.value);
|
2019-07-13 20:49:09 +00:00
|
|
|
|
2019-07-13 21:17:44 +00:00
|
|
|
var r = std.rand.DefaultPrng.init(seed);
|
|
|
|
|
|
|
|
if (fillbytes > 0) {
|
|
|
|
var rand_buf = try allocator.alloc(f32, fillbytes);
|
|
|
|
|
|
|
|
for (rand_buf) |_, idx| {
|
|
|
|
rand_buf[idx] = r.random.float(f32);
|
|
|
|
}
|
|
|
|
|
|
|
|
return RandomNoise{
|
|
|
|
.r = r,
|
|
|
|
.rand_buf = rand_buf,
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
return RandomNoise{
|
|
|
|
.r = r,
|
|
|
|
.rand_buf = null,
|
|
|
|
};
|
|
|
|
}
|
2019-07-13 20:42:46 +00:00
|
|
|
}
|
|
|
|
|
2019-07-13 20:49:09 +00:00
|
|
|
pub fn run(self: *RandomNoise, bufs: *RunBuffers) void {
|
2019-07-13 21:17:44 +00:00
|
|
|
if (self.rand_buf) |rand_buf| {
|
|
|
|
if (self.cnt >= rand_buf.len) self.cnt = 0;
|
|
|
|
bufs.out[0] = rand_buf[self.cnt];
|
|
|
|
self.cnt += 1;
|
|
|
|
} else {
|
|
|
|
bufs.out[0] = self.r.random.float(f32);
|
|
|
|
}
|
2019-07-13 20:42:46 +00:00
|
|
|
}
|
|
|
|
};
|