LV2 plugin which generates MIDI notes by detected audio signal peaks.
It can be used to retrigger drums which would be the main purpose of it. But also it can be used for some weird experiments. Just put some track as a sound source, connect MIDI output to some synth, automate “MIDI note” value, and see what happens.
The MIDI-Trigger plugin has one mono audio input and one MIDI output. So it takes audio signal as an input and provides MIDI output with the triggered notes you can connect to some synth or sampler.
This plugin works and has already been used in some recorded band albums to improve drum sounds by adding a retriggered drum sample. Though it’s missing a GUI at the moment which would make it a bit easier to use. If you follow usage info instruction it should be no problem to use it.
-
GNU/Linux — Tested by me personally on NixOS and builds successfully on Ubuntu in CI using Nix
-
MacOS — I don’t have a machine to test it but in CI it successfully builds using Nix
The defaults for the knobs are tuned for retriggering drum tracks. So basically you need to pay attention to these 3 values:
- Threshold — Sensitivity level (the lower the value the more sensitive it is)
- MIDI note — Which note to trigger (MIDI number)
- Note-off mode — MIDI notes generation strategy/pattern (see below)
“Note-off mode” knob available values:
- 1 — Send NOTE-OFF immediately before NOTE-ON
- 2 — Send NOTE-OFF immediately after NOTE-ON
- 3 — Send NOTE-OFF after “Note-off delay” or earlier if it’s interrupted by another NOTE-ON
- 4 — Send NOTE-OFF after “Note-off delay” only if it’s not interrupted by another NOTE-ON
- 5 — Don’t send NOTE-OFFs
It’s not a common combination for a plugin to have an audio input and a MIDI output. So by default Ardour doesn’t commutate it properly. Here is a steps you need to follow to make it work:
-
Add an audio/bus track and add “MIDI-Trigger” plugin to it (before fader)
-
Open context menu of the plugin (right mouse click) and open “Pin connections...”
You should see that the plugin in the center has one red MIDI output port. But it’s not connected anywhere because plugin has only one green audio output port to the outside world.
-
Click “Manual Config” button
-
Add “MIDI Out” port (click “+” plus button)
-
Remove “Audio Out” (click “-” minus button)
-
Click and hold on the plugins’s MIDI port and drag it to the outer MIDI output so that it makes a connection
-
Now you can put a sampler or a synth after the plugin which takes MIDI signal as an input
Here are the requirements:
- GNU/Make
- GCC compiler
- LV2 headers
Just run:
make
There is now build/midi-trigger.lv2
directory with the plugin. You can place
this plugin directory to somewhere like /usr/lib/lv2
(depending on your
distro). Or you can try it like this (with Ardour as an example):
LV2_PATH="$PWD/build:$LV2_PATH" ardour6
And find the plugin by “MIDI-Trigger” name.
I recommend to use Nix package manager to get a reproducible build. This project includes Nix configuration.
Build it like this:
nix-build -o result
There is now result
symlink to a directory placed in /nix/store
which
has plugin directory by lib/lv2/midi-trigger.lv2
path inside it.
Now you can start Ardour for instance providing LV2_PATH
to this plugin:
LV2_PATH="$PWD/result/lib/lv2:$LV2_PATH" ardour6
And find the plugin by “MIDI-Trigger” name.
You can compile this program also with Clang like this:
make CXX=clang
Or using Nix:
nix-build --argstr compiler clang
Here is an example for your configuration.nix
:
{ pkgs, ... }:
let
midi-trigger-src = fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/0000000000000000000000000000000000000000.tar.gz";
sha256 = "0000000000000000000000000000000000000000000000000000";
};
midi-trigger = pkgs.callPackage midi-trigger-src { src = midi-trigger-src; };
in
{
environment.systemPackages = [
midi-trigger
];
}
Paste commit hash to the placeholder after /archive/
and before .tar.gz
and
run once to get calculated SHA256 checksum in the error log. Then paste that
SHA256 checksum to the sha256
field and rebuild one more time.
If you are using direnv you can look at
.envrc example file (just uses Nix,
helps to auto-reload nix-shell
).