• 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…

  • 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…

  • 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…

  • 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…

  • 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”…

  • 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:

  • 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…

  • 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,…

  • DAW FAQ

    Why do I see so many versions of Sine Machine? We release a new major version every time we add or change parameters. This is because we strive to never break an old project of yours. But also we don’t want to just build software once that never improves. We want to add new features,…

  • 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…

  • 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…

  • 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…

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

  • The first 36 harmonics

    Sine Machine’s UI usually only gives you direct access to you the first 36 harmonics. Don’t worry, under the hood, you have 500 per voice working for you. Only 36 are shown in the UI for a few reasons: Given these truths, I made the (arbitrary but informed) decision to help people out by highlighting…

  • Private JUCE modules

    If you want to use a JUCE module that is not publicly published, you can. Generate an ssh key (without a passphrase) for the repository and add it as a secret to your Pamplejuce-derived repository. Then, use the ssh_key option in the checkout action, like so: Also see @mikelange49’s solution here.

  • Setting up Code Signing

    Code signing costs money (~$100 year for both Apple and Microsoft platforms). My advice is to set this up early, as it will be annoying as a TODO getting in the way of your launch! Plus, I’ve done all the hard work for you πŸ™‚ Pamplejuce signs Windows via Azure Trusted Signing. Read more about…

  • 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…

  • 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…

  • 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…

  • 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…

  • 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:

  • 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…

  • 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…

  • 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:

  • User Presets

    Find the preset manager by clicking the current preset name. You can also cycle through all presets with the left and right arrows. Your User presets are stored in the first category User Presets. They are ordered by the date they were last updated. You can create a new preset by clicking Save As from…

  • 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…

  • File Management

    New source files go in /source. All .h and .cpp files in that directory will be available to include in your plugin target and your tests. Tests go in /tests. Just add .cpp files there and they will be available in the Tests target. IDE FILE MANAGEMENT If you use an overeager, CMake-aware IDE (like…