Giter Club home page Giter Club logo

js_inflator's Introduction

JS Inflator

JS Inflator is a copy of Sonox Inflator.
Runs in double precision 64-bit internal processing.
Also double precision input / output if supported.

GitHub Release GitHub Downloads (all assets, all releases)

Static Badge

Comes in two GUIs. The alternative GUI is made by Twarch.

Compatibility

VST3, AUv2

System Requirements

Audio Units

  • Mac OS X 10.13 or later (Intel or Apple Silicon Native)

VST3

  • Mac OS X 10.13 or later (Intel or Apple Silicon Native)
  • Windows 10 or later

Supported DAW

Cubase, Ableton Live, Logic Pro, Cakewalk by Bandlab, Bitwig are tested as working.

How to use

Windows

Unzip Windows version from latest Release and copy to "C:\Program Files\Common Files\VST3".

MacOS

Unzip macOS version 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, CodeSign plugins in console as

sudo xattr -r -d com.apple.quarantine /Library/Audio/Plug-Ins/VST3/JS_Inflator.vst3  
sudo xattr -r -d com.apple.quarantine /Library/Audio/Plug-Ins/Components/JS_Inflator.component

sudo codesign --force --sign - /Library/Audio/Plug-Ins/VST3/JS_Inflator.vst3  
sudo codesign --force --sign - /Library/Audio/Plug-Ins/Components/JS_Inflator.component  

tested by @jonasborneland here

Version upgrade from v1.x.x to v2.x.x

Just delete old one and use new one!
Any DAW with steinberg standard will automatically replace old plugins while opening project.
Settings are also transfered automatically.

Also, after plugin version change, do not open projects directly.
Please open a blank project first, and let DAW scan plugins and change from v1 to v2, and then we can safely open previous projects.

Tested as working are;

  1. Cubase 12(Windows), plugin v1.7.0 -> v2.0.0
  2. Cubase 12(macOS), plugin v1.7.0 -> v2.0.0
  3. Cubase 12(Windows), plugin v1.7.0 -> Cubase 12(macOS), plugin v2.0.0
  4. Logic 10, plugin v1.7.0 -> v2.0.0
  5. Ableton 12(Windows), plugin v1.7.0 -> v2.0.0
  6. Ableton 12(macOS), plugin v1.7.0 -> v2.0.0
  7. Ableton 12(Windows), plugin v1.7.0 -> Ableton 12(macOS), plugin v2.0.0

Licensing

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

Project Build

Use CMake to build itself or make IDE project file.
Supports Windows, Mac, Linux(same as VSTSDK).

Version logs

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

  1. AUv2 build added. VSTSDK update to 3.7.9. Xcode 15.2, OSX 14.2 build.
  2. Changed oversampling method from whole buff resample to each sample resample, for less crashes.
  3. hiir min-phase resampler is no longer used, and implememted my own FIR resampler with SSE2 optimization.
  4. Fir filter is now hardwired.
  5. Bypass latency compensated.

v1.7.0: Fir using Kaiser-Bessel window, label change from 'Lin' to 'Max'.

v2.0.0

  • Rename 'InflatorPackage' into 'JS Inflator'.
  • AUv2: Controller state was overwriting Processor state. Fixed.
  • Ctrl-Z: VU meter was using parameter to send data to Controller, and it caued 'undo history' to be filled with meter changes. Fixed.
  • Meters are now following envelope detector with time contants.

v2.0.1: Fix for Crash for Ableton, and fix for VU meter in Twarch GUI.

v2.0.2: Two GUIs are now integrated to one plugin.

v2.0.2.1: GUI recall state corrected(Bitwig).

v2.0.2.2: Re-structure how GUI switching works to more safe way.

v2.0.3: Error in Apple Silicon Native build fixed.

v2.0.3.1: Fixed issue with Cubase 13. It was caused by 'DataExchange' method so fixed by reverting to lagacy method(sendMesseage).

v2.0.3.2: Fixed issue with Cakewalk by Bandlab. It was caused by 'setDirty' in VuMeters so deleted it.

What I've learned

  • 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:

  1. doubling samples
  2. LP Filtering
  3. ProcessAudio
  4. LP Filtering
  5. reducing samples
  • Linear Phase

HIIR resampling is Min-phase resampler, meaning phase disorder at high freqs.
For more natural high frequency hearing, Linear resampling such as r8brain-free-src designed by Aleksey Vaneev of Voxengo is recomanded.
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

2x Min-phase

2x Lin-phase

4x Min-phase

4x Lin-phase

8x Min-phase

8x Lin-phase

  • SIMD optimization

To my surprise, manual SSE2 SIMD optimization was slower then compiler's O3 maximum optimization.
The compiler's vectorization was more efficient than mine... Anyone trying to do so, check and compare!

  • Latency change reporting

Restarting plugin should be from Contorller side.
One example would be using 'sendTextMessage' and 'receiveText' pair, so when Processor detects parameter change related to latency, it sends textMessage and Controller receives it and restarts.

However, In AUv2, the restartComponent should call setupProcess, but it does not...
Due to this, we should move any initializing into new custom function, and call it in setupProcess and process both, with checking if that new function is called.

https://forums.steinberg.net/t/reporting-latency-change/201601
https://forums.steinberg.net/t/how-to-use-restartcomponent-and-which-flags-are-the-right-one-when-changing-all-characteristics-parameters-except-size/202031
https://steinbergmedia.github.io/vst3_dev_portal/pages/Technical+Documentation/Workflow+Diagrams/Audio+Processor+Call+Sequence.html

  • Knob Modes

Specifying knob modes at 'createView' in 'controller.cpp' makes knobs work in selected mode.

setKnobMode(Steinberg::Vst::KnobModes::kLinearMode);

https://github.com/Kiriki-liszt/JS_Inflator_to_VST2_VST3/blob/v1.6.0/source/InflatorPackagecontroller.cpp#L339

  • How VSTSDK identifies each plugins

It uses "Steinberg::FUID kProcessorUID" in cid header to identify plugin.
So, if ProcessorUID is kept same, host will see it as same plugin.
In example, project using v1.7.0 'InflatorPackage' will automatically replace it with v2.0.0 'JS Inflator', with same settings.

However, ParamIDs should be same as before while replacing old plugin with new one.
If else, one should use Vst::IRemapParamID introduced in VSTSDK v3.7.11.

  • About AUv2

While using AUv2 wrapper of VSTSDK, one should save Controller state also.
IDK why, but in AUv2 wrapper overwrites values set from state to default UI values.

The version number in plist is converted from hex to decimal.
For example, v1.7.2 -> 0x010702 -> 67330.

  • VSTSDK with apple ARM Release setting

By default, VSTSDK sets Release setting with -O3 and -ffast-math.
It caused std::sqrt(1.0 - (i*i)/(n*n)) to return NaN instead of 0.0, when i == n.

references

  1. RC Inflator
    https://forum.cockos.com/showthread.php?t=256286
    https://github.com/ReaTeam/JSFX/tree/master/Distortion

  2. HIIR resampling codes by 'Laurent De Soras'.
    http://ldesoras.free.fr/index.html

  3. 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.

Todo

  • GUI : double click to enter value.
  • Double click to reset to default.
  • Bypass automation flag.

js_inflator's People

Contributors

kiriki-liszt avatar dromer avatar realies avatar

Stargazers

Dmitry Uchkin avatar BlackBook avatar DaYuan avatar Kiren Srinivasan avatar  avatar Ismael avatar  avatar Anton Mata avatar Joseph Eudave avatar gyarakzatyalanmeth avatar Patrick Aleite avatar Daniel Monzonís avatar  avatar danigb avatar Daniel Gombert avatar dfsamix avatar Myungsun Seo avatar 0y0 avatar Sungho Kim avatar  avatar Adam Burucs avatar Bioo dev avatar Caps avatar  avatar  avatar Matt Juhl avatar HainanY avatar Hibiki1606 avatar Steve Gulics avatar YOSHI avatar  avatar KazSasaki avatar Maksym Proskurnia avatar  avatar  avatar  avatar Augusto Moreira avatar Ken N avatar Paulo Thiago Santa avatar  avatar <Reis /> avatar  avatar  avatar  avatar Jan Bessler avatar  avatar Seonggil Kim avatar  avatar  avatar  avatar elpeople avatar  avatar Shu Kakihana avatar  avatar  avatar migizo avatar  avatar Giorgio Presti avatar  avatar  avatar Namkyu avatar Hysteria avatar Hangoon avatar Gianmarco P. avatar 김균태 avatar David C. avatar WoodMood avatar  avatar  avatar Cris avatar MusicHunter avatar  avatar Iccarus avatar  avatar Kaem avatar Daniel Marcos avatar kastru avatar Shodeawl avatar  avatar Athema avatar  avatar  avatar Isaak avatar Xyzuvw avatar Jonny He avatar Sunbin Kim avatar Olive avatar Bart Brouns avatar  avatar André Góis avatar Alex Charlton avatar Hom Tanks avatar  avatar Billy Messenger avatar Perry Janssen avatar Jang HyunWoong avatar Last Day Alive avatar DoctorWomp avatar  avatar  avatar

Watchers

Lubomir Panak avatar Uriy avatar BlackBook avatar  avatar  avatar  avatar  avatar  avatar  avatar

js_inflator's Issues

On an M1 Mac under Logic, oversampling > 1x is not working

Hi! Thanks for the plugin. However, on an M1 Mac under Logic, any oversampling > 1x is not working and results in a one-time click. On 1.7.0, this at least is reversible by returning to 1x, on 2.0.1, the plugin has to be restarted. Regards

Plugin doesn't load in macOS 10.14 (Mojave) / Logic Pro X 10.5.1

No matter what I do, the plugin doesn't seem to be loaded. It doesn't matter if I place it in "/Users/Mike/Library/Audio/Plug-Ins/VST3/" or "/Library/Audio/Plug-Ins/VST3/".

PS: I have removed the macOS quarantine and the read/write-rights seem to be fine.

macOS: 10.14 (Mojave)
DAW: Logic Pro X 10.5.1

Metering too rapid

In both GUI versions I found the metering to be too quick. I think it needs to be optimized to be reacting more like a meter in a DAW (a bit slowed down, but also indicating the highest peak). You can look into VU or RMS meters, which are a bit slowed down / averaged / smoothed to be more useful for users.

New GUI

Hello, I am a designer and I would like to give a professional look to the plugin, if someone can help me and collaborate together since I can't use vstsdk. (I speak Spanish but I translate with the ee google translator).

cannot access the new GUI

Hi with previous version was able to change the GUI

But now stuck with only the first version of the GUI and not able to use the new one

I'm on win 10 pro 64bit and ableton live 11 or 12

GUI errors

1:When the plug-in is opened, the gui always jumps once, from large to small,
2:There is always a 1 second delay when you select any other size
win7 S1

Hope you to optimize the new GUI, thanks!

How to install

Hi
How do I install this? 😊
Dosen't seem to work just to drag over the vst files in the vst3 folder on my mac, and I can't find any install instructions?
Maybe I'm just really overseeing something?

Norton flagged and pulled vst3

Looking forward to this plugin. Unfortunately Norton flagged and pulled it immediately. I don't mess around with flagged files. Any idea why?

Initialisierung fail

Windows: Sobald Inflator 1.6 Oversampling im Linear Mode verwendet, wird es beim nächsten Projekt-laden nicht aktiv und muss als neue Instanz dem Projekt hizugefügt werden. Im Minphasen Mode kein Problem.

DAW: Samplitude ProX / Sequoia

Plugin has very low level static noise always in the background

hey there, loved your work on this one!
there is a static noise on a very low level that is always there.
added a screenshot to demonstrate:
image

i would appreciate it so much if you could investigate this and clean it up.
thank you so much for your hard work!

Won't work in pro tools

I do all my work in pro tools, but when I open this plugin crashes my daw straight away. I use blue patchwork to open vst plugins in pro tools, and they all work perfectly. This is the first vst I've encountered and does that, any way to fix this?
By the way, it works in other daws and I can say this plugin It's a must have. Thanks

Doesn't seem to work on M1 Mac running Monterey.

DAWs seem to recognize something but Gatekeeper flags it as being from an unidentified developer - unfortunately disabling Gatekeeper doesn't fix anything as the plugin doesn't show up in the plugins list. Tested in Ableton 11 and DaVinci Resolve.

Mac seems to recognize the file as an application whereas vst3 plugins are usually bundles. Perhaps fixing this would also help.

Error in a header file

Hello

Today I dowloaded the code and there is some fishy and missing bit in this header :

InflatorPackageprocessor.h

<<<<<<< HEAD
inline double CubicInterpolate(

private:
};


namespace ADAAConst
{
	constexpr double TOL = 1.0e-5;
}

/** Base class for 1st-order ADAA */
class ADAA1 : public StandardNL
{
public:
	ADAA1() = default;
	virtual ~ADAA1() {}

	void prepare() override
	{
		x1 = 0.0;
		ad1_x1 = 0.0;
	}

	inline double process(double x) noexcept override
	{
		// both x and y interpolation method take effect
		// interpolation at ill condition is better with simple linear - less quantization noise

		// TODO : x4 Interpolation?

		const size_t m7 = sizeof(double) * 7;

		memmove(x8 + 1, x8, m7); x8[0] = x;
		x = x8[4];

		bool illCondition = std::abs(x - x1) < ADAAConst::TOL;
		double ad1_x = nlFunc_AD1(x);

		double y = illCondition ?
			nlFunc(0.5 * (x + x1)) :
			(ad1_x - ad1_x1) / (x - x1);
		ad1_x1 = ad1_x;
		x1 = x;

		memmove(y8 + 1, y8, m7); y8[0] = y;
		double out = Lanczos_Half(y8[7], y8[6], y8[5], y8[4], y8[3], y8[2], y8[1], y8[0]);

		x = Lanczos_Half(x8[7], x8[6], x8[5], x8[4], x8[3], x8[2], x8[1], x8[0]);
		illCondition = std::abs(x - x1) < ADAAConst::TOL;
		ad1_x = nlFunc_AD1(x);

		double y0 = illCondition ?
			nlFunc(0.5 * (x + x1)) :
			(ad1_x - ad1_x1) / (x - x1);
		ad1_x1 = ad1_x;
		x1 = x;

		memmove(y8 + 1, y8, m7); y8[0] = y0;

		return out;
	}

protected:
	virtual inline double nlFunc(double x) const noexcept { return func(x); }
	virtual inline double nlFunc_AD1(double x) const noexcept { return func_AD1(x); }

	static constexpr size_t A = 4;

	double x8[8] = { 0.0, };
	double y8[8] = { 0.0, };

	inline double kernel(double x)
	{
		if (fabs(x) < 1e-7)
			return 1;
		return A * sin(M_PI * x) * sin(M_PI * x / A) / (M_PI * M_PI * x * x);
	}

	// buffer = 0 1 2 3_4 5 6 7
	// want   = 3.5
	// i      = 0 1 2 3_4 5 6 7
	// S(3.5) = b[0]*L( 3.5) + b[1]*L( 2.5) + b[2]*L( 1.5) + b[3]*L( 0.5)
	//        + b[4]*L(-0.5) + b[5]*L(-1.5) + b[6]*L(-2.5) + b[7]*L(-3.5)
	const double LH[8]   = { kernel( 3.5 ), kernel( 2.5 ), kernel( 1.5 ), kernel( 0.5 ),
	                         kernel(-0.5 ), kernel(-1.5 ), kernel(-2.5 ), kernel(-3.5 ) };
	/*
	const double LH[8] = {
		-1.26608778212386683e-02,
		5.99094833772628801e-02,
		-1.66415231603508018e-01,
		6.20383013240694559e-01,
		6.20383013240694559e-01,
		-1.66415231603508018e-01,
		5.99094833772628801e-02,
		-1.26608778212386683e-02 };
	*/

	double Lanczos_Half(
		double y0, double y1, double y2, double y3,
		double y4, double y5, double y6, double y7) const
	{
		return y0 * LH[0] + y1 * LH[1] + y2 * LH[2] + y3 * LH[3]
			 + y4 * LH[4] + y5 * LH[5] + y6 * LH[6] + y7 * LH[7];
	}

	double CubicInterpolate(

1884726

missing buttons

Hello - thanks for this great project.

I decided to try the twarch interface and I noticed the two round buttons at the bottom, "effect" and "curve"
are missing. I can use the mouse to drag over there location as normal and they're still functional.

Latest 64 bit Windows 10. Am I missing a possible support program, or could this be because I'm using
motherboard graphics, no real GPU installed.

Cubase 13 pro crashing with JS

Hi there! When I put into insert JS in my any Cubase project and trying resize and then changing oversampling Cubase goes to crash. It always happened and its not and occasion in any of my projects. Then, when I try to explore Cubase crash log I see problems with any different plugins loaded into this project. Despite this problem I really love this plugin. And really want it to work!

Linux builds?

The Readme says Linux not compatible. but it can be built:

Rezisable interface and clickable knobs to enter value

Hey, just a few suggestions to enhance your plugin :)

First, many thanks for your work, it's very nice to have a free inflator in VST3 ! I use the RC version in Reaper but now I can use it in Studio One 👍

I think the interface could be better with a resizing option (lower right zipper?) and especially more sharpness on controls and fonts.
An option that could also be useful would be to be able to click the buttons to enter the value.

last point, I find that the oversampling under Reaper gives a better result than the oversampling integrated into the plugin, maybe a point to improve?

Multiband Mode

I tried your version and compared it to the original. It sounds insanely cool! In a blind test, my assistant and I chose your version. The only thing missing is the multiband mode, which we use a lot. Will you be able to implement it in future releases?

Anyway, even the current version sounds great and, as a mastering engineer, I would be happy to beta test and become an endorser!

Best regards, Alex

Oversampling

Thank you so much for putting this together. Awesome stuff.

Could you please incorporate 8X oversampling? I'm sure you know how to do it already but there's also an example by SaulT on page 5 of the RCInflator thread.

8X Oversampled RCInflator:
https://stash.reaper.fm/v/43489/RCInflator-OS.jsfx

It would also be cool to have "Oxford Edition" and "Ideal Edition" like RCInflator implemented.

crashed validation logic pro

hi, i got this issue on installing. using Logic pro 11.1 and macOS Sonoma 14.6.1
ive reinstalled a few times using different versions of the plugin

validating Audio Unit JS Inflator by yg331:

AU Validation Tool
Version: 1.10.0 
Copyright 2003-2019, Apple Inc. All Rights Reserved.
Specify -h (-help) for command options

VALIDATING AUDIO UNIT: 'aufx' - 'yJSI' - 'Yg31'

Manufacturer String: yg331
AudioUnit Name: JS Inflator
Component Version: 2.0.3 (0x20003)

    • PASS

TESTING OPEN TIMES:
COLD:
FATAL ERROR: OpenAComponent: result: -1,0xFFFFFFFF

validation result: couldn’t be opened

Meters Not Working

The meters in recent versions of JS_Inflator are not working on load. I have to turn it off and then back on for them to work. Signal processing seems fine. Tested v2.0.2.2 and v 2.0.3.0. I've gone back to version 1.7.0

I'm using Cakewalk CBB, last version, in win10 up to date.

Thx E

Does not retain plugin settings within FL Studio's Patcher

Windows 10 x64
FL Studio v21.2.3 b4004
11th gen Intel Core i7

JS Inflator v1.7.0 (Twarch GUI)

Expected Outcome:
Reopening a saved project that has a Patcher loaded in a mixer channel with an instance of JS Inflator loads the plugin with the settings saved at the time the project was saved.

Actual Outcome:
Reopening a saved project that has a Patcher loaded in a mixer channel with an instance of JS Inflator loads the plugin with the default settings.

Steps to Reproduce:

  1. Start a new, empty FL Studio project.
  2. Insert a Patcher on the Master mixer channel.
  3. Insert and route JS Inflator within the Patcher window.
  4. Modify the parameters within JS Inflator. In my testing, I manually entered the values in.
  5. Save the FL Studio project, then close FL Studio.
  6. Open FL Studio, then reload the project.
  7. Inspect the instance of JS Inflator to check if the parameter values have reset.

Js Inflator en Pro tools

Hola como estan?. Intente usar el js inflator en pro tools. Ya que solo es VST3 utilice el Blue cat audio, pero lamentablemente cuando lo extrae se produce un error.

INFRACCIÓN DE ACCESO NO SE PUEDE LEER LA UBICACION: 0x0000000000000004

Se podrá solucionar?

Gracias!!

Plugin won't load component is reported damaged

Hey thanks for your work!

Looks like you have built a lovely plugin, sadly I couldn't get it to work so far. When I try to open the plugin MacOS pops up an error message which reports the .component file as broken and can't be opened.

I tried with both GUI's and on Logic and Ableton, all the same.

I'm running an M1 Max on Monterey.

AU?

Not sure where to ask sorry, not expert.

Any chance of an .AU version? Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.