Custom Eurorack modules using Faust & Eurorack-blocks!

Hi everyone!

Maybe some of you know, I’m running the Eurorack-blocks project, which aims to develop your own custom Eurorack module (that is with its own custom front panel), with no knowledge in hardware engineering, and basic soldering skills, in a prototype environment that allows you to test the module before you even manufacture it (that is in VCV Rack). It is using the Daisy Patch Submodule.

Before it was C++ only, but we just added a first iteration for Faust integration. And your feedback is important!

If you wish to try this iteration, please read the documentation on Setting up the Environment — Eurorack-blocks documentation

Shown below is the dm.flanger_demo function in samples/faust we use to demo, and test/faust3 used to test audio samples (here used as an oscillator)

If you are up to try it, please don’t hesitate to post here if you have any questions!

4 Likes

The flanger demo got a custom skin, and has been produced in real! :slight_smile:


3 Likes

G’day @raf ,

I recently fired up your project - pretty slick. My goal is to use faust to write some-what portable DSP things and eventually get it onto a patch.Init(). I’ve been following the handy Eurorack-blocks faust integration guide but seem to have hit a snag while running erbb build simulator:

$ erbb build simulator 
make: Entering directory '/data/eurorack-blocks/samples/faust/artifacts/simulator'
ACTION Faust
ACTION UI
ACTION VCV Rack
warning: non mapped checkbox /FLANGER/0x00/Bypass
warning: non mapped checkbox /FLANGER/0x00/Invert_Flange_Sum
warning: non mapped hslider /FLANGER/Delay_Controls/Flange_Delay
warning: non mapped hslider /FLANGER/Delay_Controls/Delay_Offset
warning: non mapped hslider /FLANGER/0x00/Flanger_Output_Level
warning: non mapped hbargraph /FLANGER/0x00/Flange_LFO
CXX plugin_vcvrack.cpp

It looks like it installs okay, but when I fire up Rack and try and add the Flanger module it segfaults on me.

Any clues? I imagine those warnings would be the first place to look, right?

Cheers

Ok, I had a bit of a dig this evening, I think the non mapped warnings are harmless. I built a debug version and fired up Rack in gdb - I see this:

Thread 1 "Rack" received signal SIGSEGV, Segmentation fault.
0x00007ffff573e318 in mydsp::instanceClear (this=0x1fb1408) at ../module_faust.h:132
132				fRec1[l1] = 0.0f;
(gdb) bt
#0  0x00007ffff573e318 in mydsp::instanceClear (this=0x1fb1408) at ../module_faust.h:132
#1  0x00007ffff573e495 in mydsp::instanceInit (this=0x1fb1408, sample_rate=48014) at ../module_faust.h:156
#2  0x00007ffff573f530 in Flanger::init (this=0x1fb1068) at ../Flanger_erbb.hpp:82

Some weirdness in initialization?
So I took a peek, and added the dsp.memoryCreate(); call to the init function in erbb/generators/faust/code_template.hpp:

   mydsp::classInit (erb_SAMPLE_RATE);
   dsp.memoryCreate(); //                 <<<<
   dsp.instanceInit (erb_SAMPLE_RATE);

After rebuilding the plugin I can now add the Flanger to Rack and it works!
Not sure it’s the right way to be doing things though?

Cheers

EDIT: Let me know if you want me to create an issue on github?

Ah sorry, I didn’t see your message here, but we’ve talking in-between. Thanks again a lot for the suggestion.

The current issue is Rack segfaults when attempting to load a plugin generated via faust · Issue #460 · ohmtech-rdi/eurorack-blocks · GitHub
The main problem being that there was apparently a breaking change introduced in Faust at some point.

Currently, my main idea is to call only memoryCreate if that function exists, but that’s not super satisfying.

G’day @raf ,

No worries, I’ve got a working install, and I’m really enjoying messing around with Eurorack-blocks. In fact, this weekend I managed to get a kind of shimmer greyhole verb up and running on the Patch.Init(), which is fun.

Cheers

1 Like

Here’s something else I knocked up. I borrowed a bunch of Faust filter models - Diode ladder, moog Ladder, Korg35, 2nd order SallenKey, Oberheim SVF, plus some stuff from the physical modelling libs, like the Formant Filter bank and finally some comb filters.

All of them run in parallel, and I can change the model by a push button or via CV, which I think is neat. Here’s a quick run through of the sounds:

https://imgur.com/2dc37Vx

Cheers

Wow that’s cool! Now you can make a specialized UI for it :slight_smile:

@raf How did you make that panel?!?!?!? Would also like to hear how you made the carrier board. Cheers!

Hey @ohthepain ! I think I made the panel in Illustrator, and then imported it in Inkscape to generate a SVG file that is suitable for the limited SVG implementation of VCV Rack that is used to simulate the Eurorack module on your desktop.

The board it uses is kivu12 and it’s made using KiCad :slight_smile:

The project is here if you want to give it a run. I’ve been out of it for quite some time because of work, but I’m going to get back to it during December, and in particular fixing a hardware flaw to handle triggers properly when another module has very short triggers.

Cheers!

Hey @jaradical ! FYI I had time to rework the PR, and I hope it would work now. Maybe do you have the time to evaluate it? It’s sitting here: Fix faust memory create by ohmtech-rdi · Pull Request #464 · ohmtech-rdi/eurorack-blocks · GitHub

Thanks!

1 Like

There’s also related memoryDestroy function that is supposed to be called after patch finishes running to release that memory. That’s not very relevant on MCU where it runs forever, but otherwise you might end up with a memory leak in VCV.

Ah right, I’ll need to check that :+1: I think we are using an allocator in-between, but anyway I’m not sure if I’m releasing the memory.

1 Like