@@ -73,7 +73,7 @@ Complete the [Setting up your development environment](#setting-up-your-developm | |||
Plugins can be built in two ways: | |||
- [Build Rack from source](#building-rack) and build plugins in the `plugins/` folder. (Recommended for advanced developers.) | |||
- Download an [official Rack build](https://vcvrack.com/Rack.html) and [Rack-SDK-1.1.1.zip](https://vcvrack.com/downloads/Rack-SDK-1.1.1.zip), and build plugins anywhere you like. (Easiest/fastest.) | |||
- Download an [official Rack build](https://vcvrack.com/Rack.html) and [Rack-SDK-1.1.4.zip](https://vcvrack.com/downloads/Rack-SDK-1.1.4.zip), and build plugins anywhere you like. (Easiest/fastest.) | |||
Download or clone the plugin source code, e.g. | |||
@@ -2,6 +2,8 @@ | |||
## I found a bug. | |||
All bug reports must be reproducible, otherwise they cannot be tested and fixed in a future release of Rack. | |||
Search [Rack's issue tracker](https://github.com/VCVRack/Rack/issues?q=is%3Aissue) to check if someone else has posted a similar bug report. | |||
If you believe the problem has never been reported before, [create a GitHub account](https://github.com/) (it's free) and [open a bug report issue](https://github.com/VCVRack/Rack/issues/new?template=bug_report.md). | |||
You must fill out the issue template, or it will be closed. | |||
@@ -15,14 +17,11 @@ Search [Rack's issue tracker](https://github.com/VCVRack/Rack/issues?q=is%3Aissu | |||
If you believe the feature has never been requested before, [create a GitHub account](https://github.com/) (it's free) and [open an feature request issue](https://github.com/VCVRack/Rack/issues/new?template=feature_request.md). | |||
You must fill out the issue template, or it will be closed. | |||
## The graphics are rendered incorrectly, not at all, or Rack doesn't launch because of an "OpenGL error". | |||
Rack requires at least OpenGL 2.0 with the `GL_EXT_framebuffer_object` extension. | |||
If your graphics card supports this, make sure you've installed the latest graphics drivers, and restart Rack. | |||
If this does not fix it, see below for instructions on submitting a bug to Rack's issue tracker. | |||
## Where is the "Rack user folder"? | |||
The Rack user folder stores data readable/writable by Rack. | |||
You can open it by choosing `Help > Open user folder` in the Rack [menu bar](MenuBar.html), or by navigating to | |||
- MacOS: `Documents/Rack/` | |||
- Windows: `My Documents/Rack/` | |||
- Linux: `~/.Rack/` | |||
@@ -42,7 +41,7 @@ It is not planned. There are many issues with such a project. | |||
- Business: | |||
- Such a port would be expensive to develop, so it would need to be sold commercially. Some plugins (proprietary, GPL, etc) would need special licensing agreements in order to be included in the package. Some plugins would increase the cost of the product if included in the package. Others would simply be omitted from the third-party plugin collection. | |||
- The friction for a developer to build and test their plugins on iOS/Android is significantly higher than the three desktop OS's, which may decrease their willingness to develop Rack plugins. | |||
- When serving an app on the App Store or Google Play, Apple and Google are not obligated to continue serving an app and may remove it at will or change policies on a whim that can disrupt VCV's business model. This would place VCV's risk in a small number of baskets. | |||
- When serving an app on the App Store or Google Play, Apple and Google are not obligated to continue serving an app and may remove it at will or change policies on a whim that can disrupt VCV's business model. This would place a large risk upon VCV. | |||
## Why does VCV Audio consume so much CPU? | |||
@@ -60,7 +59,7 @@ All Rack v2 plugins will be compatible with the plugin version of Rack. | |||
The standalone version of Rack v2 will continue to be free/open-source. | |||
*VCV Bridge* was a VST2/AU plugin for bridging the standalone version of Rack with a DAW. | |||
However, users found it to be unreliable, so it is no longer distributed as of Rack v1. | |||
However, inter-process communication of audio buffers does not meet the reliability requirements of VCV and its users, so it is no longer distributed as of Rack v1. | |||
The audio/MIDI Bridge drivers will be removed in Rack v2. | |||
## Does VCV Rack work with touch screens? | |||
@@ -41,10 +41,12 @@ Downloading plugins directly from the Plugin Manager website is not supported at | |||
*Install third-party plugins at your own risk. Like VST plugins, installing plugins from unknown sources may compromise your computer and personal information.* | |||
Download the plugin ZIP package from the vendor's website to `<Rack user folder>/plugins` (See [Where is the "Rack user folder"?](FAQ.html#where-is-the-rack-user-folder)). Rack will extract and load the plugin upon launch. | |||
Download the plugin ZIP package from the vendor's website to `<Rack user folder>/plugins-v1` (See [Where is the "Rack user folder"?](FAQ.html#where-is-the-rack-user-folder)). Rack will extract and load the plugin upon launch. | |||
Note: Do not download the plugin via GitHub's green "Clone or download" button. These are source code ZIP packages and do not contain the compiled plugin binary. If the vendor distributes their plugin with GitHub, look in the "Releases" section for the compiled ZIP packages. | |||
Note: The "major" version number (e.g the `1` in `v1.2.3`) must match the major version number of Rack. See [ABI/API Version](Version.html). | |||
## Running Rack | |||
@@ -1,4 +1,4 @@ | |||
# Plugin Metadata | |||
# Plugin Manifest | |||
This document defines the `plugin.json` file found at the root of your plugin folder. | |||
For example, see Fundamental's [plugin.json](https://github.com/VCVRack/Fundamental/blob/v1/plugin.json) file. | |||
@@ -120,7 +120,7 @@ The human-readable name for the module. | |||
*Array of strings. Optional.* | |||
List of tags representing the functions and/or properties of the module. | |||
All tags must match the [list of allowed tags](https://github.com/VCVRack/Rack/blob/v1/src/plugin.cpp#L540) in Rack, case-insensitive. | |||
All tags must match the [list of allowed tags](https://github.com/VCVRack/Rack/blob/v1/src/tag.cpp) in Rack, case-insensitive. | |||
## `.modules[].description` | |||
@@ -47,14 +47,11 @@ Expands Rack to fill the screen with no window borders. | |||
## Engine | |||
### CPU timer | |||
### CPU meter | |||
Enables/disables the measurement of time for each module to generate each sample (see [Sample rate](#sample-rate)). | |||
This displays a meter on each module with the number of microseconds (μs) and the percentage of time spent in the module's assigned thread (see [Threads](#threads)). | |||
If running in single-threaded mode, the total percentage must equal 100%, with "blocking" modules like [VCV Audio](Core.html#audio) consuming the remaining time by "sleeping" until the audio device is ready for more audio. | |||
If multi-threading is enabled, the total percentage may equal up to \\(N \times 100\\%\\), although this number is a bit less in reality due to [multi-threading overhead](https://en.wikipedia.org/wiki/Amdahl%27s_law). | |||
Timing takes CPU power itself, so it is recommended to disable the CPU timer when it is not needed for best performance. | |||
The CPU meter consumes engine time itself, so it is recommended to disable it when it is not needed for best performance. | |||
### Sample rate | |||
Sets Rack's engine sample rate. | |||
@@ -6,10 +6,10 @@ | |||
- Familiarity with navigating the command line (`cd`, `ls`, etc). | |||
- Familiarity with modular synthesizers. [Digital signal processing (DSP)](DSP.html) knowledge is only required if creating sound generators and processors. | |||
- Download and install [VCV Rack](https://vcvrack.com/Rack.html). | |||
- Download and extract [Rack-SDK-1.1.1.zip](https://vcvrack.com/downloads/Rack-SDK-1.1.1.zip). | |||
This contains the Rack API headers and build system for compiling your plugin. | |||
- Follow the steps to [set up your build environment](Building.html#setting-up-your-development-environment) for your operating system. | |||
You do not need to build Rack from source if using the Rack SDK. | |||
- Download and extract [Rack-SDK-1.1.4.zip](https://vcvrack.com/downloads/Rack-SDK-1.1.4.zip). | |||
This contains the Rack API headers and build system for compiling your plugin. | |||
## Creating the template plugin | |||
@@ -60,7 +60,7 @@ Example session: | |||
```text | |||
Module name [MyModule]: My Module | |||
One-line description (optional) []: Simple sine oscillator | |||
Tags (comma-separated, case-insensitive, see https://github.com/VCVRack/Rack/blob/v1/src/plugin.cpp#L511-L571 for list) []: VCO | |||
Tags (comma-separated, case-insensitive, see https://github.com/VCVRack/Rack/blob/v1/src/tag.cpp for list) []: VCO | |||
Added MyModule to plugin.json | |||
Panel found at res/MyModule.svg. Generating source file. | |||
Found 1 params, 1 inputs, 1 outputs, 0 lights, and 0 custom widgets. | |||
@@ -25,7 +25,7 @@ VCV offers commercial royalty licensing for Rack plugins by emailing [contact@vc | |||
This license also includes permission to use the [Component Library](https://github.com/VCVRack/Rack/blob/v1/include/componentlibrary.hpp) graphics by [Grayscale](https://grayscale.info/), which are normally licensed for non-commercial use only. | |||
It is recommended to contact VCV as early as possible in your development process to make sure the license agreement is ready well before you release your plugin. | |||
You can expedite the licensing processing by sending concepts and design mockups along with your license request. | |||
You can expedite the licensing processing by sending concepts or design mockups along with your license request. | |||
You may also wish to sell your plugin on the [VCV Library](https://vcvrack.com/plugins.html). | |||
Some benefits of distributing your plugin on the VCV Library: | |||
@@ -43,7 +43,7 @@ Gates should produce **10V** when active. | |||
Each cable in Rack induces a 1-sample delay of its carried signal from the output port to the input port. | |||
This means that it is not guaranteed that two signals generated simultaneously will arrive at their destinations at the same time if the number of cables in each signal's chain is different. | |||
For example, a pulse sent through a utility module and then to a sequencer's CLOCK input will arrive one sample later than the same pulse sent directly to the sequencer's RESET input. | |||
This will cause the sequencer to reset to step 1, and one sample later, advance to step 2, which is undesirable behavior. | |||
This will cause the sequencer to reset to step 1, and one sample later, advance to step 2, which is undesired behavior. | |||
Therefore, modules with a CLOCK and RESET input, or similar variants, should ignore CLOCK triggers up to **1ms** after receiving a RESET trigger. | |||
You can use `dsp::Timer` for keeping track of time. | |||
@@ -24,7 +24,7 @@ Rack | |||
PluginDevelopmentTutorial.md | |||
Panel.md | |||
Metadata.md | |||
Manifest.md | |||
VoltageStandards.md | |||
DSP.md | |||
Migrate1.md | |||