The Borg ER-3

4 min readSep 12, 2021


Well it had been ten years James thought to himself, a project that he strived to perfect and yet to this day felt as though he had made some crucial errors along the way, while limiting the previous version to the Win32 API was intentional, some of the finer details where a product of the times, some outright bad code, wave table oscillators with for loops (ouch), wav export with jumbled use of bytes, writing 8-bit mono as 16-bit, although none of these problems where particularly evident to those who used the Borg, they where just imperfections that needed to be ironed out.

This was his time to iron out his mistakes, to perfect the imperfect. I glanced at the abstracted C++ code of the prior version and frowned, so many source files, so much bloat, surly this could be more condensed. He thought you know what, I will use C this time and limit myself to one or three source files, I will make sure the UI is as efficient as possible, leaving no margin for error and in turn no if statement triggered unnecessarily. Every part of the UI code was to be thoughtfully curated and limited to a single source file — to make it easier for others to read and learn from, possibly even adapt to new creations.

In ten years a lot had changed for James, he had grown tired of the Windows operating system and had long moved onto GNU Linux, and in turn, he was becoming tired of running the Borg ER-2 under wine. Something had to change, somehow, things had to be better.

SDL was no new beast to James, in-fact he had long been accustomed to it since v1.2 back in 2006, for all intents and purposes he felt it was a brilliant piece of middleware. If anything, he was excited to be revisiting a familiar area if all but forgotten for him since ~2009.

Well, here we are, a ten-year anniversary. It’s just me and you now, old friend.

If there was a familiar place for James to revisit, this was it, to do justice where justice is due. He’d always been valiant about guarding the sanctity of right and wrong, albeit no mere marvel fanatic to the dismay of many he brush fourth, you could imagine him as an archaic teacher with a strict vision of things to come, based upon years of misspent experience, and rightly so.

Jaded, not wearing glasses but giving the distinct impression of someone who’d be that out of touch to be wearing bold jam-jar lenses. A real kook.

It was here and he’d done what he set out to do and if there was only one thing you needed to know it is that the Borg was created for you to enjoy, for you to understand, for you to plagiarise until your heart is content because there is absolutely no meaning beyond the expression of creativity without repurpose. But you might also like to know that the space-bar has been bound as a hotkey to play the current sample on demand, the bottom left corner is the bank selection, if you wish to clear the banks you need to locate your file in some ~/.local/share/voxdsp/borg or appdata equivalent on windows and delete it.

Things had become simpler, no longer could one select individual oscillators, filters had now become global and thus only applied to the master output, or well, the MSTR oscillator. Envelopes can now be drawn with your mouse by clicking in the rectangle and dragging around the mouse pointer. When you export a wav, which is the only export option, it will save to the local directory that the Borg-ER3 binary is located in — as the name of the bank selected, e.g, bank-0.wav.

Oscillators had changed, although seemingly amusing initially the oscillators had become FARTs, or also known as Frequency, Amplitude, Resolution, and Transformation oscillators, where the resolution regards harmonic resolution and transformation regards which wave-shape is being produced by the oscillator. Right clicking to cycle dial turn sensitivity is still a thing.

Biquad filters too had changed, now there were three and you could configure them directly via their raw coefficients, far more flexible and not that much less intuitive. Possibly even a little more interesting for those seeking to better understand the impact of the coefficients directly rather than via a complex Z-plane with poles. BIQUAD1 is executed first, then 2, and 3.

There was not much more to tell you at this point, James was going to continue being James, and in turn, the world around him would continue to be just that which it wanted to be, but the source code was essential and fairly easy to build, as no pre-built binaries were available for anyone other than Linux users, and even then they needed to install some dependencies such as sudo apt install libsdl2-2.0-0 libsdl2-dev other than that you could compile using either clang or gcc but James always preferred clang in these specific cases sudo apt install clang and so it was clang main.c -Ofast -lSDL2 -lm -o borg.

Of course, you’d need the source code first and that was here.

Windows build: borg.exe & SDL2.dll
Linux build: borg

And now also the Borg ER-0 that allows users to draw oscillators, a much simpler and intuitive approach to tone synthesis:

Windows build: borg0.exe & SDL2.dll
Linux build: borg0