PS-PurrSoftware Plugin Modules

I feel more encouraged today. I got the circle of 5ths mode and root (~key) signature working correctly for all 84 combinations. Every time I revisit modes over the years, I’ve managed to totally confuse myself before finally regaining my sanity in a manner consistent with music theory and convention:) Anyone who has messed with modes in depth will understand this anguish. Also, I’m trying to avoid doing something that is not wrong, but technically not correct, so the music theorists and purists will not jump all over me. It is a good thing I have studied the physics standard model of particles and fields and the group theory of symmetries that is used to represent them. Music theory seems very similar to me.

By the way, I had a true moment of enlightenment around 1988 when I was first developing Meander and I encountered the Circle of 5ths which seemed to be the key to understanding the symmetries and mathematics of music. Every time I revisit the circle, I understand it better and appreciate it even more. Quite often that understanding is the understanding that what I thought I understood before is incorrect or incomplete.

6 Likes

By the way, the group theory representation of the standard model can be written on one short line: SU(3)xSU(2)xU(1) This simple unitary product group represents the entire menagerie of particles and flavors and generations of particles. The full Lagrangian takes a page to write and the whole model takes a lifetime to understand.

4 Likes

I think I have the Meander score notation all working correctly. Notes are rendered to the panel using nvg as they are played. The “key” signature is correct for every mode and root. The notes are displayed per the key signature, i.e., you have to look at the signature to determine if the played note is natural, flat or sharp. Up to 256 notes per measure are captured and displayed. Meander does not allow accidentals as they almost always sound bad if just randomly inserted, so played notes are always in the scale and obeying the key signature. The display starts over at the beginning of each measure. For now, the notes are just displayed as whole notes as things get very cluttered with flagged notes and MusiSync font has 1/16 note symbol but no 1/32 note symbol. For now the displayed notes are color coded for harmony, melody, arp and bass parts.

image

7 Likes

I kludged the MusiSync missing 1/32 note symbol by doing an “overstrike” on a 1/16 note symbol. Here is the same view but with full note length notation.

image

5 Likes

this looks really awesome :+1:

2 Likes

Just saw the comments on release date here. I don’t know if you are planning on this being an open source or free module or a paid one, and please take my comments only as useful if you are planning an open source or free module.

But if you are planning an open source or free module, let me share my experience with surge (mostly based on the VST proper, but also on the rack modules). Release it early and often, and tag it beta. You will get more contributions than you expect!

In both the VST of surge (very popular!) and the plugins of surge-rack (kinda popular and useful) and BaconPlugs (neither popular nor useful), we do a automatic binary downloadable release all platforms with every single git commit to master! (Azure Pipelines for Github allows build of plugin for how we do it).

And one of the best things that came from the surge project releasing regular open built nightlies was that people who didn’t have build capability could test the synth. The quality of the volunteer QA team we have is perhaps the most important factor in the tool being what it is today.

So like I said, I don’t know what your plans are. But if your plans are open source and free, It’s my experience that giving people access to your tool at the latest version with a clear alpha or beta label (or later with a nightly version) will get you - in the rack and free synth community - quality feedback which really surprised, helped, and delighted me!

5 Likes

@baconpaul that is very interesting. I’m familiar with Azure, but not with Azure Pipelines. I figured it would be prohibitively expensive but see that it is free for open source projects on GitHub.

My plan is to release Meander as open source, but since I only develop for Windows, I feel somewhat overwhelmed with the prospect of getting the software tested and built for Linux and MacOS. This would certainly make that job easier.

Are very many VCV-Rack plugin developers using Azure Pipelines? If not, why not? Is VCV using Azure Pipelines for Rack builds?

Although I’m mostly doing Meander for myself, since I have worked on Meander for 31 years I would like to share it with the world so that it is not totally lost some day. My life work:) It remains to be seen how many would be interested in it. It is extremely complex, as plugins go.

Thanks for stimulating my imagination.

3 Likes

I’m using Azure Pipelines for building my plugin and I only develop on Windows too. I haven’t tested my code on Linux or Mac one single time and rely completely on the community to report issues on other OS. I’m not doing anything OS-specific in my plugin and I’m using only things provided by the Rack API, so these things are already well tested.

Not many developers are using Azure Pipelines for building their plugins as far as I know, I don’t know why. VCV has its own build system for the different platforms.

This brings up a question that I have been intending to ask for a while. What type of “OS specific” things do I need to avoid. I’m just using the Rack SDK and some of my own C source that just uses standard things, I believe. Is there anything written on what to avoid?

So I develop primarily on mac, but for surge I have a linux and windows vm I can spin up on my box which i do occasionally. 95% of the time I rely on the pipelines to check and I generally “know” when I’m doing something OS specific. If you stick to the APIs in rack you are fine, generally. The first time you build another platform you will realize you missed something (like you refer to a uint64_t and don’t include stdint.h or some such) but rack is also pretty consistent in tooling on all the platforms. Just stick to the rack API and you are OK basically.

If your code is in a public github repo and has an open source license I’d be happy to pull it down and try it on a mac also.

Andrew has his own docker based (I think) cross compiling build system I know for the whole shebang. As to why more folks don’t use the azure pipelines I’m not sure but I occasionally hop into a thread with a dev and point them to the experience i had. Incredibly useful.

3 Likes

My code is not on GitHub at all yet.

Understood. Well if it is and you want a volunteer to try a build on a mac, and it’s not the week or so between christmas and New Years, tag me here and I’m happy to give it a whirl for you.

1 Like

Likewise for linux.

2 Likes

It is time that I create a GitHub repository. If I create the repository as private, can I change it to public once I get it working right? I’m setting it up under GPL 3. I’m assuming that is the best license for open source and non-commercial?

1 Like

Yes, you can start as private and make it public later without any effort.

As for licensing I’d go with GPLv3. Some really good read on this topic, first post, last third:

2 Likes

Yeah GPL3 is a good choice if you want to ensure that it is open source and the source is only in other open source projects. (If your code is GPL3 and included in another bit of software, there’s no particular requirement those projects can’t be commercial but they must be open source and GPL3, which de facto means that a free version will always be available).

And yeah you can swap from private to public. But the experience we had over in surge land was that claes (the original author of surge) dropped a not really working very well and definitely not finished version of surge 1.6 into a public github repo and let the community find many of the bugs.

The first version in the public repo didn’t compile on mac, didn’t compile on linux, and had lots of things that needed fixing. This is not a criticism - he was super open about the fact that it was a half finished version 1.6, and the core of the synth was fantastic on day 1. My point is more that having the unfinished code available to the community may be something you want to consider.

Although of course you should choose the development lifecycle and code disclosure that works for you. I’m not trying to bias you one way or another, just sharing my experience!

2 Likes

Well, that was easy. I set up my GitHub private repository, cloned/downloaded, built it and it works! I need to get a little more familiar with GitHub before I make this public.

Thanks for your advice.

4 Likes

I can build for Linux too whenever the code goes online/public, would love to test it. :slight_smile:

2 Likes

Okay, Meander is public on GitHub at https://github.com/knchaffin/Meander

I build on Win10. It will be interesting to see if it builds on MacOS and linux.

This is still a work in progress and is not ready for prime time yet. I need to write a manual page soon.

As a reminder, Meander for Rack is a sequencer, not a DSP audio module.

5 Likes

Linux:

src/Meander.cpp:331:16: error: declaration of ‘HarmonyParms MeanderState::HarmonyParms’ [-fpermissive]
  HarmonyParms  HarmonyParms;
                ^~~~~~~~~~~~
src/Meander.cpp:252:8: error: changes meaning of ‘HarmonyParms’ from ‘struct HarmonyParms’ [-fpermissive]
 struct HarmonyParms
        ^~~~~~~~~~~~
src/Meander.cpp:332:14: error: declaration of ‘MelodyParms MeanderState::MelodyParms’ [-fpermissive]
  MelodyParms MelodyParms;
              ^~~~~~~~~~~
src/Meander.cpp:274:8: error: changes meaning of ‘MelodyParms’ from ‘struct MelodyParms’ [-fpermissive]
 struct MelodyParms  
        ^~~~~~~~~~~
src/Meander.cpp:333:12: error: declaration of ‘BassParms MeanderState::BassParms’ [-fpermissive]
  BassParms BassParms;
            ^~~~~~~~~
src/Meander.cpp:319:8: error: changes meaning of ‘BassParms’ from ‘struct BassParms’ [-fpermissive]
 struct BassParms
        ^~~~~~~~~
src/Meander.cpp:334:11: error: declaration of ‘ArpParms MeanderState::ArpParms’ [-fpermissive]
  ArpParms ArpParms;
           ^~~~~~~~
src/Meander.cpp:302:8: error: changes meaning of ‘ArpParms’ from ‘struct ArpParms’ [-fpermissive]
 struct ArpParms
        ^~~~~~~~