Eurorack-blocks: an open-source project to design your very own Eurorack module

Hi all!

I’d like to share the Eurorack-blocks open-source project with you.

In a nutshell this allows you to develop your own custom Eurorack module, without the need to have any knowledge about hardware engineering:

  • If you are a software developer and want to build a unique module for yourself and your friends,

  • If you are a software developer in a software/hardware company, and want to prototype Eurorack modules quickly without requiring the hardware team interaction.

The Drop module in action.

It allows to develop the whole module on your desktop computer, and we have a simulator for you to test and debug. This way you can iterate on your whole design before you even think about producing the module.

The Kick module in the simulator, which uses VCV Rack.

The project is based on the Daisy Patch Submodule which is the brain of the module, then comes an intermediate board that we plan to “massively” produce, which extends the capabilities of the former, and can be reused from one module to another, and finally your very own custom board layout, which only requires basic soldering skills (can you solder an audio cable? yes? then you’ve got what it takes).

Eurorack-blocks has a small language to describe the UI panel, but it’s even an overstatement to talk about a language.

It also have a tiny meta-build-system that is really easy to understand even, in its most complex form, which includes compiling audio samples directly into your program.

This meta-build-system generates IDE projects for VS Code and Xcode. Also you have the erbb CLI if you prefer.

We have a powerful C++ framework, written in a modern value-based style. Don’t like C++? We have Max/MSP/Gen~ and Faust integrations.

Finally you have a comprehensive documentation to get you started on the right foot.

The projects supports macOS 10.15 or upper, Linux Ubuntu 20.04 and Windows 10 or upper. Any problem while setting up? Please don’t hesitate to report it here!

9 Likes

Hi Raf,

I have to say I really love the concept of this project, and looking through the repo I can see you have put an enormous amount of work into it - thanks for that.

I am going through the ‘setting up’ procedure and got through most of it without any issues - there are a few python packages that dont get installed automatically but I just installed them manually with pip.

Got all the way through to
~/eurorack-blocks/samples/drop$ erbb configure

step inside the drop directory with no issues.

However when I try ‘erbb build simulator’
I get the following message (osx 12.1 with vscode):

Release/Volumes/Drive:1: warning: NUL character seen; rest of line ignored
Release/Volumes/Drive:1: *** missing separator. Stop.
Traceback (most recent call last):
File “/Volumes/Drive A/erbb_1/eurorack-blocks/build-system/scripts/erbb”, line 467, in
sys.exit (main ())
File “/Volumes/Drive A/erbb_1/eurorack-blocks/build-system/scripts/erbb”, line 431, in main
build ()
File “/Volumes/Drive A/erbb_1/eurorack-blocks/build-system/scripts/erbb”, line 276, in build
erbb.build_simulator_make_target (module, cwd, configuration)
File “/Volumes/Drive A/erbb_1/eurorack-blocks/build-system/erbb/init.py”, line 499, in build_simulator_make_target
subprocess.check_call (cmd)
File “/Users/bosnyak/opt/anaconda3/lib/python3.9/subprocess.py”, line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command ‘[‘make’, ‘–jobs’, ‘–directory=/Volumes/Drive A/erbb_1/eurorack-blocks/samples/drop/artifacts/simulator’, ‘install’]’ returned non-zero exit status 2.

Any ideas how to proceed?

1 Like

Hi @bosnyak and thanks for the nice words!

Regarding the problem you are facing, my guess is that it has something to do with the space in the path with “Drive A”. If it’s that, I should have an easy way to reproduce.

Thanks a lot for reporting!

I’ll let you know progress on that bug.

excellent call you are correct, I just ran through it again on another drive without a space in the name and it finished the simulator build with no errors.

I could reproduce here with any folder, if there is a space. The problem is that the Makefile I generate is then broken. I’ll fix that.
Great that you have a workaround!

Hmm so long story short, make (that is also used in Daisy) can’t really handle whitespaces in file paths.
The way it is done allows to have the build system anywhere, so I can’t really avoid those white spaces if they are somewhere in the absolute path.

Apparently the only solution would be to switch to another build system. I was using ninja before through gyp, but they are bugs in gyp that didn’t make it properly work for cross-compilation.
Another solution might be using cmake, but it’s I guess again a lot of work.

@bosnyak can you workaround this for now using drives without a space in the name?

Its no problem, obviously spaces should be avoided in file/directory names anyway. The compiled version of ‘drop’ is working great in Rack 1.1.6 - you could note in the documentation that if you have moved to Rack 2.0 you will have to reinstall Rack 1.1.6. The overall experience is great, even if all you want to do is make some Rack modules it is amazingly easy to get it all working. Excited to continue experimenting, waiting for my new patch.init() to arrive to try the daisy integration.

If you want to use your patch.init(), so with its own UI, you need to have a description of the UI in erbui. But good news: we already did it. We defined a board like kivu12, but it’s made to adapt for the patch.init(). This also allows you to develop on your desktop computer while simulating in VCV Rack:

Screenshot 2022-03-17 at 16.11.38

(it’s called Micropatch for historic purposes :smiley: )

You can then derive your module from the micropatch board.
There is an example in this test.

This board is based on an old version of patch.init() so please report if you see anything fancy (typically CVs being inverted or not having the full value swing).

Ah also, the SD card is missing in the simulator unfortunately, still didn’t make an abstraction for it.

Hope this helps! :slight_smile:

Love this project. Support for CLion would be great :slight_smile:

3 Likes

Here is a video of another real module made with it (just soldered it today), using the Faust audio functional language. The code (one line of Faust) is here :slight_smile:

5 Likes

I am having a great time using Eurorack-blocks to build all kinds of modules in VCV rack. It is absolutely fanastic but I’ve come up against a problem when trying to make a module with stereo inputs and outputs.

For the sake of debugging, i’ve tried making a module with just in1, in2, out1 and out2 wired in parallel. I’ve used the suggested erbui from the documentation.

control audio_in_left AudioIn {
   position 2hp, 111mm
   style thonk.pj398sm.knurled
   label "IN L"
   cascade audio_in_right
}

control audio_in_right AudioIn {
   position 4.66hp, 111mm
   style thonk.pj398sm.knurled
   label "IN R"
}

control audio_out_left AudioOut {
   position 7.33hp, 111mm
   style thonk.pj398sm.knurled
   label "OUT L"
}

control audio_out_right AudioOut {
   position 10hp, 111mm
   style thonk.pj398sm.knurled
   label "OUT R"
}

But I come up with this error when building the simulator

clam@Clams-MacBook-Air Tester % erbb configure            
clam@Clams-MacBook-Air Tester % erbb build simulator_xcode
objc[40446]: Class AMSupportURLConnectionDelegate is implemented in both /usr/lib/libauthinstall.dylib (0x1ed957b78) and /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x110f3c2c8). One of the two will be used. Which one is undefined.
objc[40446]: Class AMSupportURLSession is implemented in both /usr/lib/libauthinstall.dylib (0x1ed957bc8) and /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x110f3c318). One of the two will be used. Which one is undefined.
ACTION Transpile Ui
ACTION Transpile VcvRack
COPY /Users/clam/eurorack-blocks/max/Tester/artifacts/panel_vcvrack.svg
COPY /Users/clam/eurorack-blocks/max/Tester/artifacts/plugin.json
CXX /Users/clam/eurorack-blocks/max/Tester/Tester.cpp
/Users/clam/eurorack-blocks/max/Tester/Tester.cpp:20:10: error: no member named 'audio_out' in 'TesterUi'
      ui.audio_out [i] = ui.audio_in [i];
      ~~ ^
/Users/clam/eurorack-blocks/max/Tester/Tester.cpp:20:29: error: no member named 'audio_in' in 'TesterUi'
      ui.audio_out [i] = ui.audio_in [i];
                         ~~ ^
2 errors generated.

** BUILD FAILED **


The following build commands failed:
	CompileC /Users/clam/eurorack-blocks/max/Tester/artifacts/build/project_vcvrack.build/Release/Tester.build/Objects-normal/x86_64/Tester.o /Users/clam/eurorack-blocks/max/Tester/Tester.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'Tester' from project 'project_vcvrack')
(1 failure)
Traceback (most recent call last):
  File "/Users/clam/eurorack-blocks/build-system/scripts/erbb", line 467, in <module>
    sys.exit (main ())
  File "/Users/clam/eurorack-blocks/build-system/scripts/erbb", line 431, in main
    build ()
  File "/Users/clam/eurorack-blocks/build-system/scripts/erbb", line 281, in build
    erbb.build_simulator_xcode_target (module, cwd, configuration)
  File "/Users/clam/eurorack-blocks/build-system/erbb/__init__.py", line 477, in build_simulator_xcode_target
    asyncio.run (run_command (cmd))
  File "/opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete
    return future.result()
  File "/Users/clam/eurorack-blocks/build-system/erbb/__init__.py", line 475, in run_command
    raise subprocess.CalledProcessError (process.returncode, command)
subprocess.CalledProcessError: Command '['/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild', '-project', '/Users/clam/eurorack-blocks/max/Tester/artifacts/project_vcvrack.xcodeproj', '-configuration', 'Release', '-target', 'Tester', '-parallelizeTargets', '-PBXBuildsContinueAfterErrors=NO', 'SYMROOT=/Users/clam/eurorack-blocks/max/Tester/artifacts/build']' returned non-zero exit status 65.
clam@Clams-MacBook-Air Tester % 

Is it just a matter of labelling the inputs and outputs differently in Max? It all works fine when I do stuff in mono?

I’m basically planning to debug this module all day so hopefully I don’t don’t up with too many silly questions!

Hi @sam !

Happy to know that you are enjoying Eurorack-blocks so far!

Regarding your error, it seems that you have created the project with erbb init Tester rather than erbb max init Tester. Normally you shouldn’t have a Tester.cpp in the folder (and so also in your Tester.erbb file)

max$ mkdir Tester
max$ cd Tester
max/Tester$ erbb max init Tester

Then your folder structure should look like this:

Thanks,

Raphael

Hi @raf , thanks for creating Eurorack-blocks, can’t wait to start prototyping!

I’m following your getting started setup guide but when I try to build a simulator (I’m on Windows 10), I get missing files dependencies, though everything seems to be in place. Any clues what is happening here? Thanks

~/eurorack-blocks/samples/drop $ erbb build simulator
Traceback (most recent call last):
File “C:\Users\Alex\eurorack-blocks\build-system\scripts\erbb”, line 467, in
sys.exit (main ())
File “C:\Users\Alex\eurorack-blocks\build-system\scripts\erbb”, line 431, in main
build ()
File “C:\Users\Alex\eurorack-blocks\build-system\scripts\erbb”, line 276, in build
erbb.build_simulator_make_target (module, cwd, configuration)
File “C:\Users\Alex\eurorack-blocks\build-system\erbb_init_.py”, line 499, in build_simulator_make_target
subprocess.check_call (cmd)
File “C:\Users\Alex\AppData\Local\Programs\Python\Python310\lib\subprocess.py”, line 364, in check_call
retcode = call(*popenargs, **kwargs)
File “C:\Users\Alex\AppData\Local\Programs\Python\Python310\lib\subprocess.py”, line 345, in call
with Popen(*popenargs, **kwargs) as p:
File “C:\Users\Alex\AppData\Local\Programs\Python\Python310\lib\subprocess.py”, line 966, in init
self._execute_child(args, executable, preexec_fn, close_fds,
File “C:\Users\Alex\AppData\Local\Programs\Python\Python310\lib\subprocess.py”, line 1435, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified

Deleted because Raf will have a better solution.

Hi @Alex !

Thanks for the nice words! And sorry you are having problems with Eurorack-blocks on Windows. The Windows installation is quite tricky at the moment, hopefully we’ll be able to streamline it after.

This failed check_call seems to indicate that Git bash can’t find make for some reason.

Could you please run:

$ make --version

And please tell me if the command succeeds?

Thanks!

(@sam I don’t think the Xcode build would help him, as I don’t think that Xcode is supported on Windows 10)

Raphael

Thanks Raf, you’re absolutely right. I had a sense that something was wrong with the directory. I wonder if this might be the solution to some of my other problems as well.

1 Like

You were absolutely right! Running make returned command not found.

I ran choco install make and now the simulator build works flawlessly! Thanks for the help :muscle:

1 Like

EDIT: Was asked to post this here if anyone experience similar problems when setting up eurorack-blocks with Max on Windows (i’m on 11):

I installed everything as the guide says; python3, vcv rack, max (with license), git bash, chocolatey, and MSYS2 (I’m on Windows 11).

But when I try to do the command in ~/eurorack-blocks ./build-system/install.py i get this response:
** /usr/bin/env: ‘python3’: No such file or directory**

I see that when I install Python3 it is located in User/AppData/Local/Programs/Python… is it because the python install is in another location?.. hm

Now I got past this - I had to say “python ./build-system/install.py” instead of just “./build-system/install.py”. But otherwise it checked out in the end. I also installed python 2.7 instead of 3, but I don’t know if that was the thing that helped…

Also I had troubles with bash not recognizing my main directory C:\Users\user name as there was a space in my user name. I changed it - some regestry edit - and the setup went through!) but I am having VCV Rack build problems in Max with the Reverb sample:

I open up the reverb.maxpat and again it seems fine. I save it (ctrl+s) and this comes up in the Max console:

And there is nothing added to the VCV folder “Rack/plugins-v1”.

Any ideas why it isn’t building?

Hi @Cpaf and thanks for trying out Eurorack-blocks!

But when I try to do the command in ~/eurorack-blocks ./build-system/install.py i get this response:
** /usr/bin/env: ‘python3’: No such file or directory**

I’m not sure exactly if Git bash is doing anything about the shebang (by translating paths), but then yes it seems that on Windows running the script with Python is mandatory, so something like:

$ python ./build-system/install.py
# or
$ python3 ./build-system/install.py

Eurorack-blocks relies on Python 3 and won’t work with Python 2.

Could you please run python3 in Git bash and copy/paste what it returns?
For example on my Mac I have:

$ python3
Python 3.8.1 (v3.8.1:1b293b6006, Dec 18 2019, 14:08:53) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Then next thing to test is forcing the build to see what happens. Using Git bash, navigate to the eurorack-blocks/max/reverb directory and type:

$ erbb configure
$ erbb build simulator
mkdir Release
...

And please copy/paste the result to see what is going on.

Thanks!

when i type “python3” I get:
$ python3
Python 3.9.11 (main, Mar 18 2022, 16:54:01) [GCC 11.2.0 64 bit (AMD64)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.

“erbb configure” (and also “erbb build simulator”) in the folder you specified gives back:

$ erbb configure
Traceback (most recent call last):
File “C:\Users\username\eurorack-blocks\build-system\scripts\erbb”, line 466, in
sys.exit (main ())
File “C:\Users\username\eurorack-blocks\build-system\scripts\erbb”, line 420, in main
import erbb
File “C:/Users/username/eurorack-blocks/build-system/erbb/init.py”, line 35, in
from .generators.data.code import Code as dataCode
File “C:/Users/username/eurorack-blocks/build-system/erbb/generators/data/code.py”, line 11, in
from soundfile import SoundFile
ModuleNotFoundError: No module named ‘soundfile’

mkdir Release didn’t return anything visibly in the git bash console