GetDunne Wiki

Notes from the desk of Shane Dunne, software development consultant

User Tools

Site Tools


vanillajuce

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vanillajuce [2017/08/31 12:40]
shane [VanillaJuce]
vanillajuce [2019/01/26 22:31] (current)
shane
Line 1: Line 1:
 ====== VanillaJuce ====== ====== VanillaJuce ======
  
-[[https://github.com/getdunne/VanillaJuce|VanillaJuce]] is a simple example of a complete VST2.4 + AUv2 synthesizer built with JUCE 5.1.+[[https://github.com/getdunne/VanillaJuce|VanillaJuce]] is a simple example of a complete VST2.4 + AUv2 synthesizer built with JUCE 5.x.
  
 In this context, "complete" doesn't mean that this is a particularly great synthesizer; rather, it means that all of the major plugin requirements are covered, i.e.: In this context, "complete" doesn't mean that this is a particularly great synthesizer; rather, it means that all of the major plugin requirements are covered, i.e.:
Line 13: Line 13:
 As a synthesizer, **VanillaJuce** is nothing special; it's not meant to be. Its oscillators are about as simple as possible, and as a result they don't sound very nice, mainly due to //aliasing// which is particularly noticeable when playing higher-pitched notes. Its envelope generators (which nicely illustrate the use of JUCE's //LinearSmoothedValue// template class) provide just enough dynamics that **VanillaJuce** can charitably be called a "synthesizer" rather than an "organ". As a synthesizer, **VanillaJuce** is nothing special; it's not meant to be. Its oscillators are about as simple as possible, and as a result they don't sound very nice, mainly due to //aliasing// which is particularly noticeable when playing higher-pitched notes. Its envelope generators (which nicely illustrate the use of JUCE's //LinearSmoothedValue// template class) provide just enough dynamics that **VanillaJuce** can charitably be called a "synthesizer" rather than an "organ".
  
-Critically, **VanillaJuce** has //no filters//, and thus some might argue that it's "not a real synthesizer". I chose to leave out filters and filter envelope generators (EGs) for three reasons:+Critically, **VanillaJuce** has //no filters//((As of 1/26/2019, there's a new //filter-gui// branch which illustrates how to add filters.)), and thus some might argue that it's "not a real synthesizer". I chose to leave out filters and filter envelope generators (EGs) for three reasons:
   - These things get us into the realm of digital signal processing (DSP), which could greatly complicate what I intended as a simple code example to help the beginning JUCE user get started. (I plan to publish other JUCE examples illustrating DSP.)   - These things get us into the realm of digital signal processing (DSP), which could greatly complicate what I intended as a simple code example to help the beginning JUCE user get started. (I plan to publish other JUCE examples illustrating DSP.)
   - Pragmatically, there's not much point in adding filtering without first addressing aliasing in the oscillators.   - Pragmatically, there's not much point in adding filtering without first addressing aliasing in the oscillators.
Line 20: Line 20:
 There are already enough books and internet resources on DSP and synthesizer design, but I found getting started with JUCE to be a major hurdle. The relevant code examples (at https://www.juce.com/tutorials and in the //examples// folder of the JUCE source code) were either too large ("kitchen sink demos") or more frequently, too small (not "complete" in the sense I describe above). The complete JUCE-based synthesizer examples I was able to find (e.g. the excellent [[https://github.com/2DaT/Obxd|Obxd]]) featured so much customized/optimized code that they couldn't serve to illustrate the "JUCE way" of building a synthesizer plugin. There are already enough books and internet resources on DSP and synthesizer design, but I found getting started with JUCE to be a major hurdle. The relevant code examples (at https://www.juce.com/tutorials and in the //examples// folder of the JUCE source code) were either too large ("kitchen sink demos") or more frequently, too small (not "complete" in the sense I describe above). The complete JUCE-based synthesizer examples I was able to find (e.g. the excellent [[https://github.com/2DaT/Obxd|Obxd]]) featured so much customized/optimized code that they couldn't serve to illustrate the "JUCE way" of building a synthesizer plugin.
  
-So, after figuring out what I needed the hard way, I decided to provide **VanillaJuce** as an open-source //(GPL v3)// code example, to help others get started with the JUCE library.+So, after figuring out what I needed the hard way, I decided to provide **VanillaJuce** as an open-source code example, to help others get started with the JUCE library. For maximum flexibility, I use the [[https://opensource.org/licenses/MIT|MIT License]], which permits use in closed-source projects.
  
 Although I have considerable C++ experience, **I am not a JUCE expert!** I welcome all comments and ideas for how to make **VanillaJuce** a better example for new users, on the [[https://forum.juce.com/|JUCE forum]] where you can find me as user "getdunne". Although I have considerable C++ experience, **I am not a JUCE expert!** I welcome all comments and ideas for how to make **VanillaJuce** a better example for new users, on the [[https://forum.juce.com/|JUCE forum]] where you can find me as user "getdunne".
Line 30: Line 30:
 If you already have JUCE set up, but are not yet familiar with how to use the Projucer to start a new project, have a look at [[getting_started_with_the_projucer|Getting started with the Projucer]] before moving on the code review pages below. If you already have JUCE set up, but are not yet familiar with how to use the Projucer to start a new project, have a look at [[getting_started_with_the_projucer|Getting started with the Projucer]] before moving on the code review pages below.
  
-===== VanillaJuce code review =====+===== VanillaJuce code overview =====
  
   * [[Overview]]   * [[Overview]]
Line 37: Line 37:
   * [[The synthesizer]]   * [[The synthesizer]]
  
 +===== Branches =====
 +Since writing this, I have added two enhancements to the basic project, accessible via separate //branches// of the GitHub repo:
 +  * The //filter-gui// branch illustrates how to add per-voice filters and filter envelopes. The filter code used is from https://github.com/michaeldonovan/VAStateVariableFilter.
 +  * The //network// branch illustrates how to add network connectivity, as discussed in my 2018 talk at the Audio Developer Conference in London; see http://getdunne.net/adc2018.
vanillajuce.1504183222.txt.gz ยท Last modified: 2017/08/31 12:40 by shane