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.
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
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 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 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
- 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
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 ). 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.