NeuralPi: Neural networks for guitar amp and pedal emulation

Hi, I wanted to share a project I’ve been working on with Elk Audio OS called the NeuralPi, which is a Raspberry Pi guitar pedal using neural networks to emulate real amps and pedals. It uses the HiFiberry ADC + DAC and the vst3 plugin was built using JUCE. It is open source on GitHub along with the cross compiled vst3 for Elk Audio.

Here’s a demo video on YouTube:

GitHub page:

And step by step build guide:

Currently the plugin running on Elk has no user controls, but I’m planning on adding these with an OSC interface, and eventually physical knobs. I’d like to thank Elk Audio for making this project possible! Looking forward to developing this further along with the open source community.

Thanks,

-Keith

6 Likes

Wow! Great job sounds really cool. Looking forward to see the project with knobs and model blending like you mentioned.

1 Like

This is amazing! Looking forward for more :slight_smile:

1 Like

Thanks for the feedback! It was a lot of fun to build. I did want to bring up that I’m still seeing the input connection issue mentioned here:

https://forum2.elk.audio/t/guitar-pedal-bad-sound-using-juce-cross-compiled-vst3-and-hifiberry-dac-adc/631/7

When the guitar input cable is fully plugged in, no sound out, but when it’s loose (I’m assuming it’s connecting with the second of the stereo input contact) then I hear the plugin normally. It’s not the guitar cable or adapter because when I run the mda_fx config I get sound with the input fully plugged in. My config file for NeuralPi is the same as the mda_fx, using bus 0 for input and output.

My best guess is it’s something to do with the audio routing in my vst3, but I was wondering if someone could take a look at my plugin processor code to verify. I do the dsp processing on channel 0, and then copy that to the channel 1 buffer.

Update: It’s funny how just explaining out something helps you figure out a problem; I’m looking at my code and I think I’m handling the channels wrong, I start the for loop with ch=1, where I think it should be ch=0. Never heard a problem in my plugins using that code, so I just copied it over to NeuralPi. I’ll let you know if that fixes it.

Well, that didn’t fix it, still having the same result. Here is the current code after processing the effect (in the PluginProcessor.cpp file):

for (int ch = 1; ch < buffer.getNumChannels(); ++ch)
    buffer.copyFrom(ch, 0, buffer, 0, 0, buffer.getNumSamples());

I tried looking at the mda dub delay source code, but since it’s not made with JUCE I’m kind of outside my comfort zone.

I’m not sure bout this either. Had a brief look at your code but couldn’t find anything. Since you’re using a guitar you could try putting our mono summing plugin at the start of the FX chain. It basically sums the audio from all channels and puts the summed result on all channels meaning if for some reason one of your channels were silent when plugged all the way in (could be the case when interchanging mono and stereo jacks) and that channel would then be copied to the one that still has the sound this would probably remedy the issue :slight_smile:

2 Likes

That worked! I’ll update the configs in the NeuralPi repo, thanks!

1 Like

NeuralPi v1.1 is out, this adds model select/EQ/Gain/Volume controls over WiFi from a remote instance of the plugin. I used the elk juce plugin example for implementing OSC messages. This release also functions as a normal plugin on Windows/Mac so you can try it out without building the NeuralPi.

See the products section on the GuitarML website for download, and the ToneLibrary on the site for various amp/pedal captures.

https://guitarml.com/

6 Likes

Literally cannot wait to try this