• A synth primer

    In addition to detailing Sine Machine’s engine and UI, it’s worth taking a shallow dip into the words of acoustics, psychoacoustics, sound and synthesis. Synthesizers rely on jargon used in synths over the last few decades, such as Low Frequency Oscillator (LFO) or Cutoff. A new synth like Sine Machine will have a lot of…

  • Other great resources

    Synthesizers rely on jargon used in synths over the last few decades, such as Low Frequency Oscillator (LFO) or Cutoff. A new synth like Sine Machine will have a lot of familiar mental models and invent a few novel ones. Going through fundamentals provides us with two benefits: In addition to detailing Sine Machine’s engine…

  • Adding JUCE Modules

    Additional 3rd party JUCE modules go in /modules. You can add third-party git submodules there (just like how the inspector is set up). Remember to not only call juce_add_module but add the new module to the target_link_libraries list! I (and others, including some of the JUCE team) recommend moving as much as your application code…

  • Clang Format

    There are a huge number of benefits to automatic formatting of code, including the very obvious one of guaranteed consistency and therefore readability.Iit also saves brain cycles and can prevent team bike-shedding. @CrushedPixel, who prompted me to write this FAQ entry says Formatting is a really key component and you’re providing it out of the…

  • Page 2: Envelopes

    Like a lot of other synths, Sine Machine defines envelopes as an ADSR (with a few extra bells and whistles like offset and hold). However, Sine Machine is unique in that it has an envelope per harmonic. Each note you play (in other words, each voice) kicks off 36+ oscillators. Each of those oscillators has…

  • Setting up your project

    After you’ve created a new repo from the template, you have a checklist of things to do to customize for your project. This is what you will see when it’s built, the plugin displaying its version number with a button that opens up the Melatonin Inspector:

  • Partials and Overtones?

    If a guitar is playing the A string, its fundamental frequency is 110Hz. The string produces harmonics in addition to that fundamental, at integer multiples of the fundamental. So the second harmonic would be at 220Hz and the third harmonic would be at 330Hz. What’s a partial? Instruments like bells, drums, synths sometimes produce frequencies…

  • Tips and Gotchas

    Pamplejuce Continuous Integration (CI) out of the box runs against on the latest Linux, Windows, and macOS. You can do it all for free on public repos. For private repos, be sure to do some calculations about free minutes vs. costs on running in CI. GitHub gives you 2000 or 3000 free GitHub Actions “minutes”…

  • GitHub Actions 101

    Pamplejuce Continuous Integration (CI) out of the box runs against on the latest Linux, Windows, and macOS. You can do it all for free on public repos. For private repos, be sure to do some calculations about free minutes vs. costs on running in CI. GitHub gives you 2000 or 3000 free GitHub Actions “minutes”…

  • What is a harmonic?

    What is a harmonic?

    Where do harmonics come from? A quick primer in psychoacoustics.

  • Additive synths vs. other synths

    There are many ways to synthesize a musical tone. Here are a few popular synth types and how I would describe them: Subtractive: We first make a harmonically rich buzz. Then we filter the buzz down to something that sounds pleasing. This is where it all started. Think Minimoog and the Juno 6. FM: Modulate…

  • Trem

    We’ve debated for years what to call this section. We’ve settled for Trem, short for Tremolo. Trem is just jargon for “amplitude modulation.” Which itself is jargon for “moving the volume up and down.” In Sine Machine’s case, you can change (modulate) the volume of individual harmonics within each note over time. I like to…

  • Effects

    In Sine Machine, effects are an integrated part of the additive synthesis engine itself. Sine Machine’s raw power of truly independent harmonic oscillators opens up access to brand new sonic frontiers: per-harmonic effects. With full access to every harmonic over time, we’ve taken the unique opportunity to ground-up redesign what kind of direct control one can…

  • Managing Releases

    Cut a release with downloadable assets by creating a git tag starting with v and pushing it to GitHub. Note that you must push the tag along with an actual commit. I recommend a workflow of bumping the VERSION file and then pushing that as a release, like so: If you see a 403 error,…

  • About Envelopes

    Like a lot of other synths, Sine Machine defines envelopes as an ADSR (with a few extra bells and whistles like offset and hold). However, Sine Machine is unique in that it has an envelope per harmonic. Each note you play (in other words, each voice) kicks off 36+ oscillators. Each of those oscillators has…

  • JuceHeader.h

    Using JuceHeader.h has been deprecated for some time — if it’s a new project, definitely avoid it! Instead, directly include the .h files you need from the juce modules you are using, like so: #include “juce_gui_basics/juce_gui_basics.h” If you are converting an older project, it’s still worth the conversion away from JuceHeader.h to using the actual…

  • Public example projects

    Can I see some examples? Lots of people have used Pamplejuce as their starting place for their private plugin projects. Two amazing public examples (complete with signed binaries) are:

  • What’s the deal with synths, anyway?

    In addition to detailing Sine Machine’s engine and UI, it’s worth taking a shallow dip into the words of acoustics, psychoacoustics, sound and synthesis. Going through fundamentals provides us with two benefits: One classic problem: synthesizers rely on a lot of jargon. When I was starting out, it took me a couple years of toying…

  • How to update my Project

    Because Pamplejuce is a template and not a framework, you’ll have to this somewhat manually. Sorry! Here are the steps I do:

  • Spectrogram

    The top of the Envelopes tab shows you a visual representation of how the harmonic envelopes are currently set. It’s basically a spectrogram, but cleaner and linear scaled. Optimized to make more sense when tweaking patches. The essence is the same: it shows you how your note will evolve over time. Brightness indicates loudness. The…

  • Trigger Mode

    Envelopes vary quite a bit across synths. Their behavior can be surprisingly subtle and complex. When playing a note on Sine Machine, it’s possible that some of the envelopes won’t even have reached sustain by the time you release a note and the MIDI noteOff is sent to Sine Machine. This is actually a fun…

  • How does this all work?

    If you are new to CMake, I suggest you read up about JUCE and CMake on my blog. Pamplejuce is one thing: The actual template that I’ve used for years to make JUCE projects. This means that it’s “batteries included” — it contains everything that I would want in a project for it to feel…

  • The `SharedCode` interface target

    If you want to build both plugin targets and a test target, unfortunately the additional abstraction of the INTERFACE SharedCode target is needed (as of Nov 2023). If you aren’t running tests, shame on you, but hey, then you can edit the CMake and get rid of it 🙂 The summary: JUCE modules build separately…

  • Pamplejuce Docs

    Pamplejuce Docs

    The Pamplejuce README on GitHub was becoming cluttered, so I moved the docs here. Feel free to comment if something needs adjusting. A rising tide lifts all boats. Having a problem or something unclear? Open an issue.