How to load external plugins and process real time audio input

Hey all,

After spending 10+ hrs a day in front of a monitor screen I usually play with my turntables. I am slowly getting bored with all the features and effects that my mixer has to offer. I simply need more control over the sound and perhaps develop my own effects. Recently, I found out about ELK and that looks like a very promising platform that will serve as a foundation to what I am trying to achieve.

I want to develop a standalone headless hardware running Linux with USB audio interface. Let’s call this “the box”. ELK will be controlled via MIDI signals delivered via USB. The box will be hooked into my mixer via send/return. The mixer sends live audio feed to the box (via 3.5mm or 6.3mm). The box adds effects, individual sounds, loops etc. and pumps the stream back to the mixer via return.

Below are some very basic (noob?) questions:

  1. How exactly do I load external plugins? Let’s stick with the very basic examples such as reverb/delay/filter? All the plugins I saw have shiny GUIs for Ableton or Logic Pro. What I really need is a way to activate the plugin on a live audio feed and control its parameters via MIDI signals. No monitors, displays, GUIs, etc. Just ELK and some physical knobs, buttons and faders.

  2. Is ELK able to automatically calculate or detect the BPM of the incoming signal and sync the effects/sounds/loops to that BPM?

  3. If answer to the above question is “yes”, how do I sync individual wave sounds to that BPM? Say I have a “clap” or a “snare” sound that I want on repeat 1/1 or 1/4 bars in perfect BPM sync. How do I do that?

I understand the above questions might sound boring to some but once they are cleared, I can move forward with my little project. Many thanks in advance!

Nice to hear you’re considering ELK. Sounds like a fun project. I want to clarify that currently ELK does not support external audio interfaces. Instead you should use a raspberry PI hat with an audio codec that’s supported by ELK like the hifiberry.

I’ll do my best to answer your questions:

  1. To load a plugin on ELK you need to get the binary on the RPi. We currently support vst2, vst3 and LV2. Please note that your plugin needs to be specifically compiled for ELK Audio OS either using our cross-compilation SDK or compiling on the board directly. We also have a bundle of precompiled open source plugins you could use.
    To load a plugin you write a json configuration file for the tracks you need and then launch our plugin host sushi with that file. I would recommend taking a look at this repository to get started. When a plugin is loaded all it’s available parameters will be exposed to sushi and you can map them to midi as you wish or for more advanced use control them using a python script with this module. This script could also read any physical buttons/faders/knobs you connect and serve as a translation from them to parameter control. There are some examples of this using our own audio hat with control extension in the examples repository I linked earlier. Unfortunately we are currently out of stock but the approach should be the same using custom connections.

  2. We don’t have support for tempo detection from audio. What you can do is either input the tempo manually using the same approach as mentioned above for parameters or use ableton link which we have support for.

  3. The easiest way to achieve this would be to run a separate sequencer. You could maybe also take a look and get some inspiration from this amazing project.

Hope that this answered you questions and feel free to ask if you have any more.