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
vanillajuce [2019/01/26 22:28]
shane
vanillajuce [2019/01/26 22:31] (current)
shane
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//((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.
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".
vanillajuce.1548541703.txt.gz ยท Last modified: 2019/01/26 22:28 by shane