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

DSP, Plugin and Host development discussion.
RELATED
PRODUCTS
Crescendo

Post

SUMMARY:
  • Programming like language.
  • Configurable as VST instrument, Audio effect, MIDI effect or MIDI sequencer.
  • SoundFont 2.04 file import.
  • Multi input and multi output support.
  • Custom temperaments, with also SCALA, KBM and TUN files support.
  • Synth and sampled waveforms, with oversampling option, FM synthesis.
  • Unlimited oscillators, envelope generators, filters etc per layer, with full automation.
  • FFMPEG support with caching.
  • Delays, reverbs, pitch shifter, noise gates, compressors/expanders, comb filters etc.
  • Many functions for custom distortions: if you can put it in formula, then you can implement it!
  • Customizable UI (positions, sizes, fonts, colors), UTF-8 support, DPI aware.
  • See the second post with the highlights for more details.
  • See the PDF manual for even more details (link below).



UPDATED ZIPs, 1.0.124 beta:
MAIN ZIP:
Crescendo.7z
Last manual version:
Crescendo_Manual.7z



REVISION HISTORY:
Current version, 1.0.124 beta:
  • Fixed some debug messages.
  • Added border thickness settings for knobs.
  • Compiled with the last Visual Studio.



Latest enhancements, in case you missed them.
Newest first:


1.0.124 beta:
Fixed some debug messages.
Added border thickness settings for knobs.
Compiled with the last Visual Studio.

1.0.123 beta:
Added oversampling option in QUALITY instruction.

1.0.122 beta:
Bugfixes.
Made envelope statuses double precision to avoid roundoff with high decay or release times.
Performance enhancements: restructured some code.
Performance enhancements to SoundFont generated code. Reimport all files.

1.0.121 beta:
Bugfix PEDAL and SOSTENUTO. Added more debug messages (if DEBUG >= 3).
SoundFont IMPORT: added HOLD and SOSTENUTO knobs to all files, linked with MIDI CC 64 and 66. Reimport all SoundFont files.
Compiled with the last Visual Studio: good performance enhancement.
UI bugfix and performance enhancements.
Added some tooltips.
Use mouse wheel on some text to change DEBUG and HIDEUI on the fly.
Added UIMOD option (1) to enable or disable Themes (visual styles). Default now is theme enabled.
PDF manual tweaks.

1.0.120 beta:
Caching of FFMPEG converted files.
Compiled with the last Visual Studio.

1.0.119 beta:
Cosmetic tweaks to the knobs.

1.0.118 beta:
Modified pitch shifters: now the parameters are in milliseconds, removed power of two limits, varied default parameters (see PDF manual).

1.0.117 beta:
Added one parameter to PSHIFT2.
Tweaked PSHIFT and PSHIFT2.
Tweaked error messages and SAMPLEUI file filter.
Added in the PDF manual the help on the FFMPEG feature.

1.0.116 beta:
Detect if FFMPEG.exe is in some predefined locations and use it to extract audio from files not directly supported.
Bugfix SAMPLEUI: avoid excessive file reloading.

1.0.115 beta:
Bugfixes for WAV and AIFF files.
AIFF-C files support for big endian floating point, PCM uncompressed big and little endian files.
Tweaked PITCH SHIFTER parameters.

1.0.114 beta:
Added PSHIFT2 with configurable parameters.

Modified parameters of the fast PSHIFT function.
Performance enhancement of the pitch shifter.
Bugfixes.
Added drag&drop support for WAV and AIF(F) files on the SAMPLEUIs.
Compiled with the last visual studio version.

1.0.113 beta:
Added real time PITCH SHIFTER instruction.

Remember VST parameter initial position and let it be restored with CTRL or SHIFT click on the knob.
UI: tweak knobs positions.
SAMPLEUI: added file filters, bugfixes.

1.0.112 beta:
UI bugfixes.
Log window scroll when full.
Change spacing and formatting to not cut labels, change default VST VAR number.
Compiled with the last visual studio version.

1.0.111 beta:
Restructured UI code: more performance, less flickering, less bugs.

1.0.110 beta:
UI performance: redraw the full window only every 200ms - 1000ms.
UI hack: changed default initial window size in Settings.ini because of bad hosts that do not implement sizeWindow() (e.g. LMMS 1.2.2).
UI behavior: Browse becomes STOP during loading. Process correctly WM_QUIT message while loading.
Various bugfixes.
Added textual VST parameters.

1.0.109 beta:
UI performance: redraw log window only every 500ms. Great speedup in debug and Soundfont import with big files.
UI Bugfixes.

1.0.108 beta:
On suspend(): stop active notes, reset delays and reverbs, full sequencer reset.
On DAW clock move or DAW stop/play transitions: put active notes in release, full sequencer reset.

1.0.107 beta:
Reset reverbs, delays, sequencer TAPE and cursor on suspend() and DAW stop/play transitions.
Reset sequencer state on NORMAL only on suspend().
Bugfixes.

1.0.106 beta:
Various bugfixes (UI, loading and saving settings in the DAW, other).

1.0.105 beta:
Stop and reset sequencer, tape and cursors on suspend() or DAW stop.
Bugfixes, performance enhancement.
Read IO instruction also at initialization for hosts that don't support ioChanged().

1.0.104 beta:
Various bugfixes (UI, other).

1.0.103 beta:
Bugfixes.
UI bugfixes.
Added BAR option for DELAYs.
Added and modified some test files.
Sequencer: TAPE load and SAVE also across sessions. See the PDF manual for details.
Compiled with the last Visual Studio version.

1.0.102 beta:
Added HIDEUI option 9.
Added another optional parameter to DEBUG.
Various tweaks and bugfixes to the UI and debug messages.
Sequencer: bugfix and modify to merged notes algorithm.

1.0.101 beta:
Various bugfixes (UI, other).

1.0.100 beta:
Added QUANTIZE, QUANTIZE2 and SAT2 instructions.
Corrected SAT instruction behaviour.
Various tweaks and bugfixes.
Introduced HIDEUI option 8 to have only the polyphony.

1.0.99 beta:
Dynamic allocations of samples and layers: less memory on small files and almost unlimited samples and layers.
Code reordering to increase loading file performance.
Bugfix on OSCG with envelope.

1.0.98 beta:
Various bugfixes (UI, other).

1.0.97 beta:
Allow in other places INTERFACE, SETFONT, HIDEUI, POLY, SILTH and UIMOD instructions.
FEND prefix to queue some instructions at end of file to override the file settings.

Previous versions:
More robust NaNs avoiding/recovering.
Recompiled with static linking of the runtime: slightly faster and no more need of the VC++ redist.
Added other functions.
More bugfixes and performance enhancements.
Updated the PDF manual.
Crescendo.7z
You do not have the required permissions to view the files attached to this post.
Last edited by bjt2 on Thu May 16, 2024 4:39 am, edited 415 times in total.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

HIGHLIGHTS:
(For more details, please read the PDF manual, linked in the first post)

Crescendo is a programmable VST plugin that allows the user to write custom VST instruments, Audio effects, MIDI effects or MIDI sequencers, with a complete programming language, supporting almost unlimited oscillators, LFO, envelopes, distortions and effects per layer.

It includes:
  • Sampled waveforms, WITH OVERSAMPLING OPTION, synth waveforms and FM synthesis.
  • Direct support of uncompressed PCM WAV, AIFF and AIFF-C files (integer and float).
  • FFMPEG support with caching to extract and import audio data from most media files.
  • SOUNDFONT 2.04 BULK file import.
  • Support for HOST detuning and custom temperaments, selection with GUI, MIDI cc, VST parameter or keyswitch.
  • Support for SCALA and KBM files and for TUN files, version 0 and 1.
  • Multi instrument support: program and bank number used to select current instrument.
  • Multi input and multi output support.
  • Almost unlimited oscillators, filters and envelopes per layer.
  1. Fast functions for oscillators and filter with the default parameters.
  2. Functions for oscillators, envelopes and filters with full automation for behaviors not covered by the fast functions.
  3. The oscillators and effects composition is performed with a programming like language to compose in any fashion a chain of oscillators and other elements; automation of most parameters of the full oscillators, envelopes, filters, delays: each automation can be in turn a complex expression involving oscillators, filters, distortion, envelopes, mathematical functions and operators. This can be done in unlimited deepness, so for instance an operator synthesizer style chain can be constructed, but even with sampled data and not only synth waveforms and with distortions and/or filters along the way.
  4. Unison support for synthetized data, also detuned: up to 32 harmonics, also with different waveforms each, with custom phase, amplitude and frequency. Sinusoidal, square (with various smoothness), saw (with various smoothness), triangular and noise waveforms.
  5. Oscillator data organized in sample slots (even the synthetized one) and the slot number is automatable at trigger time.
  6. Sample automation can be configured in such a way to write once the expression producing the sound and then changing for each layer just the sample number: SAMPLEOFF function for reducing layer count on multibank instruments.
  7. Samples can be looped, backward or forward or with alternate play directions, with crossfade support.
  8. Separate release support to halve the number of layers needed if a separate release is wanted.
  9. ​​​​​​​Envelope generators with programmable shape.
  10. One shot samples can be constructed resampling and mixing multiple samples (SAMPLES instruction).
  11. One shot samples can be constructed resampling and mixing multiple slots (RENDER instruction).
  12. Optional pre-filtering of the samples slot (even the SAMPLES and RENDER ones).
  13. Full oscillators have fully automatable loop points, loop count, amplitude, frequency and phase.
  14. The phase automation can be used for a true frequency modulation, without approximation by frequency automation.
  15. Phase for sampled data can be used for delay or skipping data (e.g. reusing a full sample for a legato layer, skipping the first part).
  16. Other waveforms available, without the sample slot mechanism, but with a plain function: square wave with variable pulse width, saw tooth with asymmetric slope, and SINC.
  17. LFOs can be created with all the mechanisms depicted above, including sampled waveform, and be processed in any way (distortion, filtering, delays etc...) before using it.
  18. WAVETABLE function to use a waveform (no synth data) as a LUT to perform wavetable synthesis, custom distortion, etc...
  19. WAVESCAN and GRAINSYNTH to perform granular synthesis.
  • Functions and mathematical operators to combine oscillators and envelopes or to calculate custom distortions.
  • Channels and stereo image manipulation functions.
  • Filters, 1 band equalizers and 3 band equalizers of 6, 12, 24, 36 and 48 dB/octave with stereo automation.
  • Delays with or without feedback (filtered or unfiltered), feedforward, comb filters, ping pong delay, for implementing chorus, flanger, phaser and custom reverb.
  • Real time pitch shifter.
  • Fast reverb functions with automatable parameters.
  • Compression/expansion and noise gate functions.
  • Wide collection of functions, like trigonometric, power and the CURVE function, for custom distortions and LUTs.
  • PREV function, designed to recover the value of a variable at the preceding sample: allows to simulate any closed loop system, linear or not, with one or more state variable (E.g. the EKS algorithm) or to construct custom FIR or IIR filters.
  • Basic LABEL and IF ... GOTO/EXIT statements for implementing loops or conditional execution, on sample basis.
  • EXECIF construct for trigger time conditional execution.
  • MIDI CC and VST parameters (called VST VARs or variables) can be used for automation.
  • MIDI CC and VST parameters linking for great flexibility and DAW independence. MIDI CC linking keeps the scale of the VST VAR so to e.g. transform a linear MIDI CC into a logarithmical VST VAR.
  • Targeted for the POST processing step, there is a collection of DELAYs, REVERBs, FEEDBACK and FEEDFORWARD COMB filters, compressors/expanders and noise gates. But all functions can be used in principle in the POST step, even oscillators.
  • Four SENDS channels. Extended MCCs to accumulate and access them.
  • Sidechaining support, through the INxx keywords, which brings the input signal into the processing pipeline, allowing using it for modulation, etc...
  • Sampled data resampling quality settings, including changing the windowing function and the number of SINC lobes, changing the quality, speed or ringing artifacts.
  • MIDI preprocessing step for sequencer, arpeggio, chords, key mapping, randomization, quantization and velocity processing.
  • Polyphony limitation, legato, retrig, portamento (even polyphonic) and gliding support.
  • Four hold/sostenuto pedals.
  • Note ON triggers by key, velocity, MIDI CC, VST VAR, with round robin, first/legato and MIDI channel: MIDI channel triggers to split different keyboards/controller to different VST instances in possibly different tracks or in different layers.
  • Crossfades, groups and OFF triggers by MIDI CC, VST VAR and group value with optional forced release for shutting down rapidly a layer.
  • Multiple options for the envelopes, with multiple hold times, linear or exponential or custom envelopes, with retrig at decay end, beat, or in sync.
  • Up to eight keyswitches support. Three type of keyswitches, with one (up), two (up/down) or multiple keys (direct selection by key).
  • Periodic or trigger time sample and hold (SHOLD).
  • Fast, trigger-time only HOLD keyword, to calculate an expression only at trigger time, for speed reasons or for special effects.
  • Basic UI personalization: moving and resizing the knobs, drop boxes and accompanying texts, color settings.
  • SAMPLEUI: instruction to put up to 32 UI to let the final user of the instrument file to swap the samples of up to 32 sample slots and set also the other parameters.
Last edited by bjt2 on Sun May 12, 2024 10:44 pm, edited 37 times in total.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

This seems really interesting and would be great to use for prototyping, but I'm really hesitant about investing time and energy into coding-oriented platforms that I don't have access to the source code for and can't continue to update if the author(s) decide to abandon them later, especially in the context of independently-developed tools like this. I just don't want the effort I put into development eventually becoming obsolete with no path forward, which is why I don't generally use tools like this - most of them aren't even source-available, much less open-source.

I may have missed it when scanning the manual, but is there a way to allow a user to manually choose a sample to load?

I also would really like to be able to have more control over the UI. Even for prototyping, I'd like to at least be able to get the layout that I want to use down.

Also, testing it in Reaper, none of the actual buttons load properly until they're hovered over. I can see the "Temperament" drop-down menu immediately, but "Resize," "Reload," and "Browse" are all blank boxes until I hover over them.

Post

ahribellah wrote: Wed May 18, 2022 12:32 pm This seems really interesting and would be great to use for prototyping, but I'm really hesitant about investing time and energy into coding-oriented platforms that I don't have access to the source code for and can't continue to update if the author(s) decide to abandon them later, especially in the context of independently-developed tools like this. I just don't want the effort I put into development eventually becoming obsolete with no path forward, which is why I don't generally use tools like this - most of them aren't even source-available, much less open-source.

I may have missed it when scanning the manual, but is there a way to allow a user to manually choose a sample to load?

I also would really like to be able to have more control over the UI. Even for prototyping, I'd like to at least be able to get the layout that I want to use down.

Also, testing it in Reaper, none of the actual buttons load properly until they're hovered over. I can see the "Temperament" drop-down menu immediately, but "Resize," "Reload," and "Browse" are all blank boxes until I hover over them.
Regarding the sample, yes, you can load any sample you want, with looping, crossfades, backward and forward, normalizing etc. It is stated clearly in the manual. You can also set the resampling quality (sinc lobes number and windowing function). You can even use sampled data for LFO, FM modulation, automation and everything you want. I even setup a mechanism to avoid the LAYER explosion: say you are constructing a banked instrument, e.g. a violin with pizzicato, legato, staccato, tremolo etc. There is a mechanism to write the layer formula once and change only the sample number, grouping all the legato, staccato etc in just one layer. There is the explanation in the manual.

Regarding expansion... The language is turing complete. For instance the reverb is missing, but in the manual there are the few instructions to construct it (and the Reverb.txt file is a modification of that code snippet). The language has already all the constructs to make any processing pipeline. If you have ever seen tools like Simulink in Matlab, you can construct any system, linear or not, looped or not with the constructs.

I have even constructed some simulated instrument with the feedback delays as seen in some online book* (and in the manual I even mention the EKS algorithm that is used for instrument simulation). The plugin can already do all that can be done in commercial DAWs like Ableton and even more (I modeled the PORTAMENTO as Ableton Live does it)... If you dig into the manual deeper, there is a section with the diagram of a generic closed loop system and the code needed to simulate it. Since there is not limit on formula complexity, you can really already simulate ANY system.

* i am new and don't know if i can post the link, but it is the course on the Stanford university for audio processing: i used that book for canvas to the features that i must include.

I concede that the interface is spartan and some instruction to construct the interface are welcome. But i was concentrated on the sound.

Regarding the problem in Reaper. I tested the VST on Ableton, LMMS and savihost64 on windows 10. Maybe in older windows there is some problem? But since the interface should be reworked and the problem seems to be only minor (the buttons work right?), I will leave it for now.


I made the VST for fun because I love programming and I didn't post it until i deemed it complete. I don't know if i will release the code someday, but I think that, save for the GUI, it is complete. Even if i die today, i think that the plugin will be useful...


EDIT: i have modified some properties on the buttons and recompiled the DLL on the hope that that resolves the issue with Reaper (please reload the zip in the top post). Moreover I have included more text files with my experiments that use samples so you can see the syntax. Obviously they don't fully work because i didn't include the samples but you can have an idea on how it works. Test2.txt contains tests of the instrument simulation (a virtual string) as seen in the online book and Test.txt is a file I used to test most of the features: pedals, chords, arpeggios, portamento/glide, crossfades... there are many commented lines and you can experiment activating them...
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

bjt2 wrote: Wed May 18, 2022 10:14 pm Regarding the sample, yes, you can load any sample you want, with looping, crossfades, backward and forward, normalizing etc. It is stated clearly in the manual.
Oh, no, I know that you can load any sample you want in code. I saw that in the examples. I was asking if there was any way for the user, who you've shared the script with, not the person who created the instrument/effect, to load samples using the UI.
bjt2 wrote: Wed May 18, 2022 10:14 pm I have even constructed some simulated instrument with the feedback delays as seen in some online book* (and in the manual I even mention the EKS algorithm that is used for instrument simulation). The plugin can already do all that can be done in commercial DAWs like Ableton and even more (I modeled the PORTAMENTO as Ableton Live does it)... If you dig into the manual deeper, there is a section with the diagram of a generic closed loop system and the code needed to simulate it. Since there is not limit on formula complexity, you can really already simulate ANY system.
See, this is the alternative to pure data that I've wanted for a while now; the only thing missing is a standalone version. I vastly prefer text over visual systems. I'm just more comfortable making instruments and effects for an open-source system.
bjt2 wrote: Wed May 18, 2022 10:14 pm I concede that the interface is spartan and some instruction to construct the interface are welcome. But i was concentrated on the sound.
There are lots of options. It really depends on the developer.

But what I was asking for was a way to use Crescendo's language to design the UI, similar to Reaper's JSFX plugins.
bjt2 wrote: Wed May 18, 2022 10:14 pmRegarding the problem in Reaper. I tested the VST on Ableton, LMMS and savihost64 on windows 10. Maybe in older windows there is some problem?
I am using Windows 10 21H2.
bjt2 wrote: Wed May 18, 2022 10:14 pmI made the VST for fun because I love programming and I didn't post it until i deemed it complete. I don't know if i will release the code someday, but I think that, save for the GUI, it is complete. Even if i die today, i think that the plugin will be useful...
I'm not doubting its usefulness. But, considering you can create complex instruments and effects with it, it would help to be able to create a decent UI with it, as well.
bjt2 wrote: Wed May 18, 2022 10:14 pm EDIT: i have modified some properties on the buttons and recompiled the DLL on the hope that that resolves the issue with Reaper (please reload the zip in the top post).
That has not fixed it. This plugin actually does not seem to like the way Reaper does things at all.

So here's the initial view:

reaper_wgIPjJNfTf.png

Here's what happens when I load a file (this happens every time I load a file):

reaper_U93TuqP3hq.png

If I resize the window after loading a file, it looks fine again, as you can see in the following image:

reaper_e3IQI5gaux.png
You do not have the required permissions to view the files attached to this post.

Post

ahribellah wrote: Wed May 18, 2022 11:17 pm Oh, no, I know that you can load any sample you want in code. I saw that in the examples. I was asking if there was any way for the user, who you've shared the script with, not the person who created the instrument/effect, to load samples using the UI.
The sample number is automatable: you can setup a keyswitch with N alternatives, let the user choose with the GUI or with some keys or you can set up a slider with N alternatives. But if your idea is a browse button to load a custom file, no. I can add this feature (the whole point of posting here the VST is to add features), but you can only load full one shot samples, or i must add also features to let choose looping, start and end samples, etc. With the features already present you can set up N full samples (with looping and start and end samples already set-up) and let the user choose among those N alternatives with a keyswitch or a slider (or a MIDI CC for what is worth, but it's more complicated to test).

EDIT3: i am thinking on interface personalization. Once this is setup, i will also add a "SAMPLEUI", to be associated with a sample slot to let the change at run time by the user of the sample file and parameters. It's a very good idea. Obviously the last file and settings set by the user must be saved in the parent DAW file like the slider and combobox positions...
ahribellah wrote: Wed May 18, 2022 11:17 pmSee, this is the alternative to pure data that I've wanted for a while now; the only thing missing is a standalone version. I vastly prefer text over visual systems. I'm just more comfortable making instruments and effects for an open-source system.
I have made a VST plugin to not have the burden to code the GUI, the audio driver interface, the MIDI interface etc, but I see your point: if i open-source it, you can use my reverse polish notation parses, my audio engine etc in other open source projects. I am considering to open source the code, but i must confess that it is a mess and poor commented...
ahribellah wrote: Wed May 18, 2022 11:17 pmThere are lots of options. It really depends on the developer.

But what I was asking for was a way to use Crescendo's language to design the UI, similar to Reaper's JSFX plugins.
The code I made is a mess but easily expandable. I am here to gather ideas and yours was even considered by me some time ago, but i gave priority on the audio engine. While reading your post I even imagined how to do it, the variables needed etc... It's not complicated and I think I will work on It...
ahribellah wrote: Wed May 18, 2022 11:17 pmI am using Windows 10 21H2.
I'm not doubting its usefulness. But, considering you can create complex instruments and effects with it, it would help to be able to create a decent UI with it, as well.

That has not fixed it. This plugin actually does not seem to like the way Reaper does things at all.

So here's the initial view:


reaper_wgIPjJNfTf.png


Here's what happens when I load a file (this happens every time I load a file):


reaper_U93TuqP3hq.png


If I resize the window after loading a file, it looks fine again, as you can see in the following image:


reaper_e3IQI5gaux.png
I got the problem: Reaper superimposes its non trasparent textboxes on the GUI. The Bell.txt in small font isn't mine. So the [...] etc. To have an idea on what is the native interface, use savihost, LMMS or Ableton. The Bell.txt and the ? are the string obtained when the host calls GetProgramName(), so Reaper superimposes the program name in the high zone of the GUI...
In any case all these problems will be resolved if i allow to move (and modify) programmatically the GUI elements.
I think that this is imperative now to render this plugin more usable...

In any case I appreciate your critics and I hope you find the time to read all the manual and discover the other features of the plugin.

EDIT: i have got the problem with Reaper.
EDIT2: Version 3 should fix the problem: on browse/reload i was moving the parent window and was setting pos to 0,0. Now i read old pos and resize only the parent window without moving it. It should fix the problem.
Last edited by bjt2 on Thu May 19, 2022 3:27 am, 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

Version 3 should fix the problem: on browse/reload i was moving the parent window and was setting pos to 0,0. Now i read old pos and resize only the parent window without moving it. It should fix the problem.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

bjt2 wrote: Thu May 19, 2022 12:05 am EDIT3: i am thinking on interface personalization. Once this is setup, i will also add a "SAMPLEUI", to be associated with a sample slot to let the change at run time by the user of the sample file and parameters. It's a very good idea. Obviously the last file and settings set by the user must be saved in the parent DAW file like the slider and combobox positions...
Sounds good. I'm just thinking of designing simple samplers to test algorithms and whatnot. A user could load any sample they wanted and run it through the effects chain.
bjt2 wrote: Thu May 19, 2022 12:05 am I have made a VST plugin to not have the burden to code the GUI, the audio driver interface, the MIDI interface etc, but I see your point: if i open-source it, you can use my reverse polish notation parses, my audio engine etc in other open source projects.
But also, if open-source, the community could implement additional formats: VST3, LV2, etc. This would allow it to work in additional settings. It would also allow users to design a way to compile their scripts into the plugin to distribute to users for easier testing.
bjt2 wrote: Thu May 19, 2022 12:05 ambut i must confess that it is a mess and poor commented...
This is something that the open-source community could help with. :)
bjt2 wrote: Thu May 19, 2022 12:05 am EDIT2: Version 3 should fix the problem: on browse/reload i was moving the parent window and was setting pos to 0,0. Now i read old pos and resize only the parent window without moving it. It should fix the problem.
This "fixed" it in the sense that it no longer overtakes Reaper's UI. However, there is a new issue.

This is what happens when loading a script now:

reaper_RSdVrQrjWU.png

I've also just discovered that this also happens when I press the Resize button, the difference being that the Resize button will just continue to push it further into the bottom right corner the more times that it's hit.
You do not have the required permissions to view the files attached to this post.

Post

ahribellah wrote: Thu May 19, 2022 7:49 am
bjt2 wrote: Thu May 19, 2022 12:05 am EDIT3: i am thinking on interface personalization. Once this is setup, i will also add a "SAMPLEUI", to be associated with a sample slot to let the change at run time by the user of the sample file and parameters. It's a very good idea. Obviously the last file and settings set by the user must be saved in the parent DAW file like the slider and combobox positions...
Sounds good. I'm just thinking of designing simple samplers to test algorithms and whatnot. A user could load any sample they wanted and run it through the effects chain.
bjt2 wrote: Thu May 19, 2022 12:05 am I have made a VST plugin to not have the burden to code the GUI, the audio driver interface, the MIDI interface etc, but I see your point: if i open-source it, you can use my reverse polish notation parses, my audio engine etc in other open source projects.
But also, if open-source, the community could implement additional formats: VST3, LV2, etc. This would allow it to work in additional settings. It would also allow users to design a way to compile their scripts into the plugin to distribute to users for easier testing.
bjt2 wrote: Thu May 19, 2022 12:05 ambut i must confess that it is a mess and poor commented...
This is something that the open-source community could help with. :)
bjt2 wrote: Thu May 19, 2022 12:05 am EDIT2: Version 3 should fix the problem: on browse/reload i was moving the parent window and was setting pos to 0,0. Now i read old pos and resize only the parent window without moving it. It should fix the problem.
This "fixed" it in the sense that it no longer overtakes Reaper's UI. However, there is a new issue.

This is what happens when loading a script now:


reaper_RSdVrQrjWU.png


I've also just discovered that this also happens when I press the Resize button, the difference being that the Resize button will just continue to push it further into the bottom right corner the more times that it's hit.
The code that i think is problematic was also on the resize button. This was a code i introduced recently to resolve a minor issue with SAVIHOST64 when the window is not fixed. Since it not mattered to Ableton I left it. I got it: never mess with the outer window! Now i commented the code and added a call to the procedure called when you resize manually the window, since you said that resizing the window adjusted the interface. Tested in savihost and ableton (i don't have lmms installed anymore) and did not make a mess. Hope this works for you.

Anyway i am starting to implement the interface personalization. I think i will introduce just one instruction with variable parameters. For now it will allow only position and size to be modified. In the future maybe i will add constructs for colors, background colors or image, style (e.g. round or linear slider) and maybe other. The instruction will have a code number to select the object to be modified and in future i will add also codes for the background, to change background color and image and other objects...
Obviously i will add another instruction for the samples, but this will take a bit I think (because i have to modify also the code for saving and retrieving the chunks), so i leave it for last...

EDIT version 4 is with the corrections but without the interface personalization-
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

bjt2 wrote: Thu May 19, 2022 10:01 am EDIT version 4 is with the corrections but without the interface personalization-
This fixed the issues with changes to the window in Reaper.

I'll keep an eye on this going forward, but will probably hold off on attempting to build anything with it for the aforementioned reasons.

Post

ahribellah wrote: Thu May 19, 2022 10:14 am
bjt2 wrote: Thu May 19, 2022 10:01 am EDIT version 4 is with the corrections but without the interface personalization-
This fixed the issues with changes to the window in Reaper.

I'll keep an eye on this going forward, but will probably hold off on attempting to build anything with it for the aforementioned reasons.
Ok, no problem. I will keep an eye on the suggestions and opinions on this thread and keep improving it and maybe a day i decide to open source all, but for now i'll just share the dll, the manuals and examples.

Anyway thank you for the suggestions and the opinions.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

Interesting idea! I will test it.
I make synth, which use BASIC-like language for control.
Only I programming on pure C, and rewrite some VST classes for VST.

Post

Alex_Longard wrote: Thu May 19, 2022 10:39 am Interesting idea! I will test it.
I make synth, which use BASIC-like language for control.
Only I programming on pure C, and rewrite some VST classes for VST.
You will like the language. You can easily write code for operator style synth, but with also sampled data and the possibility to process the signal (e.g. filtering, distorting) before inputting in the next stage...

The plugin is obviously not limited to this, but it is a starting point...
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Post

БТ2, thank you!
Sorry, I am blind, and not use plug's GUI, it's possible to load script if it name write in settings file?

Post

Alex_Longard wrote: Thu May 19, 2022 11:07 am БТ2, thank you!
Sorry, I am blind, and not use plug's GUI, it's possible to load script if it name write in settings file?
I am sorry, no.
But i have put the microsoft suggested properties (including tab property) on the buttons, so maybe your software could be able to read the button texts. The button to load the file is called "Browse". Try to repeaedly push the tab button with the window on focus.

EDIT: I think that the include command should work in settings.ini
Last edited by bjt2 on Thu May 19, 2022 11:45 am, edited 1 time in total.
My youtube channel: https://www.youtube.com/channel/UCRwIM2 ... D9DlgfjzLQ
Thread on my programmable VST: viewtopic.php?t=581986

Return to “DSP and Plugin Development”