From 3a7009f9bf651947b2c25dd6c415927c931d8489 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 31 May 2020 17:53:33 -0300 Subject: [PATCH] convert more commands to new form --- src/lang.zig | 196 +++++++++++++++++++++++++++++++++++++---- src/runner.zig | 234 ++++--------------------------------------------- 2 files changed, 197 insertions(+), 233 deletions(-) diff --git a/src/lang.zig b/src/lang.zig index 8b1e16e..4fb3fb4 100644 --- a/src/lang.zig +++ b/src/lang.zig @@ -88,23 +88,23 @@ pub const Command = struct { .rflanger => RFlanger, .eq => Eq, .phaser => Phaser, - // .mbeq => Mbeq, - // .chorus => Chorus, - // .pitchscaler => Pitchscaler, - // .reverb => Reverb, - // .highpass => Highpass, - // .delay => Delay, - // .vinyl => Vinyl, - // .revdelay => Revdelay, - // .gate => Gate, - // .detune => Detune, - // .overdrive => Overdrive, - // .degrade => Degrade, - // .repsycho => Repsycho, - // .talkbox => Talkbox, - // .dyncomp => Dyncomp, - // .thruzero => Thruzero, - // .foverdrive => Foverdrive, + .mbeq => Mbeq, + .chorus => Chorus, + .pitchscaler => Pitchscaler, + .reverb => Reverb, + .highpass => Highpass, + .delay => Delay, + .vinyl => Vinyl, + .revdelay => Revdelay, + .gate => Gate, + .detune => Detune, + .overdrive => Overdrive, + .degrade => Degrade, + .repsycho => Repsycho, + .talkbox => Talkbox, + .dyncomp => Dyncomp, + .thruzero => Thruzero, + .foverdrive => Foverdrive, // .gverb => Gverb, // .invert => Invert, // .tapedelay => Tapedelay, @@ -175,12 +175,172 @@ pub const Command = struct { ); pub const Phaser = LV2Command( - .rflanger, + .phaser, "http://plugin.org.uk/swh-plugins/lfoPhaser", struct { lfo_rate: f32, lfo_depth: f32, fb: f32, spread: f32 }, ); + + pub const Mbeq = LV2Command( + .mbeq, + "http://plugin.org.uk/swh-plugins/mbeq", + struct { + band_1: f32, + band_2: f32, + band_3: f32, + band_4: f32, + band_5: f32, + band_6: f32, + band_7: f32, + band_8: f32, + band_9: f32, + band_10: f32, + band_11: f32, + band_12: f32, + band_13: f32, + band_14: f32, + band_15: f32, + }, + ); + + pub const Chorus = LV2Command( + .chorus, + "http://plugin.org.uk/swh-plugins/multivoiceChorus", + struct { + voices: f32, + delay_base: f32, + voice_spread: f32, + detune: f32, + law_freq: f32, + attendb: f32, + }, + ); + + pub const Pitchscaler = LV2Command( + .pitchscaler, + "http://plugin.org.uk/swh-plugins/pitchScaleHQ", + struct { mult: f32 }, + ); + + pub const Reverb = LV2Command( + .reverb, + "http://invadarecords.com/plugins/lv2/erreverb/mono", + struct { + roomLength: f32, + roomWidth: f32, + roomHeight: f32, + sourceLR: f32, + sourceFB: f32, + listLR: f32, + listFB: f32, + hpf: f32, + warmth: f32, + diffusion: f32, + }, + ); + + pub const Highpass = LV2Command(.highpass, "http://invadarecords.com/plugins/lv2/filter/hpf/mono", struct { + freq: f32, + gain: f32, + noClip: f32, + }); + + pub const Delay = LV2Command(.delay, "http://plugin.org.uk/swh-plugins/delayorama", struct { + seed: f32, + gain: f32, + feedback_pc: f32, + tap_count: f32, + first_delay: f32, + delay_range: f32, + delay_scale: f32, + delay_rand_pc: f32, + gain_scale: f32, + wet: f32, + }); + + pub const Vinyl = LV2Command(.vinyl, "http://plugin.org.uk/swh-plugins/vynil", struct { + year: f32, + rpm: f32, + warp: f32, + click: f32, + wear: f32, + }); + + pub const Revdelay = LV2Command(.revdelay, "http://plugin.org.uk/swh-plugins/revdelay", struct { + delay_time: f32, + dry_level: f32, + wet_level: f32, + feedback: f32, + xfade_samp: f32, + }); + // pub const Noise= LV2Command(.,,struct{}); + pub const Gate = LV2Command(.gate, "http://hippie.lt/lv2/gate", struct { + @"switch": f32, + threshold: f32, + attack: f32, + hold: f32, + decay: f32, + gaterange: f32, + }); + pub const Detune = LV2Command(.detune, "http://drobilla.net/plugins/mda/Detune", struct { + @"switch": f32, + threshold: f32, + attack: f32, + hold: f32, + decay: f32, + gaterange: f32, + detune: f32, + mix: f32, + output: f32, + latency: f32, + }); + pub const Overdrive = LV2Command(.overdrive, "http://drobilla.net/plugins/mda/Overdrive", struct { + drive: f32, + muffle: f32, + output: f32, + }); + pub const Degrade = LV2Command(.degrade, "http://drobilla.net/plugins/mda/Degrade", struct { + headroom: f32, + quant: f32, + rate: f32, + post_filt: f32, + non_lin: f32, + output: f32, + }); + pub const Repsycho = LV2Command(.repsycho, "http://drobilla.net/plugins/mda/RePsycho", struct { + tune: f32, + fine: f32, + decay: f32, + thresh: f32, + hold: f32, + mix: f32, + quality: f32, + }); + pub const Talkbox = LV2Command(.talkbox, "http://drobilla.net/plugins/mda/TalkBox", struct { + wet: f32, + dry: f32, + carrier: f32, + quality: f32, + }); + pub const Dyncomp = LV2Command(.dyncomp, "http://gareus.org/oss/lv2/darc#mono", struct { + enable: f32, + hold: f32, + inputgain: f32, + threshold: f32, + ratio: f32, + attack: f32, + release: f32, + gain_min: f32, + gain_max: f32, + rms: f32, + }); + pub const Foverdrive = LV2Command(.foverdrive, "http://plugin.org.uk/swh-plugins/foverdrive", struct { + drive: f32, + }); + pub const Thruzero = LV2Command(.thruzero, "http://drobilla.net/plugins/mda/ThruZero", struct { + rate: f32, mix: f32, feedback: f32, depth_mod: f32 + }); }; pub const CommandList = std.ArrayList(*Command); diff --git a/src/runner.zig b/src/runner.zig index 962cfcc..b4bf4af 100644 --- a/src/runner.zig +++ b/src/runner.zig @@ -190,58 +190,6 @@ pub const Runner = struct { _ = try proc.spawnAndWait(); } - /// Run the http://lv2plug.in/plugins/eg-amp plugin over the file. - fn ampCmd(self: *Runner, pos: Position, params: ParamList) !void { - var image = try self.getImage(); - try image.runPlugin("http://lv2plug.in/plugins/eg-amp", pos, params); - } - - fn rFlangerCmd(self: *Runner, pos: Position, params: ParamList) !void { - var image = try self.getImage(); - try image.runPlugin("http://plugin.org.uk/swh-plugins/retroFlange", pos, params); - } - - fn eqCmd(self: *Runner, position: Position, params: ParamList) !void { - var image = try self.getImage(); - try image.runPlugin("http://plugin.org.uk/swh-plugins/dj_eq_mono", position, params); - } - - fn phaserCmd(self: *Runner, position: Position, params: ParamList) !void { - var image = try self.getImage(); - try image.runPlugin("http://plugin.org.uk/swh-plugins/lfoPhaser", position, params); - } - - fn mbeqCmd(self: *Runner, position: Position, bands: []const f32) !void { - var image = try self.getImage(); - var params = ParamList.init(self.allocator); - defer params.deinit(); - - for (bands) |band_value, idx| { - var sym = try std.fmt.allocPrint(self.allocator, "band_{}", .{idx + 1}); - try params.append(plugin.Param{ - .sym = sym, - .value = band_value, - }); - } - - try image.runPlugin("http://plugin.org.uk/swh-plugins/mbeq", position, params); - } - - fn chorusCmd(self: *Runner, pos: Position, params: ParamList) !void { - var image = try self.getImage(); - try image.runPlugin("http://plugin.org.uk/swh-plugins/multivoiceChorus", pos, params); - } - - fn pitchScalerCmd(self: *Runner, pos: Position, params: ParamList) !void { - var image = try self.getImage(); - try image.runPlugin("http://plugin.org.uk/swh-plugins/pitchScaleHQ", pos, params); - } - - fn reverbCmd(self: *Runner, pos: Position, params: ParamList) !void { - var image = try self.getImage(); - try image.runPlugin("http://invadarecords.com/plugins/lv2/erreverb/mono", pos, params); - } - fn highpassCmd(self: *Runner, pos: Position, params: ParamList) !void { var image = try self.getImage(); try image.runPlugin("http://invadarecords.com/plugins/lv2/filter/hpf/mono", pos, params); @@ -432,23 +380,23 @@ pub const Runner = struct { .rflanger => try self.newRunCommandSingle(cmd, .rflanger), .eq => try self.newRunCommandSingle(cmd, .eq), .phaser => try self.newRunCommandSingle(cmd, .phaser), - // .mbeq => try self.newRunCommandSingle(cmd, .mbeq), - // .chorus => try self.newRunCommandSingle(cmd, .chorus), - // .pitchscaler => try self.newRunCommandSingle(cmd, .pitchscaler), - // .reverb => try self.newRunCommandSingle(cmd, .reverb), - // .highpass => try self.newRunCommandSingle(cmd, .highpass), - // .delay => try self.newRunCommandSingle(cmd, .delay), - // .vinyl => try self.newRunCommandSingle(cmd, .vinyl), - // .revdelay => try self.newRunCommandSingle(cmd, .revdelay), - // .gate => try self.newRunCommandSingle(cmd, .gate), - // .detune => try self.newRunCommandSingle(cmd, .detune), - // .overdrive => try self.newRunCommandSingle(cmd, .overdrive), - // .degrade => try self.newRunCommandSingle(cmd, .degrade), - // .repsycho => try self.newRunCommandSingle(cmd, .repsycho), - // .talkbox => try self.newRunCommandSingle(cmd, .talkbox), - // .dyncomp => try self.newRunCommandSingle(cmd, .dyncomp), - // .thruzero => try self.newRunCommandSingle(cmd, .thruzero), - // .foverdrive => try self.newRunCommandSingle(cmd, .foverdrive), + .mbeq => try self.newRunCommandSingle(cmd, .mbeq), + .chorus => try self.newRunCommandSingle(cmd, .chorus), + .pitchscaler => try self.newRunCommandSingle(cmd, .pitchscaler), + .reverb => try self.newRunCommandSingle(cmd, .reverb), + .highpass => try self.newRunCommandSingle(cmd, .highpass), + .delay => try self.newRunCommandSingle(cmd, .delay), + .vinyl => try self.newRunCommandSingle(cmd, .vinyl), + .revdelay => try self.newRunCommandSingle(cmd, .revdelay), + .gate => try self.newRunCommandSingle(cmd, .gate), + .detune => try self.newRunCommandSingle(cmd, .detune), + .overdrive => try self.newRunCommandSingle(cmd, .overdrive), + .degrade => try self.newRunCommandSingle(cmd, .degrade), + .repsycho => try self.newRunCommandSingle(cmd, .repsycho), + .talkbox => try self.newRunCommandSingle(cmd, .talkbox), + .dyncomp => try self.newRunCommandSingle(cmd, .dyncomp), + .thruzero => try self.newRunCommandSingle(cmd, .thruzero), + .foverdrive => try self.newRunCommandSingle(cmd, .foverdrive), // .gverb => try self.newRunCommandSingle(cmd, .gverb), // .invert => try self.newRunCommandSingle(cmd, .invert), // .tapedelay => try self.newRunCommandSingle(cmd, .tapedelay), @@ -483,112 +431,6 @@ pub const Runner = struct { .Quicksave => try self.quicksaveCmd(), .RunQS => try self.runQSCmd(cmd.args.items[0]), - .Phaser => blk: { - const pos = try cmd.consumePosition(); - - try cmd.appendParam(¶ms, "lfo_rate"); - try cmd.appendParam(¶ms, "lfo_depth"); - try cmd.appendParam(¶ms, "fb"); - try cmd.appendParam(¶ms, "spread"); - - try self.phaserCmd(pos, params); - }, - - .Mbeq => blk: { - const pos = try cmd.consumePosition(); - const bands = try cmd.floatArgMany(self.allocator, 2, 15, @as(f32, 0)); - defer self.allocator.free(bands); - - try self.mbeqCmd(pos, bands); - }, - - .Chorus => blk: { - const pos = try cmd.consumePosition(); - - try cmd.appendParam(¶ms, "voices"); - try cmd.appendParam(¶ms, "delay_base"); - try cmd.appendParam(¶ms, "voice_spread"); - try cmd.appendParam(¶ms, "detune"); - try cmd.appendParam(¶ms, "law_freq"); - try cmd.appendParam(¶ms, "attendb"); - - try self.chorusCmd(pos, params); - }, - - .PitchScaler => blk: { - const pos = try cmd.consumePosition(); - try cmd.appendParam(¶ms, "mult"); - try self.pitchScalerCmd(pos, params); - }, - - .Reverb => blk: { - const pos = try cmd.consumePosition(); - - try cmd.appendParam(¶ms, "roomLength"); - try cmd.appendParam(¶ms, "roomWidth"); - try cmd.appendParam(¶ms, "roomHeight"); - try cmd.appendParam(¶ms, "sourceLR"); - try cmd.appendParam(¶ms, "sourceFB"); - try cmd.appendParam(¶ms, "listLR"); - try cmd.appendParam(¶ms, "listFB"); - try cmd.appendParam(¶ms, "hpf"); - try cmd.appendParam(¶ms, "warmth"); - try cmd.appendParam(¶ms, "diffusion"); - - try self.reverbCmd(pos, params); - }, - - .Highpass => blk: { - const pos = try cmd.consumePosition(); - - try cmd.appendParam(¶ms, "freq"); - try cmd.appendParam(¶ms, "gain"); - try cmd.appendParam(¶ms, "noClip"); - - try self.highpassCmd(pos, params); - }, - - .Delay => blk: { - const pos = try cmd.consumePosition(); - - try cmd.appendParam(¶ms, "seed"); - try cmd.appendParam(¶ms, "gain"); - try cmd.appendParam(¶ms, "feedback_pc"); - try cmd.appendParam(¶ms, "tap_count"); - try cmd.appendParam(¶ms, "first_delay"); - try cmd.appendParam(¶ms, "delay_range"); - try cmd.appendParam(¶ms, "delay_scale"); - try cmd.appendParam(¶ms, "delay_rand_pc"); - try cmd.appendParam(¶ms, "gain_scale"); - try cmd.appendParam(¶ms, "wet"); - - try self.delayCmd(pos, params); - }, - - .Vinyl => blk: { - const pos = try cmd.consumePosition(); - - try cmd.appendParam(¶ms, "year"); - try cmd.appendParam(¶ms, "rpm"); - try cmd.appendParam(¶ms, "warp"); - try cmd.appendParam(¶ms, "click"); - try cmd.appendParam(¶ms, "wear"); - - try self.vinylCmd(pos, params); - }, - - .RevDelay => blk: { - const pos = try cmd.consumePosition(); - - try cmd.appendParam(¶ms, "delay_time"); - try cmd.appendParam(¶ms, "dry_level"); - try cmd.appendParam(¶ms, "wet_level"); - try cmd.appendParam(¶ms, "feedback"); - try cmd.appendParam(¶ms, "xfade_samp"); - - try self.revDelayCmd(pos, params); - }, - .Noise => blk: { const pos = try cmd.consumePosition(); @@ -627,76 +469,38 @@ pub const Runner = struct { .Gate => { const pos = try cmd.consumePosition(); - try cmd.appendParam(¶ms, "switch"); - try cmd.appendParam(¶ms, "threshold"); - try cmd.appendParam(¶ms, "attack"); - try cmd.appendParam(¶ms, "hold"); - try cmd.appendParam(¶ms, "decay"); - try cmd.appendParam(¶ms, "gaterange"); try self.gateCmd(pos, params); }, .Detune => { const pos = try cmd.consumePosition(); - try cmd.appendParam(¶ms, "detune"); - try cmd.appendParam(¶ms, "mix"); - try cmd.appendParam(¶ms, "output"); - try cmd.appendParam(¶ms, "latency"); try self.detuneCmd(pos, params); }, .Overdrive => { const pos = try cmd.consumePosition(); - try cmd.appendParam(¶ms, "drive"); - try cmd.appendParam(¶ms, "muffle"); - try cmd.appendParam(¶ms, "output"); try self.overdriveCmd(pos, params); }, .Degrade => { const pos = try cmd.consumePosition(); - try cmd.appendParam(¶ms, "headroom"); - try cmd.appendParam(¶ms, "quant"); - try cmd.appendParam(¶ms, "rate"); - try cmd.appendParam(¶ms, "post_filt"); - try cmd.appendParam(¶ms, "non_lin"); - try cmd.appendParam(¶ms, "output"); try self.degradeCmd(pos, params); }, .RePsycho => { const pos = try cmd.consumePosition(); - try cmd.appendParam(¶ms, "tune"); - try cmd.appendParam(¶ms, "fine"); - try cmd.appendParam(¶ms, "decay"); - try cmd.appendParam(¶ms, "thresh"); - try cmd.appendParam(¶ms, "hold"); - try cmd.appendParam(¶ms, "mix"); - try cmd.appendParam(¶ms, "quality"); try self.repsychoCmd(pos, params); }, .TalkBox => { const pos = try cmd.consumePosition(); - try cmd.appendParam(¶ms, "wet"); - try cmd.appendParam(¶ms, "dry"); - try cmd.appendParam(¶ms, "carrier"); - try cmd.appendParam(¶ms, "quality"); + try self.talkboxCmd(pos, params); }, .DynComp => { const pos = try cmd.consumePosition(); - try cmd.appendParam(¶ms, "enable"); - try cmd.appendParam(¶ms, "hold"); - try cmd.appendParam(¶ms, "inputgain"); - try cmd.appendParam(¶ms, "threshold"); - try cmd.appendParam(¶ms, "ratio"); - try cmd.appendParam(¶ms, "attack"); - try cmd.appendParam(¶ms, "release"); - try cmd.appendParam(¶ms, "gain_min"); - try cmd.appendParam(¶ms, "gain_max"); - try cmd.appendParam(¶ms, "rms"); + try self.dynCompCmd(pos, params); },