VCV Prototype

I’ve started working with prototype and for the most part it’s going okay. There are certain workflow issues that I need to sort out (I’m using notepad to code with and that’s not great) and the familiar sensation of dealing with bugs (“wait, what? Why isn’t that working”) is returning to me.
One thing that doesn’t appear to be explained in the docs is the bufferindex parameter. In fact, i’m not really clear on what “buffers” are for in this context?
Other than that i’ve replaced about three rows of modules with one module and it’s looking okay so far.

If you can stand a new tool, Visual Studio Code (free, of course) will be a much better editor for JS. You won’t have to learn many/any features to just start using it.


process() is called every N samples, where N is set by config.bufferSize and read from block.bufferSize. It stores the last N samples received in the array block.inputs[i], and your goal is to fill the array block.outputs[i]. Buffers are easier to work with and better performance than sample-by-sample state.

1 Like

Added the Lua script engine. Will be available in the next Prototype release.


I think what I want is just a fairly simple text editor that has auto indent and syntax highlighting. I’m somewhat “old school”.
Anyway, all the stuff that I did with Formulas, adders and comparitors (amoungst other stuff) I’m doing with Prototype and it works okay. Problems?

  • Please let me send several separate lines of text to the display.
  • I’m tempted to ask for polyphonic ports but I’m not sure how that would work. However…
  • Please can we have either more ports or a simple extension module that gives you another 6 sets of things and lets you keep adding more extensions. The problem being that there is no amount of ports that is “enough”.
  • Minor thing: I was expecting the buttons to be slightly simpler to use. Like, they’d toggle on and off and give me a true or false value.


7 posts were split to a new topic: Text editors

Isolated sub-interpretes in embedded python can be challenging … I also had a look at Maybe its easier embedding with CFFI I’ll have a look at it. I’m a little bit rusty with C++ …but I’ll get along.

GIL isn’t really the blocker here. Various crashes with Numpy, and the build system on Mac/Windows is. See and propose patches in the issue tracker if you want to push this along.

Any plans to support polyphony? After writing my script I realized that Prototype isn’t polyphonic so I will try switching to Formula.

How would that work? outputs[i][blockIndex][channel]? What about backwards compatibility? What about performance being 16x worse?

1 Like

in the case of javascript, it wouldn’t be 16x worse, given that the transition between c++ and javascript is still fairly expensive, even with quickjs (though not as expensive as v8). if I had to make an educated guess, I’d say 4x worse. I can’t make those guesses for other languages though.

that said, for backward compatibility, it could be a configuration option:

config.polyphonic = true

where default would be false. someone could make a proposal and if it made sense across enough languages and were performant enough, it might be doable.

What I’m doing is inexpensive and isn’t audio rate (calculations based on the notes being played on a keyboard), so I’m not too concerned about performance.

But presumably there would a config variable with the number of channels currently in use, so you wouldn’t pay the cost for computing channels you’re not using?

I have added support for Vult language. If anyone wants to test it, you can find it in my fork


I’ve added preliminary support for Csound, but there is an issue. Csound is LGPL licensed. As far as I know this means it can’t be statically linked. Does that mean Csound support is a no-no in this case or is there some way we can make it work?

I am not an expert. As far as I can see this is not a complete no-no in general terms. Your specific circumstances might have additional constraints.

  • you can statically link an LGPL library into a GPL compatible project.
  • you can statically link an LGPL library into a more restrictive project, but you would have to also make your project available in an object file format, so that someone could swap out the LGPL library for a replacement and relink it.

But IANAL; do you own research before you take my word for it.

That’s what it looks like they say here: Frequently Asked Questions about the GNU Licenses - GNU Project - Free Software Foundation (though I have to admit that licensing terms are an obscure matter to me).
Anyway, do dynamic linking with pre-installed runtimes shouldn’t go fine? Isn’t it the case as with libpd/Pure Data, that spans with a modified BSD license, if I am not wrong?

Thanks for the feedback @carbon14 and @dizzy

I assume all the script engines in the official VCV-Prototype package are statically linked?

I’m afraid I don’t know.

1 Like

Hmm. I’d rather not sink lots of time and energy into making an official PR until I know if dynamic linking is Ok for the official Prototype package. Maybe I should file a github issue.

1 Like

I realize that every bit of information about licensing terms that I read about, puts some more noise in my head… but I was looking again at the GNU compatibility matrix, and doesn’t it looks like things could actually work?
Here’s the link, where I’m assessing VCVRack licensed under GPLv3, and the formula “I want to use a library under:” LGPLv2.1 only. Sure, probably a definitive help about this dilemma can be given only by @Vortico (sorry Andrew for shouting out).

EDIT: Nice, I see now that Andrew already summed it up, clearing all our doubts :slight_smile: LGPL scripting engines? · Issue #48 · VCVRack/VCV-Prototype · GitHub Thanks!

1 Like