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

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

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

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

  • Sound Designer Tips

    Double clicking a control sets it to it’s default value

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

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

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

  • What is a harmonic?

    What is a harmonic?

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

  • User presets are just files

    Sine Machine’s User Presets are simple .json files stored on your hard drive. They are designed to be easily readable/hackable. macOS Files On MacOS, user presets are stored in your User’s Library directory. ~/Library/Audio/Presets/Melatonin/Sine Machine You can open up that folder by going to Finder’s Go menu and selecting Go To Folder… and pasting in…

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

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

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

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

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

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

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

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

  • Bulk editing harmonics

    Nobody wants to edit spreadsheets of harmonic values. Well, some might, but most do not. Therefore we need ways to make sweeping volume and pitch changes across harmonics. There are 3 things to keep in mind:

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

  • Original References & Insipration

    Some of these repos might be pretty old now, but this is where Pamplejuce came from: CMake GitHub Actions Catch2 & CTest Packaging, Code Signing and Notarization

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

  • 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 do GitHub variables work?

    It can be confusing. Their official documentation is a big fragmented. Here are some tips: ENV variables must set properly in the workflow/job/step before you use it. If you need the variable to be os-agnostic, use the env context.

  • How to include files not in `/source`

    If you have control over the files, I highly recommend taking 3 minutes to make a JUCE module — if nothing else than to wrap the code you need and make the build system nice and easy. See the module API, or other JUCE modules for an example on how to do it. If that’s…

  • Sharpness

    Sharpness

    Increasing sharpness makes the tremolo more dramatic, giving it more attack. For triangle and ramp shapes, turning up the sharpness increases the exponential-ness of the attack and decay, making it pulse-y and…. sharp. Turning down the sharpness produces more of a linear sound (which is what most synthesizer and effect lfos default to). At 50%…

  • Harmonic Bars

    The harmonic bars are are where you can setup the basic fingerprint of a sound in Sine Machine. Each bar represents a harmonic. The height is the volume of the harmonic. For example, to specify the volume of the fundamental, change the blue bar on the far left. You can change any harmonic in the…

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

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

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