add mbeq command

This commit is contained in:
Luna 2019-07-10 16:43:30 -03:00
parent 6bc54f8e46
commit 317916a1e0
4 changed files with 59 additions and 0 deletions

View file

@ -17,6 +17,7 @@ pub const CommandType = enum {
RFlanger,
Eq,
Phaser,
Mbeq,
};
pub const Command = struct {
@ -59,6 +60,28 @@ pub const Command = struct {
var arg = try self.argAt(idx);
return try std.fmt.parseFloat(f32, arg);
}
pub fn floatArgMany(
self: *const Command,
allocator: *std.mem.Allocator,
start_index: usize,
elements: usize,
default: f32,
) ![]const f32 {
var i: usize = start_index;
var arr = std.ArrayList(f32).init(allocator);
while (i < elements) : (i += 1) {
var value: f32 = self.floatArgAt(i) catch |err| blk: {
std.debug.warn("\tdoing default on arg {}\n", i);
break :blk default;
};
try arr.append(value);
}
return arr.toSliceConst();
}
};
pub const CommandList = std.ArrayList(*Command);
@ -86,6 +109,7 @@ pub const Lang = struct {
_ = try self.keywords.put("amp", .Amp);
_ = try self.keywords.put("rflanger", .RFlanger);
_ = try self.keywords.put("eq", .Eq);
_ = try self.keywords.put("mbeq", .Mbeq);
_ = try self.keywords.put("phaser", .Phaser);
}

View file

@ -231,6 +231,23 @@ pub const Runner = struct {
try image.runPlugin("http://plugin.org.uk/swh-plugins/lfoPhaser", position, params);
}
fn mbeqCmd(
self: *Runner,
position: plugin.Position,
bands: []const f32,
) !void {
var image = try self.getImage();
var params = plugin.ParamList.init(self.allocator);
defer params.deinit();
for (bands) |band_value, idx| {
var sym = try std.fmt.allocPrint(self.allocator, "band_{}", idx + 1);
try appendParam(&params, sym, band_value);
}
try image.runPlugin("http://plugin.org.uk/swh-plugins/mbeq", position, params);
}
fn runCommand(self: *Runner, cmd: *lang.Command) !void {
return switch (cmd.command) {
.Noop => {},
@ -278,6 +295,12 @@ pub const Runner = struct {
try self.phaserCmd(pos, lfo_rate, lfo_depth, fb, spread);
},
.Mbeq => blk: {
const pos = try cmd.consumePosition();
const bands = try cmd.floatArgMany(self.allocator, 2, 15, f32(0));
try self.mbeqCmd(pos, bands);
},
else => blk: {
std.debug.warn("Unknown command: {}\n", cmd.command);
break :blk RunError.UnknownCommand;