stoermelder PackOne v2.2

I realized that I haven’t posted an announcement in a long time, so here it is:


TLDR;

The latest update of PackOne fixes several bugs and improves stability. Updated manuals for all modules. Two new modules MIDI-CAT FINE (expander for MIDI-CAT for precision parameter adjustments) and PANIC ROOM (limiter for patching area on your screen). More new modules are in the pipeline.

The full changelog of the the release can be found here. Let me know if you have any questions or experience any issues!


The long version

Last November I began preparing a new release of PackOne. At first I thought it would be just a minor bugfix update, but - as has happened before - I got involved far more deeply than expected…

Bugs, fixes and testing

Sometimes fixing bugs is not easy. For example, with MIDI‑CAT I’ve repeatedly encountered situations where correcting one edge case introduced a problem in another. While thorough testing can mitigate this, I can’t realistically cover every combination of MIDI controller, module, and use case. That’s why I finally decided to add automated testing to my codebase. Setting it up took a little time, but now I can run a predictable suite of tests after every change - covering both common use cases and edge cases - without even touching a MIDI controller.
Although this is often called “unit testing”, what I’m doing is more a kind of integration testing: For MIDI-CAT it makes only sense to test it within a context of other modules, parameters on these modules and incoming/outgoing MIDI messages. For this, I added the Catch2 framework following this advice, which makes it really easy to write tests and them inside VS Code.

Of course, I also takes effort to write these tests, but luckily there is help…

Embracing AI

I’m quite late to the game, but I’ve finally started integrating AI into my development workflow. For VCV Rack development I’m using GitHub Copilot, and honestly: What a time saver. Three examples:

  • I’m not an expert in C++, but I enjoy experimenting with features I haven’t used before. This often leads to situations where I spend hours wrestling with compiler errors, template issues, and other confusing problems that I don’t yet fully understand. Fixing these errors is now a task of a few minutes - allowing me to learn how to do it properly in my own code.

  • Reviewing module manuals, fixing typos and grammatical mistakes. While I still create and update the documentation myself, polishing the text or restructuring sections (e.g. nice table instead of clunky bullet points) - so extremely fast and helpful.

  • Writing automated tests is a breeze. Even though the results aren’t perfect, a simple prompt such as, “Please write tests for process function in class MyModule and follow the structure of the existing tests” produces code that is 80% usable and covers most of the code paths for testing. Instead of writing every single line by myself, I only need to review it and adjust a few things here and there.

Stability

VCV Rack makes it incredibly easy to dive into C++ development and learning coding, but it also makes it easy to overlook details that can lead to subtle bugs or crashes if you’re not careful. I won’t go into details here, but interaction of the user interface with the audio engine is a delicate area. We’re constantly tweaking knobs and pressing buttons on the modules, which is harmless in almost every case. But when it comes to manipulating lists (e.g. adding or removing items), this can become dangerous quickly.
I rewrote parts of TRANSIT and STRIP to address isues that, while rare, can still occur and potentially crash a session. I consider these two now pretty safe, but reviewing my own (older) code is an ongoing task over the coming weeks (for developers: embrace std::shared_ptr<const std::vector<T>>).

What comes next

I’m glad I got v2.2.0 finally finished and into the VCV Library, because I’m already working on several new modules that will be released very soon:

  • A module for live-coding within VCV Rack. I’m will not share any more details just yet, but the module and manual is about 90 % finished and I’m really excited about it :star_struck:

  • An expander for TRANSIT, which allows morphing between up to eight snapshots using an XY pad. Most of the code has already been written, and I’ll start testing and refining it soon. There is branch on my GitHub repo if anyone is interested in previewing it (GitHub - stoermelder/vcvrack-packone at transit-pad).

40 Likes

Thank you!

1 Like

I’m looking for a few beta-testers for the new live-coding module. If you are interested, please write me a short pm with your operating system and I’ll send you a preview build. You should be into live-coding, otherwise it makes not much sense I’m afraid.

1 Like

I’m looking for a few beta-testers for the new live-coding module. If you are interested, please write me a short pm with your operating system and I’ll send you a preview build. You should be into live-coding, otherwise it makes not much sense I’m afraid

:star_struck: Is it based on the old VCV - Prototype code or is it something new? Is the interpreted language going to be like Strudel/Tidal/JS/BASIC/C++?

It is a port of an existing live-coding system, but none of the ones you mentioned :relieved_face:

2 Likes