Xhip Synthesizer v8.1 (alpha & RC)

VST, AU, AAX, CLAP, etc. Plugin Virtual Instruments Discussion
Post Reply New Topic
RELATED
PRODUCTS
Xhip Effects Xhip Synthesizer

Post

I've completed quite a few improvements and parameterized the simple "spline" knob renderer. Most of my effort has gone into various bank-end/framework improvements and the actual changes in Xhip itself to support the new features are very basic.

Image
Image
Image
Image

The parameterization shows up in the config file like so:

Code: Select all

color {
	default = grey(1,1/10);
	mod[0] = hsl(0/8,1,1/5);
	mod[1] = hsl(1/8,1,1/5);
	mod[2] = hsl(4/8,1,1/5);
	mod[3] = hsl(5/8,1,1/5);
}
knob {
	// c++ style comments are now supported fully!
	type = spline {
		segments = 3; // even like this
		depth = 1/10;
		gap = 1/10;
	}//=;blahblahlols or this here if you're a joker
	color = var(color.default);
	size = (33,33);
}
This framework change allows any parameters to be passed from the configuration via a hierarchical structure. It should in the future be possible to override with modifications in sub-regions of the skin, such as the filter having its own knob type/style. Unfortunately I still haven't implemented the skinning, but I have begun to replace the widget code in Xhip with my widget factory from Xhip Effects. I'll likely implement the skinning in the effects first as it's far more simple and I'll later expand it to support the functionality Xhip Synthesizer requires.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

Cool! Thanks again for supporting Linux!! :-)
C/R, dongles & other intrusive copy protection equals less-control & more-hassle for consumers. Company gone-can’t authorize. Limit to # of auths. Instability-ie PACE. Forced internet auths. THE HONEST ARE HASSLED, NOT THE PIRATES.

Post

As always: Thank you very much. :)
[====[\\\\\\\\]>------,

Ay caramba !

Post

I haven't uploaded a new alpha yet, the previous one was 1235 but I probably should update the one on the site. I still want to add a "clear bitmap cache" function to delete the old cache so you don't need to do it manually. The new system is also very prototype; I decided on using a crc32 of the configuration database so you get a filename like:
C:\ProgramData\xhip\synth\8\bitmap cache\knob_strip\gen\5spline_85c24400,191919,16,5,x33,m16,o26.tga

I've been working on trying to complete the compressor sidechain mix functionality. Currently I compute the gain reduction coefficients for the compressor feedback so that given 0 dB input, the output should equal the threshold with min attack and max release.

I previously worked that function out like so:

Code: Select all

const T target_db = (1.0 - get_parameter(THRESHOLD)) * -48.0;
// subtract 1e-3 to ensure target rounds below
const T target = futil::ndb(target_db - 1e-3);
// infinitesimal delta (prevent divide by zero)
const T d = 1e-20;
const T w = T(1.0) - target;   // 1 - 1 / (1 + 1 / target)
const T x = T(1.0) / (w + d);  // 1 / (1 + 1 / target)
const T y = T(1.0) - x;        // 1 + 1 / target)
const T z = T(-1.0) / (y + d); // 1 / target
The sidechain mix provides a sidechain with a mix between feedback and feedforward from the input. So this is relatively simple grade-school algebra (I hope!) but I'm not exactly a math person so not sure how long it may take. The other prototype function added to the effects was the filter modes for the follower. I need to look over the follower to make sure it's working in a reasonable way. There are plenty of minor tweaks and fixes that need to be made to the effects as well which has been put off way too long. This has been the major holdup in getting a new version out. (It's always something else that needs to be finished first!)

Here's the math I worked out for the spline knobs (right click play video new tab/etc):
https://i.imgur.com/2jMg5bF.mp4

Code: Select all

// o1 = orthographic distance for circles of radius r & sub-radius s
// orthographic where
// r^2 + s^2 == o1^2
//direct solution: sqrt(r^2 + (s*c1)^2) == s
// o1 = r / sqrt(1.0 - c1*c1);
// s = o1 * c1;
const T c0 = std::min((1.0 - conf.gap) / conf.segments, 0.5);
const T c1 = std::sin(c0 * pi);
const T c2 = std::sqrt(1.0 - c1*c1);
T o1 = (r / c2);
T s = (r / c2 * c1);
// distance from origin to intersection of circles
T x = (o1*o1 - s*s + r*r) / (2.0 * o1);
// edge of orthographic sub-circle s = r - e1
T e1 = r - (s + r - o1);
// scale radius blending between cosine and linear according to gap
// (i still have no idea how this works.)
const T cc = cos((1.0 - conf.depth) * pi/2.0);
const T r3 = s / (0.001 + interpolation::lerp(cc, T(conf.depth), c1));
// determine subcircle from edge position
const T o2 = r3 + interpolation::lerp(x, e1, T(conf.depth));
This took me a painful length of time to finish considering how basic it is.
Last edited by aciddose on Fri Dec 03, 2021 4:15 pm, edited 1 time in total.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

audiojunkie wrote: Tue Nov 23, 2021 7:09 pm Cool! Thanks again for supporting Linux!! :-)
i second this

Post

I've made a little more progress with my compressor/dynamics research. I've managed to succeed at defining the coefficients to get the effect I want. The feed-forward performance depends upon the frequency and RMS/peak level of the input signal combined with the attack/release time ratio. I remember doing this same work quite some time ago and giving up. I should have taken more notes last time like those I've now recorded.

A simple solution to the sidechain mix blend was to give up on handling them as one. Although I did succeed at getting as far as a 2nd order error of as little as -2.5 dB which I'm sure could be eliminated entirely. It turns out to be much easier to mix feed-forward and feed-back discretely which gives a perfect result with no complicated compensation math.

Image
(I've also improved the meters and their ranges.)

So since the input is a sine here the RMS is -3.01 dB, peak is 0.0 dB and the gain reduction depends upon the attack/release time ratio. We're observing 3.01 dB with the input frequency (333 Hz) vs. max (1.5 s) release time. At 1 kHz it's 1.8 dB error, 10 kHz 1.0 dB, 23 kHz 1.7 dB. At nyquist the signal approximates a pulse (they're equal for exactly nyquist) and gives exactly 0.0 dB error.

Having a small amount of feed-back sidechain linearizes and makes the result independent of the input gain (that's what feedback is of course) and reduces the error by a lot. At 80 ms release the error is 11.4 dB, with 6% feed-back that's reduced to 2.5 dB.

The primary useful purpose of having a feed-forward mode is like in the LA-2A which feeds a tiny bit of feed-forward with a "limit" switch. That causes the compressor to over-shoot on gain reduction and dramatically "dynamically" reduces attack time without requiring look-ahead. In order for this to work it requires the feed-back and feed-forward paths are scaled together by the same coefficient. That gives the feed-forward gain reduction path infinite gain reduction (scales below zero and it's clipped when going negative.)

So to make the compressor support these functions it sadly requires two additional controls! A "limit" switch would force the feed-forward side-chain to be mixed directly with feed-back to cause it to over-shoot. The side-chain mix parameter in this case is only really useful between around 70% and 100% where it dramatically reduces the output gain with any greater feed-forward signal allowed. A "input RMS" knob would allow the compressor to attempt to compensate the feed-forward coefficient according to peak input RMS level.

Without knowing both the exact input RMS and input frequency content, exact feed-forward gain reduction is impossible in a compressor like this. I hate the idea of adding more controls but to get the sort of performance I'd like they're required. I think that practically speaking I'm forced to add them. I'll experiment more with that and hopefully I can call this finished this time and not waste my time repeating the same work again :)
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

Hey, maybe it's a stupid question but how do I change the GUI size of the synth.
Can't find any way to scale it up. Editing the config.db.txt file also doesn't do anything.

Post

Confirmed. I haven't been able to figure out how to scale it up either. My 4k laptop screen makes the plugin about 1 inch square in size, and I'm not able to use it.
C/R, dongles & other intrusive copy protection equals less-control & more-hassle for consumers. Company gone-can’t authorize. Limit to # of auths. Instability-ie PACE. Forced internet auths. THE HONEST ARE HASSLED, NOT THE PIRATES.

Post

Right click on Xhip logo:
You do not have the required permissions to view the files attached to this post.

Post

Kott wrote: Sat Jan 29, 2022 7:24 am Right click on Xhip logo:
Oooh! I didn’t know about that!! I’ll have to try it out! Thanks!! :)
C/R, dongles & other intrusive copy protection equals less-control & more-hassle for consumers. Company gone-can’t authorize. Limit to # of auths. Instability-ie PACE. Forced internet auths. THE HONEST ARE HASSLED, NOT THE PIRATES.

Post

Thanks as well. A little hint about that in the documentation would be nice ;)
Is there a way to set a scale setting as default setting?

Post

http://xhip.net/synth/
From the Xhip User Manual (pdf) (in downloads section.)
Getting started wrote: Init state
The plug-in now uses an init state which is the same as the data saved in a project that is loaded with
any new instance. This includes the complete state of the plug-in instance; the current bank, MIDI CC
mapping, routing, effects, PCM, background color and GUI scaling; all parameters from the global
section such as polyphony, bender range and glide mode; as well as all the switches such as block DC
and mono retrigger.
Customizing the init state and preset
In order to save the plug-in state you can use the save state option in the menu. To save the init state
however you need to hold shift while clicking the menu which will add several infrequently used
options such as save init preset and save init state. Once you've customized and saved the init state
and init preset you can reload the plug-in in a fresh instance and it will load with your new settings.
All initial configuration will be saved with and over-ridden by any project you load so when you save a
project you don't need to worry about conflicting with those projects if you change your init state
configuration in the future.
Factory preset banks
The plug-in does not currently install with any preset banks or other content. You may want to
download and load the Xhip factory bank and Synth drums 1 and perhaps save one as part of your
customized init state. Due to the fact PCM is saved with a state it means an init bank can include
sample content.
Graphical User Interface wrote: ...
Logo menu
The logo can be left-clicked to access a menu allowing the background color to be changed.
It can also be right-clicked to select a scaling factor to resize the GUI.
Some prototype options are included in a menu activated by middle-clicking which will allow a custom
background or overlay to be loaded or cleared and reset as well as allowing the background color
gradient to be disabled or reset. ...
It may not be in the best format but it is in there! I'll try to re-work the manual to add a "GUI Scaling" section, but I hate redundancy and the manual is excessively wordy.

A good solution in the future may be to try to read in the display size and apply a default without an "init state" based upon the display.

In my opinion the left/middle/right logo thing is horrible and I definitely want to fix it. Unfortunately that's in a list of about 10,000 other things I need to do. More top-of-the-list is "include the manual with the plug-in directly" and "release the next version by doing: 1, 2, 3, 4, 5, ..., 97, 98, 99". My current focus was last "modularize the parameter routing code" and "allow routing to be saved in presets, stacked and overridden."

Image

re: routing in presets;
Getting this to work is like wrestling an angry weasel coated in grease mixed with hotsauce using your bare eyeballs. (painful and sisyphean.)
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

Thanks again for pointing this info out—I completely missed it.

BTW, Xhip is one of my favorite plugins in Linux. I use a Lenovo with a high resolution screen, and I discard any plugins that don’t scale. I’m really pleased! Thank you!
C/R, dongles & other intrusive copy protection equals less-control & more-hassle for consumers. Company gone-can’t authorize. Limit to # of auths. Instability-ie PACE. Forced internet auths. THE HONEST ARE HASSLED, NOT THE PIRATES.

Post

I've uploaded xhip_r1284_windows_64bit.7z to the alpha page. I'll try compile the linux version next.

This is an in-between release which again has some things like bitmaps saved in the cache (or on linux, the cache path itself) that aren't 100% standardized yet. I haven't tested this extensively, but it should work for the most part and I haven't seen any crashes yet while I have been testing.

The biggest new feature is I redesigned the parameter filters such that they have multiple coefficients now. This means the routing can use 1 ms times while the knobs the GUI use 200 ms. I still need to ensure slightly longer times are used for amplitude modulation (1 ms will click a bit if you route Key to Amplitude) but this for the most part solves that annoying issue with the routing feature.

As I mentioned before the GUI is further optimized and knobs and LEDs are now drawn in a threaded process with deferred updates. This means the GUI will at first show plain circles and once the bitmaps are finished drawing they'll be displayed on-screen. This means the time to open the GUI is much faster on the first load and can be improved even more in the future.

Image
Image

https://soundcloud.com/xhip/sakura2

Lots of other stuff in there too I can't be bothered to remember. I think one fix was for redundantly setting the sample rate multiple times on effect plug-ins. The compressor improvements for feed-forward, unique mod rate division per-voice as a voice parameter (so you can set each preset with a specific mod rate divisor in a drums bank or similar.)

I know there are still a few issues like the quantizer effect is broken on init in some cases and such. Work continues ...
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

Oooo this one is also bad in a good way and not very good mediocre in an average way:
https://soundcloud.com/xhip/sakura22
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post Reply

Return to “Instruments”