Prism: Rainbow - a port of the 4ms Spectral Multiband Resonator to VCV

I’m happy to announce Prism, a new plugin for VCV 1.0

The first module available is Rainbow, a port of the 4ms Spectral Multiband Resonator firmware v5 to VCV.

It is in the queue for integration into the VCV Library. The brave can get compile the module from source from the following GitHub library:

Note: I have only compiled and run this on Windows, so feedback from anybody who is adventurous enough to try this out on Mac or Linux is very welcome.

For the record, I have been in contact with Dan Green at 4ms who was quite enthusiastic about this project; I hope that Rainbow does not disappoint. Following his request the code is open source on GitHub.

The SMR manual is an excellent starting place for information on this module, as is DivKid’s YouTube video. I will be working on documentation and videos, until then I hope that the SMR manual available through the 4ms website and some intuition will be enough.

Note: this module currently has a tendency to clip in a not-very pleasant way. I am looking at ways to try and avoid or mitigate this, but until then you’ll have to be a bit proactive with the level controls.

Despite the alleged 1.0 status of this module, I still consider it still in development. Any problems with the module are my responsibility and nothing to do with 4ms.




Passed all integration tests of the Plugin Manager, so it compiles fine on Windows, Linux, and Mac. Runs fine on Linux also.


Was Dan Green also responsible for the background colour ? :laughing:
Just kidding, looks great.


Ha! No.

I was looking for a colour scheme that wasn’t a) vile and b) terribly over-used so I can spot it quickly in heavily compressed FB screenshots. :slight_smile:


Praise be to C++ standards!

Something does not sound right. Your output waveform is “steppy”. Somewhere along the line downsampling occurs.


HI! Yes, you are certainly right about that. I have no idea if it sounds ‘wrong’ since I do not have anything to compare it to.

(Nonsense deleted)

I think I’ve made an mistake in how the buffers are handled…

I’ve pushed out new version to GitHub which has removed at least the most obvious issues…

Cool! I’ll check it out later tonight.

Those updates did not fix the issue.

See the high frequency noise in the spectrum? That should not be there if Q is all the way up.


1 Like

Instant favourite, warts and all.

Thank you!

@johnhoar I think I have found (one, maybe THE) issue:

diff --git a/src/Rainbow.hpp b/src/Rainbow.hpp
index 1618adf..e02cc94 100644
--- a/src/Rainbow.hpp
+++ b/src/Rainbow.hpp
@@ -12,8 +12,8 @@
 #define NUM_SCALEBANKS 20
 // Audio buffer sizing
-#define BUFFER_SIZE 16
-#define NUM_SAMPLES 8
+#define BUFFER_SIZE 8
+#define NUM_SAMPLES 4

This change results in a clean waveform:


There is some kind of problem in the audio processing buffers. If I increase the NUM_SAMPLES and BUFFER_SIZE the problem gets worse. Maybe that’s a clue. But the above settings work fine.

You know: I had previously reduced that down from 32/16 to 16/8 and it had got better. Reducing it even further seems makes it even less noisy.

Which all makes me wonder what on earth is going on in there… to be clear I do not claim to understand the audio procesing code (or not yet anyway), I spent more effort hooking up interfaces to the firmware.

Anyway: Thanks for your time and help on this. It is really very much appreciated!

It’s updated in the master branch on GitHub, I have a few UI tweaks in the pipeline and I’ll push a new version out next week.

How different will it sound? I tried it on stream yesterday and, well, I have no idea what I’m supposed to do with it? It did make an interesting sound, though.

To be honest, I could not really tell the difference. But that could be due to listener, not the sound :slight_smile:

I recommend having a look at DivKid’s overview video YouTube for some ideas:


Very cool but I am having some problem. prism.vcv (39.2 KB) It seems on the very low freq it distorts. I don’t know how to stop this.

There should be a new version of the module which should hit the Library very soon.

I’ve run the patch for a while and none of the channels are clipping, so the approach of reducing the Level control does not help so much. Let me have a deeper look.

Thanks, it does seem very touchy