From a0a75579dd0c335346dec7d9597529c18035b220 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 26 Jan 2020 00:28:59 -0300 Subject: [PATCH] add tapedelay cmd (broken) --- doc/README.md | 19 +++++++++++++++++++ examples/tapedelay.scri | 3 +++ src/lang.zig | 2 ++ src/printer.zig | 1 + src/runner.zig | 25 +++++++++++++++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 examples/tapedelay.scri diff --git a/doc/README.md b/doc/README.md index cc77cd1..4ce663a 100644 --- a/doc/README.md +++ b/doc/README.md @@ -292,3 +292,22 @@ GVerb algorithm from SWH plugins. ## `invert split index` > A utility plugin that inverts the signal, also (wrongly) known as a 180 degree phase shift. + +## `tapedelay split index` + +**TODO:** gives 0 output + +> Correctly models the tape motion and some of the smear effect, there is no simulation fo the head saturation yet, as I don't have a good model of it. When I get one I will add it. + +> The way the tape accelerates and decelerates gives a nicer delay effect for many purposes. + + - speed (inches/sec, 1=normal): 0..10, default 1 + - da\_db (dry level, dB): -90..0, default -90 + - t1d (tap 1 distance, inches): 0..4, default 0 + - t1a\_db (tap 1 level, dB): -90..0, default 0 + - t2d (tap 2 distance, inches): 0..4, default 1 + - t2a\_db (tap 2 level, dB): -90..0, default -90 + - t3d (tap 3 distance, inches): 0..4, default 2 + - t3a\_db (tap 3 level, dB): -90..0, default -90 + - t4d (tap 4 distance, inches): 0..4, default 3 + - t4a\_db (tap 4 level, dB): -90..0, default -90 diff --git a/examples/tapedelay.scri b/examples/tapedelay.scri new file mode 100644 index 0000000..4b5d8c0 --- /dev/null +++ b/examples/tapedelay.scri @@ -0,0 +1,3 @@ +load :0; +tapedelay 3 1 1 -90 0 0 1 -90 2 -90 3 -90; +quicksave; diff --git a/src/lang.zig b/src/lang.zig index 2b022dd..dd91bd6 100644 --- a/src/lang.zig +++ b/src/lang.zig @@ -37,6 +37,7 @@ pub const CommandType = enum { Foverdrive, Gverb, Invert, + TapeDelay, Noise, WildNoise, @@ -203,6 +204,7 @@ pub const Lang = struct { _ = try self.keywords.put("foverdrive", .Foverdrive); _ = try self.keywords.put("gverb", .Gverb); _ = try self.keywords.put("invert", .Invert); + _ = try self.keywords.put("tapedelay", .TapeDelay); // custom implementations (not lv2) _ = try self.keywords.put("noise", .Noise); diff --git a/src/printer.zig b/src/printer.zig index 0d75ea4..8491328 100644 --- a/src/printer.zig +++ b/src/printer.zig @@ -31,6 +31,7 @@ pub fn printList(list: langs.CommandList, stream: var) !void { .Foverdrive => "foverdrive", .Gverb => "gverb", .Invert => "invert", + .TapeDelay => "tapedelay", .Noise => "noise", .WildNoise => "wildnoise", diff --git a/src/runner.zig b/src/runner.zig index dd6d49e..7bc870d 100644 --- a/src/runner.zig +++ b/src/runner.zig @@ -349,6 +349,11 @@ pub const Runner = struct { try image.runPlugin("http://plugin.org.uk/swh-plugins/inv", pos, params); } + fn tapedelayCmd(self: *Runner, pos: Position, params: ParamList) !void { + var image = try self.getImage(); + try image.runPlugin("http://plugin.org.uk/swh-plugins/tapeDelay", pos, params); + } + fn runCommand(self: *Runner, cmd: *lang.Command) !void { var params = ParamList.init(self.allocator); defer params.deinit(); @@ -639,6 +644,26 @@ pub const Runner = struct { try self.gverbCmd(pos, params); }, + .TapeDelay => { + const pos = try cmd.consumePosition(); + try cmd.appendParam(¶ms, "speed"); + try cmd.appendParam(¶ms, "da_db"); + + try cmd.appendParam(¶ms, "t1d"); + try cmd.appendParam(¶ms, "t1a_db"); + + try cmd.appendParam(¶ms, "t2d"); + try cmd.appendParam(¶ms, "t2a_db"); + + try cmd.appendParam(¶ms, "t3d"); + try cmd.appendParam(¶ms, "t3a_db"); + + try cmd.appendParam(¶ms, "t4d"); + try cmd.appendParam(¶ms, "t4a_db"); + + try self.tapedelayCmd(pos, params); + }, + else => blk: { std.debug.warn("Unsupported command: {}\n", .{cmd.command}); break :blk RunError.UnknownCommand;