My last coding experience was from a few decades ago. Lately, I’ve been hacking away at a few modules and learning about all the related obstacles the hard way. It feels like learning to dance ballet when you’re 50 years old. I’ve ended up in git-hell more than once, even though I work alone; I got stuck for a day over a typo; experienced indecision about which font to use; cursed the compiler for being too cryptic; rewrote the whole damn thing from scratch,… It made me even more grateful to all developers than I already was for all their skills and the hard work they put into developing these plugins. I had no idea it was this tough.
Anyhow. I keep adding ideas into more and more unfinished plugins and it’s heading towards vaporware. So instead of trying to finish and release the entire suite I’ve got planned, which feels overwhelming, I’ve decided to pre-release them one at a time and gather feedback from users like you. And in doing so, I hope to learn what else is involved in the development process, such as setting up a plugin build toolchain in Linux, writing an English manual, and listening to the advice of others.
I have no modular synthesis or UI design background, so all criticism is welcome.
I am having a LOT of fun with Dan’s Coerce module. It is an arbitrary voltages quantizer. It works well as a “quantize to chord”, “quantize to semitones”, “quantize to integers” and “quantize to module CV eigenvalues”.
This does look cool. I don’t understand exactly what the Quantize port does. The documentation says “The quantization values are read from the Quantize port.” But I’m having trouble understanding what that means.
Yeah, I had the same question. Just feed the polyphonic voltages you want to quantize to into the quantize input. I use a MERGE to build this input, usually. Or send a chord into it.
Ah yes. The Aaron Static ScaleCV works great for quantizing to a scale and the DiatonicCV works great for quantizing to a chord. The ScaleCV is limited to the modal scales, but the DiatonicCV supplies chords as major, major7, and major79, Chord inversions and voicings can be CV controlled.
ScaleCV can send the scale to DiatonicCV.
These are very nice modules and I use them a lot. Too bad AaronStatic is MIA.
It will also generate minor and dim chords, but I can’t figure out the logic.
It probably is applying the same logic as Meander does such that all chords are either major, minor or diminished in that particular mode and and root.
Hi, and welcome to the plugin developers. You mentioned using a Linux build chain. @qno has done some excellent work on using GitHub to produce builds for all four supported architectures. Whenever you push to your repository, you can click on the Actions tab at the top of the GitHub repository and watch the builds complete for each system. Once these are completed you will see green indicators, scroll to the bottom of the page to find the plugin downloads that you can distribute for testing.
I use this too, and I’ve become a convert/evangelist for it. I use it in my Sapphire plugin’s repo, and I’ve helped a couple of other people install it in theirs as well. No more “your code doesn’t build” from VCV Rack maintainers. Now when my code builds on Windows but not Mac, I know it instantly.
You can also add extra yml files in your .github/workflows/ folder to run additional unit tests. For example, I have this one to run my custom bash script runtests every time I push, in addition to the above-mentioned build scripts:
I agree with how good this is. I used to have something simular in V1, but qno’s version is much cleaner.
Using GitHub for continuous integration is excellent, and the original idea can be expanded. I also use it to run unit tests on mac and Linux, but I have yet to try and get them to run on windows as well. I also have a script to check formatting using clang-format.
But for a new developer, I would suggest using the script as-is and then expanding later once comfortable.
It will likely work on my next push. Beware edits to submodules without forking first. the submoduloe commit is unfound unless you fork and reset the git push/pull urls.