A MIDI driven, performance oriented, versatile synthesizer VST plugin.
VST® is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.
To download JS80P, visit its website at https://attilammagyar.github.io/js80p/.
The source code is available at https://github.com/attilammagyar/js80p under the terms of the GNU General Public License Version 3.
- Table of Contents
- System Requirements
- Installation
- Features
- Bugs
- Frequenctly Asked Questions
- Development
- Operating System: Windows 7 or newer, or Linux (e.g. Ubuntu 20.04 or newer)
- CPU: 32 or 64 bit, SSE2 support
- RAM: 50-200 MB, depending on buffer size
On Linux, the libxcb
, libxcb-render
, and libcairo
libraries, and either
the kdialog
or the zenity
application are required to run JS80P. To install
them on Debian based distributions (e.g. Ubuntu), you can use the following
command:
sudo apt-get install libxcb1 libxcb-render0 libcairo2 zenity kdialog
Tested with REAPER 6.78.
- Download a plugin archive for your platform.
- Extract the ZIP archive.
- Depending on which plugin type you downloaded, copy
js80p.dll
on Windows,js80p.so
on Linux to the folder where you keep your VST 2.4 plugins, or copyjs80p.vst3
(on both Windows and Linux) to your VST 3 folder.
The presets
folder in the archive contains a few sounds that you can load by
clicking the Import Patch icon near the top left corner of the main screen of
the plugin.
- 16 notes polyphony
- 2 oscillators with 10 waveforms:
- sine
- sawtooth
- soft sawtooth
- inverse sawtooth
- soft inverse sawtooth
- triangle
- soft triangle
- square
- soft square
- custom
- 2 filters for each oscillator, 7 filter types:
- low-pass
- high-pass
- band-pass
- notch
- bell (peaking)
- low-shelf
- high-shelf
- portamento
- wave folder
- split keyboard
- amplitude modulation
- frequency modulation
- phase modulation
- built-in effects:
- overdrive
- distortion
- 2 more filters
- stereo echo
- stereo reverb
- 6 envelopes
- 8 low-frequency oscillators (LFO)
- configurable MIDI controllers
(x16)
Oscillator --> Filter --> Wavefolder --> Filter ---------> Mixer --+
| ^ |
(Frequency & Amplitude Modulation) | | |
+-------------------------------------------+ | |
| | |
v (x16) | |
Oscillator --> Filter --> Wavefolder --> Filter ---------+ |
|
+------------------------------------------------------------------+
|
v
Overdrive --> Distortion --> Filter --> Filter --> Echo --> Reverb --> Out
- LV2 support
- Aftertouch support
If you find bugs, please report them at https://github.com/attilammagyar/js80p/issues.
Due to how MIDI works in VST 3 plugins, the recommended distribution for most people is the 64-bit FST plugin which can be loaded into any 64-bit DAW which supports VST 2.4.
If your DAW does not support VST 2.4 however, then you will need the 64-bit VST 3 plugin.
The 32-bit versions are only needed by those who deliberately use a 32-bit DAW, e.g. because they want to keep using some really old plugins which are not available for 64-bit systems.
If you are in doubt, then try the 64 bit FST version, and if your DAW doesn't recognize it, then try the 64 bit VST 3 version, then the 32 bit FST version, etc.
Note that all versions use the same high-precision sound synthesis engine internally, so the CPU architecture does not affect the sound quality.
The reason for JS80P having both kinds of modulation is that they are not always equivalent. They are only identical when the modulator signal is a sinusoid, but with each added harmonic, PM and FM start to differ more and more. A detailed mathematical explanation of this is shown in pm-fm-equivalence.md.
In 2022, I started developing a browser-based synthesizer using the Web Audio API, mostly being inspired by the Yamaha CS-80. I named that project JS-80. Then I started adding one little feature and customization option after the other, then it got out of hand, and I also started finding limitations of doing audio in the browser. So I decided to implement a cleaned up version of this synth in C++ as a DAW plugin (with a better waveshaper antialiasing method than what's available in the browser), and so JS80P was born.
The lib/
directory contains code from the following projects:
To compile JS80P on e.g. Ubuntu Linux 20.04 for all supported platforms, the following packages need to be installed:
apt-get install \
binutils \
build-essential \
g++ \
gcc-multilib \
g++-multilib \
libcairo2-dev \
libcairo2-dev:i386 \
libx11-dev \
libx11-dev:i386 \
libxcb1-dev \
libxcb1-dev:i386 \
libxcb-render0-dev \
libxcb-render0-dev:i386 \
mingw-w64
Assuming that you have installed MinGW-w64 to C:\mingw64
, you can use the
following commands to run tests and compile JS80P for Windows:
SET PATH=C:\mingw64\bin;%PATH%
SET TARGET_PLATFORM=x86_64-w64-mingw32
SET DEV_OS=windows
mingw32-make.exe check
mingw32-make.exe all
Run make check
for running tests.
The following commands (on a 64 bit Linux environment) will compile JS80P for 64 bit Windows, 32 bit Windows, 64 bit Linux, and 32 bit Linux respectively:
TARGET_PLATFORM=x86_64-w64-mingw32 make all
TARGET_PLATFORM=i686-w64-mingw32 make all
TARGET_PLATFORM=x86_64-gpp make all
TARGET_PLATFORM=i686-gpp make all
-
Bandlimited Synthesis of Classic Waveforms from McGill University
-
W3C's adaptation of Audio-EQ-Cookbook.txt by Robert Bristow-Johnson
-
Reducing the Aliasing of Nonlinear Waveshaping Using Continuous-Time Convolution by Julian D. Parker, Vadim Zavalishin, Efflam Le Bivic (a.k.a. Antiderivative Antialiasing, ADAA)
-
Lagrange Interpolation with Equally-Spaced Nodes from NIST Digital Library of Mathematical Functions
-
Using Faster Exponential Approximation from CodingForSpeed.COM