Programmable VST Instrument,Audio effect,MIDI effect/sequencer,SoundFont import,Pitch shifter,Multi I/O. v1.0.120 beta.

DSP, Plugin and Host development discussion.
Post Reply New Topic
RELATED
PRODUCTS
Crescendo

Post

Bjt2, I want try to emulate WaveScan as this created in U-he Hive2.
Some waveforms control with host automation params.

I read manual, about samples.

Post

bjt2 wrote: Fri May 20, 2022 2:03 pm What if i create a "sample" instruction in which you can manually put the time t and obtain the samples? I can also create a keyword for time elapsed from trigger time so you can morph in a custom way the time variable and apply to the sample function...

For classical wavetable synthesis the time variable can be a sawtooth of intensity equal to the period (1/f) of the wavetable sample and then an LFO or other processing can be used to shift this sawtooth...
Good idea! Like as function Time(), or NextSample() / PrewSample()

Post

Alex_Longard wrote: Fri May 20, 2022 2:43 pm Bjt2, I want try to emulate WaveScan as this created in U-he Hive2.
Some waveforms control with host automation params.

I read manual, about samples.
I am not into wavetable synth... I must study it first...
Alex_Longard wrote: Fri May 20, 2022 2:43 pm Good idea! Like as function Time(), or NextSample() / PrewSample()
TIME will be a keyword, as time elapsed from the trigger, not a function.

For the wavetable i was thinking to a function WAVETABLE(<sample_slot>,<t>) that is like the OSC (so sample slot also automatable) but instead of having the argument linearly growing with the time from trigger, it is a plain automation: you can use TIME, warped and modified as you wish or you can use a periodic function (typically a sawtooth, but can also be distorted if you want warp the original waveform and if it is continuos, the period needs not to be the one of the wavetable) plus a slowly varying offset to perfrom wavetable synthesis.

EDIT: but in principle <t> can be anything, so WAVETABLE will be a lookup table and if you put in a table e.g. a distortion with a custom shape, you can use it to distort an envelope with WAVETABLE (<slot>,ENV(...)) or you can use it as custom distortion or old rig simulation, e.g. you have the response curve of a fancy valvolar amp? You put it in a wave file and use wavetable to distort any signal...

The PREV function is applicable to each variable, so if you write

X=PREV(Y)

...

Y = <something>


each time the variable X has the value Y had at the previous sample, so if <something> is an oscillator...
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

Generally in a wavetable synths you'd typically have an array of single-cycle waveforms, so in a sense a 2D table where time (or rather phase) is on one axis and the waveform index on the other axis. Practically speaking one common approach would have pre-filtered mipmaps (for anti-aliasing) on a third axis (so you'd do tri-linear interpolation or similar), though other anti-aliasing strategies are also possible. If one is trying to do this sort of thing, then it makes sense to support it directly, because trying to build it out of regular sample playback on some scripting language level won't be terribly efficient.

Post

mystran wrote: Fri May 20, 2022 5:05 pm Generally in a wavetable synths you'd typically have an array of single-cycle waveforms, so in a sense a 2D table where time (or rather phase) is on one axis and the waveform index on the other axis. Practically speaking one common approach would have pre-filtered mipmaps (for anti-aliasing) on a third axis (so you'd do tri-linear interpolation or similar), though other anti-aliasing strategies are also possible. If one is trying to do this sort of thing, then it makes sense to support it directly, because trying to build it out of regular sample playback on some scripting language level won't be terribly efficient.
As I said i am not into wavetable synth (and this is the reason i didn't include the functionality in the VST...), but the function i devised will be useful also for other things (LUT etc). I will study the matter and see how it works in details and see if i can implement it.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

Updated ZIP, V6 with TIME and WAVETABLE functions.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

Bjt2, thank you!

Post

Updated zip file at version 7:

Added SAMPLEUI instruction to add up to 32 UI to swap up to 32 samples at run time (and also set the parameters like center note, loop mode, normalization mode, etc.).

To avoid to make the UI clumsy, there is few text, substituted by tooltip. Let me know if it is accessible.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

Updated ZIP file, version 8.
Implemented this:

GRAINSYNTH(<num>,<op1>,<op2>,<op3>)
Grain synthesis of sample <num>, grain size <op1>L/R (samples), crossfade <op2>L/R (samples), grain number <op3>L/R.
At trigger time the grain numbers are sampled and the first grain is played from start, with the crossfade at start and end of the grain.
At the end of the grain, the grain number is resampled and the process begins again.



WAVESCAN(<num>,<op1>,<op2>,<op3>,<op4>)
Wavescan of sample <num>, grain size <op1>L/R (samples), grain number <op2>L/R, frequency <op3>L/R (Hz), dephase <op4>L/R (samples).
At trigger time the grain numbers are sampled and the first grain is played starting from the inidtial dephase.
The grain is sampled at a speed given by the frequency, assuming that a whole grain is one period (and that there zero crossing at start and end).
At the end of the grain, the grain number is resampled and the process begins again.
All the processing is stereo, so the grain phase and the grain numbers can be different.
The dephase is applied continuosly and the grain number is resampled as soon as the combined dephasing and current phase crosses the grain border.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

Bjt2, you are so cool! Perhaps work as the chief programmer in Microsoft? :)
thank you for last version, I will test now!

Post

Alex_Longard wrote: Sat May 21, 2022 11:37 pm Bjt2, you are so cool! Perhaps work as the chief programmer in Microsoft? :)
thank you for last version, I will test now!
I am a computer engineer and I am an Italian researcher in the medical field. My job is to write image processing software (CT, MRI, PET, segmentation, denoising, partial volume correction, coregistration/warping, image acquisition simulation etc…) also with GPU. As you may imagine, image processing and audio processing are very similar.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

Updated ZIP. Version 9.
This version:

- Corrected some typos in the manual.
- Clarified in a few points in the manual that setting a tiny frequency (e.g. 1e-30) in the oscillators and using phase automation can emulate WAVETABLE for synth and other unsupported sample type (looped, separate release). WAVETABLE is still a little bit faster for one shot sampled data.
- Corrected a bug on the SAMPLEUI instruction: the UI didn't get erased when changing the file.
- Corrected an obscure bug in the looped sampled data: wrap around in the negative direction not implemented. If the phase automation was fast and strong enough near the loop start, the sampled data used can be the ones preceding the loop (negative dephasing strong and fast enough). Added a flag for first loop passing and the correct wrap code.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

Updated ZIP. Version 10.
This version:

- Implemented save and restore of last SAMPLEUI user setting. Now if a user modifies some SAMPLEUI and then saves the file on the HOST DAW, when he reloads in the HOST the file, the VST will reload the last saved file settings.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

Just tested the IN keyword with SAVIHOST64: it allows you to set any input device (e.g. the MIC) as the input to the VST.

It works.
The IN variable can be used as sidechain in an instrument or even in an effect. I didn't found a direct way in Ableton to give MIDI data and an audio data to a VST, so i didn't quite tested this feature. But digging into savihost settings i discovered this feature, so i tested it. Users of other DAWs can just write a VST instrument (or effect) with a sidechain input.

I discovered this help page (https://help.ableton.com/hc/en-us/artic ... ty-plug-in) and it seems that can be done also in Ableton (will test later when i return to home) with a more convoluted procedure.
Last edited by bjt2 on Tue May 31, 2022 8:00 pm, edited 1 time in total.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post Reply

Return to “DSP and Plugin Development”