…it’s not a good idea to propose (like the real hardware does) up to 32 user waveforms…
![]()
Really, who need 32 user waveforms?
Of course I’m nearly sure they’re no event handler when saving as preset, like onPresetSave().
…it’s not a good idea to propose (like the real hardware does) up to 32 user waveforms…
![]()
Really, who need 32 user waveforms?
Of course I’m nearly sure they’re no event handler when saving as preset, like onPresetSave().
No, preset saving uses the same path as patch saving. But nothing prevents you from writing your own, which augments dataToJson() with some additional fields.
About the user waveforms: maybe it makes more sense to store them as plugin settings instead of per module instance. So 32 user waveforms, which are shared.
Yep I’ve considered this possibility, as shared instead per plugin instance !
EDIT: cancelled! unfortunately I can’t consider “32 shared” waveforms, because on using shared patch(es) or by using another patch(es), they’re possible conflicts between different waveforms but on the same “slot” (in this scenario, previous waveform(s) is/are lost and replaced by the new ones).
By this way, I’ve kept the Save waveforms with “Preset” toggle in context menu. Also, I’ve added a large red LED at the bottom of module, will fast blink (8 times per second!) to warn the user in case he’d like to create a preset, if at least 4 user waveforms are already loaded AND if the option is unchecked from the context menu.
The large LED:
4 user waveforms (or less) are always serialized in json (Preset warning LED stays unlit).
Perhaps I’ll must consider a loseless compression format, like FLAC, in order to be serialized with less data volume in json file…
Hello,
Definitely bad news, the user waveforms will not be embedded in json by using “Save waveforms with presets”, as suggested by Ben (stoermelder - thanks anyway to him), it’s not reliable! Sometimes (it’s random) from dataFromJson() method, some waveform(s) are missing! Definitively I hate json!!!
By this way, VCV presets can’t embed waveforms (as long as a patch storage isn’t implemented in VCV Rack’s API for presets who are using important amount of datas, or a way to differentiate a regular patch file/autosave vs. a preset file).
Saving only 4 user waveforms (as uncompressed PCM) reaches the 100 kilobytes limit for json serialization, as indicated in VCV Rack manual.
I was go back, I’ve removed the large LED concept (at the bottom of module) as I described in previous post. The idea was good (IMHO), but not viable.
User waveform files are handled by onSave() / onAdd() methods only.
Too bad!
Hello!
Today they’re good news (to change from the bad ones, recently
):
Program is like a synthesizer preset.
Each oscillator (A, B, C, D) can be modulated by FM input (TZFM or PM), or by any LFO (1 or 2).
This is the final version of VX expander, now it can output both LFO 1 and LFO 2 “curves” (always into -5V/+5V voltage range).
Following example, OSC A is modulated by LFO 1:
…but can be modulated by LFO 2, or by FM input jack (TZFM or PM, depending the FM setting from 3rd page of PROGRAM), or… not modulated.
.
By default, each oscillator’s MOD. SOURCE is set to NONE (not modulated).
Few development today, but the Vektor User’s Manual is under construction: ![]()
https://github.com/DomiKamu/OhmerPrems/blob/v2/docs/modules/Vektor/Manual.md
Unlike FranKe, I’d like to provide a full (completed) user’s manual for the module release (planned for plugin v2.6.13, but no given delay at the moment, both are “in construction”, then beta-test…).
The final joystick… exactly like WAVESTATION VST plugin by Korg
A simple sphere.
The “3D sphere” effect is entirely coded in C++ (no external SVG), using a circle as “base”, then four ellipses above to “simulate” the light ray coming from top of the module (like connectors and buttons). Not ugly (I hope?), not perfect, too… must be enhanced, of course!
ADDED (one day later), perhaps a bit better… (I like it!)
A very short Vektor demo (using 4 polyphonic voices)… 15 seconds. ![]()
Unfortunately I can’t record audio by ASIO (I’m using OBS Studio software), so I had a important latency! Sorry.
MIX ENVelope wasn’t developed when I’ve recording this intro of V.H. “Jump”.
Hello,
Some news about development in progress of the Vektor module.
Now the mix envelope is operational, but as next milestone (started tomorrow) is to implement envelope looping feature (optional feature), like “basic” mix envelope, loop feature is also customizable per program.
Some modifications was made on the lower part of module’s GUI (below A/B/C/D/MIX context buttons):
I’ve started to update all images & GIF animations for Vektor User’s Manual.
Hello!
The mix envelope (incl. all mix envelope loop modes) are fully operational.
However, another GUI modifications:
The small space below the joystick will be used for a bi-coloured orange/red “LED” (as warning when orange, or as error when red, while a relevant message is displayed for seconds).
PROG. input voltage rule:
Like all lights (LED) of the Vektor module, the PROG. input jack and its LED is checked/updated every 4096 DSP frames (every 0.08s @ 48kHz sample rate).
Next milestone are custom programs, including “save as”, “open” (either via right click context menu, or by dropping .vktProg file over the OLED display).
When done and all successfully beta tested on all platforms, the Vektor module + its VX right-side expander comes to OhmerPrems plugin version 2.6.13 stable!
Hello,
Next milestones to complete the Vektor module:
As reminder, Vektor and its VX expander will be free for everyone (license V2 keyfile is not required for these modules).
Hello,
This is the second expander module (also 3HP), left-side, named VK (see below, first image).
At the moment, the oscillators “sync” aren’t handled (aka “SYNC OFF”).
Hard sync or soft sync may be handled internally - via setting(s) in 4th page of any oscillator context, like this:
First setting (along L3 left-side button) for SYNC can be: OFF, HARD, or SOFT.
Second setting (along L4 button) - only if SYNC isn’t OFF - can be:
Of course, the VK expander - when linked to Vektor module (placed alonsgide it, left-side without space) AND one input is connected - either HARD or SOFT - will temporary disable the internal mechanism explained just above (until disconnected or unlinked expander).
This new VK expander is useless in the major situations (I guess). However, it can be used in case you’d like to “force” a hard/soft sync by external module (depending the used jack), by an incoming +1V or more voltage (recommended: +10V), whatever the position of all phases (like VCV’s WT VCO module does, in fact).
This expander was initially named VI, but really I hate this name, so I’ve renamed it to VK, instead!
About development in progress, today (Tuesday the 14th afternoon):
PROGRAMs and MIX ENVelopes can be saved to external files (then loaded, later). Like user waveform (.wav file), program (.vktProgram) file, and mixing envelope (.vktMixEnv) file, depending the module’s context - can be dragged then dropped anywhere on the Vektor module, to be imported/loaded!
The User’s Manual is near finished. Only unfinished topic is OSC SYNC settings (last topic). Then possible corrections later, as required (English faults, missings, typos, and so on).
File operations (and the modules themselves) must be validated on Linux and MacOS X (Intel, ARM) platforms, during beta test phase (my platform is Windows 10, my brother is using Windows 11 laptop).
Next milestone is “osc sync” C++ implementation.
I’m looking for serious/reliable persons who are using MacOS X (Intel & ARM, if possible) and/or Linux to participate to beta-test phase of this module (beta is planned for first week of August). OhmerPrems licenses as gift, of course! Thanks in advance.
Hello,
Today July 15th morning,
Finally after many tests, I revert back, I cancel the hard sync / soft sync feature I’ve explained in the previous post.
Why?
These features are very cute for basic & traditional waveform-based oscillators (like oscillators on Moog synthesizer series, and similar, in particular triangle-based waveforms), but unfortunately these techniques are not accurate for complex/custom waveforms. It works, of course, but the obtained results are simply disastrous!
Also, by checking some VST3i plugins, like Arturia Prophet VS, Korg Workstation, and Korg wavestate native (also the Victor Eurorack hardware module, manufactured by Behringer), they’re nothing about “hard sync” / “soft sync” (including “internally” vs the four embedded oscillators).
By this way, I prefer to focus mine efforts to other aspects of the Vektor module.
Thank you in advance for your understanding, and apologizes! ![]()
Just a thought- Have you considered using an internal phasor representation for syncing purposes, then it would make syncing much more predictable. The sync then doesn’t relate to the fairly arbitrary zero-crossings of a complex waveform, and tracks the fundamental.
BTW, I really do enjoy reading your progress on these things and learn a lot from it.
Hello - yep of course I’ve tried a discrete phase, for syncing, but for same weird results. It’s okay when I’m using simple/basic waveforms, but horrible (either hard and soft) when I’m using complex waveforms.
I’ve noticed exactly the same fact vs. VCV WT VCO, by using a complex wavetable! Worst results are by using FM-based waveforms (such bells).
Surely the reason why digital machines (such Prophet VS, Wave PPG, Emulator II or CMI Fairlight) doesn’t use osc syncing techniques ! Also, my Korg wavestate MkII synthesizer doesn’t have syncing option, anywhere, nothing in the menus, but this new synth in the studio is mainly designed for performance (instead of sound design).
Thank you for your interest in following the progress of the development. Really appreciated, and additional source of motivation! ![]()
Hello,
Today July 16th (Thur.), afternoon…
Another decision: I’ve removed (without any regret), the VEL. input jack.
By the way, PROG. input jack is moved left (to the place of the ‘defunct’ VEL.).
(Final Vektor layout):
Now left-side (inputs) and right-side (outputs) are… symmetrical!
The main reason to remove VEL. input: in general, velocity may affect VCA (99% of time), so the velocity (from source module) can be handled by any other third-party module IMHO, to control a VCA or VCF.
By this way, I consider VELocity input as not-essential for this quad-VCO module.
Another advantage: polyphonic C++ code is a bit streamlined.
Hello,
OhmerPrems plugin is now available as pre-release v2.6.13 BETA, from GitHub repository, for testing purposes (until published as stable release):
https://github.com/DomiKamu/OhmerPrems/releases/tag/v2.6.13
This pre-release mainly introduces Vektor, 16HP polyphonic digital quad VCO module, using Vector Synthesis (inspired by the SCI Prophet VS synthesizer & Behringer Victor Eurorack module, but with notable differences/enhancements).
The Vektor module comes with a companion, a 3HP “right-side” expander (named VX) who bring 7 extra outputs (organized into 3 sections, “blue lines” as “section separators”, for better read):
User’s Manual (near finished): https://github.com/DomiKamu/OhmerPrems/blob/v2/docs/modules/Vektor/Manual.md
Vektor and VX modules are free for everyone (without any limitation/restriction, no license keyfile required). ![]()
Enjoy!