Open source JUCE based guitar distortion plugin released

Dear jucers, I’ve got a project that I want to share with you:

The Schrammel OJD

A GPLv3 licensed plugin, modeling a well known analog guitar distortion/overdrive effects pedal.

Background

Being a guitar player and guitar pedal fan myself and working on somewhat different kind of plugins in my daily job, I really liked the challenge of digging into some analog modeling techniques. I started the project in my free time in the beginning of 2020 and had a bit more time in the lockdown period to push this project forward. In the last months it was not on the top of my priority list, so the progress has been a bit slow until my employer had the idea to write a blog article about this project – which now gave me the drive to set up a website, clean up the projects git repository and set up Instagram and Facebook pages to be able to promote it a bit. As I still consider it to be in a late beta state I did not promote it myself a lot, but it seems like people who found it via the resources mentioned above like it, already shared in on some platforms. I’m quite happy that the download counter added to the repositories readme already shows 580 downloads at the time of writing – I wouldn’t have expected that. So I thought it might be a good time to share it with you :slight_smile:

Challenges and lessons learned

While I consider myself to be a quite good C++ coder, I started my career as a plugin developer at a company where stuff like build servers, websites etc were already set up. So while implementing the functionality in C++ was more or less straightforward to me, I found everything that needs to happen besides this, e.g. making sure that it runs on older machines, codesigning and notarization so that it’s not annoying for users to install the plugin, creating reliably working installers, maintaining a website etc. to be the biggest challenge for me.
Fortunately a good friend of mine who is a graphics designer created the UI and website design for me – I would have never made it look that good by myself :smiley: But the whole UI topic was also a lot more complicated than originally expected, as the SVGs produced by the Adobe design tools my friend used would not render correctly with juce :roll_eyes: So I started setting up an alternative SVG rendering backend as a side project, Resvg4JUCE. But even with that renderer things did not work out entirely great, e.g. knobs were not centered correctly, shadows were still not rendered correctly, so in the end the UI rendering became probably the ugliest part of the code as it combines vector graphics with a lot of tiny offsets calculated by magic number with pre-rendered raster graphics, layered on top of each other.
The whole audio part was done first, so I had a good sounding plugin up and running relatively quickly. I’m really satisfied with the sound and I already think of more analog modeling challenges for future projects to dig a bit deeper into that topic. In the meantime, this is what it sounds like

Next steps

  • As I said, this plugin currently has a dependency to my resvg wrapper, which I consider to be a quick and dirty solution for now. As resvg is a rust library it’s currently built by hand through some shell scripts. I’m planing to build a nice CMake interface around it to be able to build it as part of the plugin via the plugins CMake build script.
  • I want to investigate GitHub actions to get a full build, test and deployment pipeline running. As this is the workflow I’m used from my daily job I know how helpful that is, especially when creating cross platform plugins
  • Based on some user request, I’m planing to extend it to a stereo capable version
  • Based on my personal motivation I’m planing to set up a Linux build once the Windows and macOS build pipeline is running to support the Linux audio community
  • I hope to be able to release an AAX version soon. This is currently only a matter of a signing certificate :disappointed:

Time to say thank you

Thank you JUCE forum, for answering me questions that came up along the way building this plugin (and that come up along the way on my daily job as well :grin:). I am always amazed how this community is willing to share knowledge on all levels of experience. This open source project is also meant to give some know how back to this community. From time to time I might also post something around my open source work to a blog I just started for this project.

15 Likes

Looks nice :slight_smile:
Thanks for the summary of your journey!
Was an interesting read.

1 Like

Really nice work!

I see you’re using the CPack module for building installers using CMake. Would you mind to elaborate a bit on that experience? I looked at CPack briefly a few months ago, but it was a bit of a deeper rabbit hole than I expected and I haven’t found time yet to really dive in. I remember thinking it was going to be tricky for plug-ins for some reason or another…

EDIT: On Windows it looks like you’re somehow using the NSIS generator with an Inno Setup script?

1 Like

Aaaah, these CPack files are a leftover which are not used right now. I planed to use it as it seemed to be a very straightforward way to create a cross-platform installer at first but it was not. This has been discussed in here a bit CMake: COPY_PLUGIN_AFTER_BUILD, CLion and building plugin installers with CPack

I went back to an approach with Inno for Windows and Packages for macOS but left the files there in order to maybe give it another try – but I think this probably won’t happen :wink:

Not a guitar player myself so I don’t know which pedal you’re emulating, but the demo sounds very nice :slight_smile: Thanks for sharing OJD with us! Your contributions to the Juce community have been very helpful in my own journey.

2 Likes

Ah, I was hoping you had found some way of doing installers with CPack that required miraculously little configuration. :smiley:

Thanks for sharing this project!

insane work, especially that you had to make a custom svg reader even though that’s just a side-feature, so to say. i hope juce also updates a lot of its graphics features a bit. it’s definitely really good already but also unfinished in a lot of ways

1 Like