Both sides previous revision
Previous revision
|
|
vanillajuce [2019/01/26 22:28] shane |
vanillajuce [2019/01/26 22:31] (current) shane |
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//((As of 1/26/2019, there's a new //filter-gui// branch which illustrates how to add filters. Note the filter code is MIT-licensed.)), 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. |
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". |