JS Inflator is a copy of Sonox Inflator.
Runs in double precision 64-bit internal processing. Also double precision input / output if supported.
Comes in two GUIs. The alternative GUI is made by Twarch.
Windows - x64, SSE2
Mac - macos 10.13 ~ 14.2, SSE2 or NEON
- Windows
Unzip Win.zip from latest release and copy to "C:\Program Files\Common Files\VST3".
- MacOS(Intel tested, Apple Silicon not tested).
Unzip MacOS.zip from latest release and copy vst3 to "/Library/Audio/Plug-Ins/VST3" and component to "/Library/Audio/Plug-Ins/Components".
If it doesn't go well, configure security options in console as
sudo xattr -r -d com.apple.quarantine /Library/Audio/Plug-Ins/VST3/InflatorPackage.vst3 sudo xattr -r -d com.apple.quarantine /Library/Audio/Plug-Ins/Components/InflatorPackage.component sudo codesign --force --sign - /Library/Audio/Plug-Ins/VST3/InflatorPackage.vst3 sudo codesign --force --sign - /Library/Audio/Plug-Ins/Components/InflatorPackage.componenttested by @jonasborneland here
Linux not compatible.
This is my first attempt with VSTSDK & VSTGUI.
Some codes might be inefficent...
Q: I would like to share the source code of my VST 3 plug-in/host on GitHub or other such platform.
- You can choose the GPLv3 license and feel free to share your plug-ins/host's source code including or referencing the VST 3 SDK's sources on GitHub.
- You are allowed to provide a binary form of your plug-ins/host too, provided that you provide its source code as GPLv3 too.
- Note that you have to follow the Steinberg VST usage guidelines.
https://steinbergmedia.github.io/vst3_dev_portal/pages/FAQ/Licensing.html
VSTSDK 3.7.9 used
VSTGUI 4.12 used
Built as VST3, but compatible to VST2, too.
v1.0.0: intial try.
v1.1.0: VuPPM meter change(mono -> stereo, continuous to discrete), but not complete!
v1.2.0: VuPPM meter corrected!
v1.2.1: Channel configuration corrected. probably a bug fix for crashing sometimes.
v1.3.0: Curve knob fixed!!! and 32FP dither by airwindows.
v1.4.0: Oversampling up to x8 now works! DPC works.
v1.5.0: Band Split added.
v1.5.1: macOS build added. Intel x86 & Apple silicon tested.
v1.6.0rc: FX meter(Effect Meter) is added. Original GUI is now on high definition.
v1.6.0rc1: Linear phase Oversampling is now added.
v1.6.0: Linear knob mode is now specified, and GUI size flinching fixed.
v1.7.0.beta + beta 2
- AUv2 build added. VSTSDK update to 3.7.9. Xcode 15.2, OSX 14.2 build.
- Changed oversampling method from whole buff resample to each sample resample, for less crashes.
- hiir min-phase resampler is no longer used, and implememted my own FIR resampler with SSE2 optimization.
- Fir filter is now hardwired.
- Bypass latency compensated.
v1.7.0: Fir using Kaiser-Bessel window, label change from 'Lin' to 'Max'.
Now up to date with latest RC Inflator from ReaTeam/JSFX repository.
- Volumefader
For someone like me, wondering how to use volume fader;
Use a RangeParameter!
param as normalized parameter[0.0, 1.0],
dB as Plain value,
gain as multiplier of each samples.
For normParam to gain, check ~process.cpp
ex)
param | dB | gain |
---|---|---|
0.0 | -12 | 0.25 |
0.5 | 0 | 1 |
1.0 | +12 | 4 |
param | dB | gain |
---|---|---|
0.0 | -12 | 0.25 |
0.5 | -6 | 0.5 |
1.0 | 0 | 1 |
- Resampling
Generally, the process goes as:
- doubling samples
- LP Filtering
- ProcessAudio
- LP Filtering
- reducing samples
Filter choice is most critical, I think.
HIIR code used Polyphase Filter, which is minimun phase filter.
Has some letency, has some phase issue, but both very low.
Compared to 31-tap filter, polyphase has more flat frequency and phase response.
Meaning, HIIR is better at anti-alising.
-
Linear Phase
HIIR resampling is Min-phase resampler, meaning phase distortion at high freqs.
For more natural high frequency hearing I Implemented r8brain-free-src designed by Aleksey Vaneev of Voxengo.
Had some time with it trying understand how FIR works. I still don't know yet but it works.
About weird choices for x4 and x8 - these resamplers have asynchronous latencies so downsampling starts little before upsampling starts.
To fix it, I just changed Transition band for x4 and 24-bit for x8.
Now it is free of Phase issuses. -
Comparisons
1x
- Latency Reporting
Naive implementaiton could use 'sendTextMessage' and 'receiveText' pair.
- Knob Modes
Specifying knob modes at 'createView' in 'controller.cpp' makes knobs work in selected mode.
setKnobMode(Steinberg::Vst::KnobModes::kLinearMode);
-
RC Inflator
https://forum.cockos.com/showthread.php?t=256286
https://github.com/ReaTeam/JSFX/tree/master/Distortion -
HIIR resampling codes by 'Laurent De Soras'.
http://ldesoras.free.fr/index.html -
r8brain-free-src - Sample rate converter designed by Aleksey Vaneev of Voxengo
https://github.com/avaneev/r8brain-free-src
Modified for my need: Fractional resampling, Interpolation parts are deleted.
- Preset save & import menu bar.
- malloc/realloc/free to new/delete change. -> stick with it.
- Oversampling options : Linear phase, Balanced.
- GUI : resizing, and HDDPI.
- GUI : double click to enter value.
- soft bypass latency.