@@ -17,7 +17,7 @@ brew install git wget cmake autoconf automake libtool jq python | |||
If you have an anti-virus program running, disable it or it may interfere with the build process. | |||
Install [MSYS2](http://www.msys2.org/) and launch the MinGW 64-bit shell from the Start menu, *not the default MSYS shell*. | |||
Install the x86_64 version of [MSYS2](http://www.msys2.org/) and launch the MinGW 64-bit shell from the Start menu, *not the default MSYS shell*. | |||
Update the package manager itself: | |||
```bash | |||
pacman -Syu | |||
@@ -16,7 +16,6 @@ | |||
- [Reddit](https://www.reddit.com/r/vcvrack/) | |||
- [IRC](http://webchat.freenode.net?channels=%23VCVRack) | |||
- [Patchstorage](https://patchstorage.com/platform/vcv-rack/) | |||
- [Switched On Rack unofficial blog](http://www.switchedonrack.com/) | |||
- [MuffWiggler thread](https://www.muffwiggler.com/forum/viewtopic.php?t=186899) | |||
- [KVR Audio thread](https://www.kvraudio.com/forum/viewtopic.php?f=23&t=489230) | |||
- [Hispasonic thread (Spanish)](https://www.hispasonic.com/foros/foro-vcv-rack/516252) | |||
@@ -29,7 +29,7 @@ It is not planned. There are many issues with such a project. | |||
## Is VCV Rack available as a VST/AU/AAX plugin for DAWs? | |||
VCV Rack can be fully considered a DAW itself rather than a "synthesizer plugin", so Rack is a standalone application. | |||
However, due to overwhelming user demand, a new product called *VCV Rack for DAWs* will be available as a 64-bit VST2 plugin for around $99 shortly after Rack v2 is released around Jan-Feb 2020. | |||
However, due to overwhelming user demand, a new product called *VCV Rack for DAWs* will be available as a 64-bit VST2 plugin for around $99 shortly after Rack v2 is released. | |||
VST3/AU/AAX/LV2 versions might be released afterwards, but this is not yet confirmed. | |||
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. | |||
@@ -40,6 +40,7 @@ The standalone version of Rack v2 will continue to be free/open-source. | |||
It relied on [inter-process communication (IPC)](https://en.wikipedia.org/wiki/Inter-process_communication) between Rack (server) and the DAW plugin (client), similar to [ReWire](https://en.wikipedia.org/wiki/ReWire_(software_protocol)). | |||
Because real-time IPC of audio cannot be achieved on non-[real-time operating systems](https://en.wikipedia.org/wiki/Real-time_operating_system), it was never intended as more than a fun experiment, and the project was concluded a month after development started. | |||
One could say the experiment "failed", but its purpose was primarily to see how much it would fail. | |||
The conclusion was that it was not reliable enough for the majority of users. | |||
VCV Bridge was deprecated in July 2018 and is now unsupported. | |||
The Bridge VST2/AU plugin was removed in Rack 1.0 (although it can be found in [earlier Rack packages](https://vcvrack.com/downloads/)), and the Bridge audio/MIDI driver will be removed in Rack 2.0. | |||
@@ -6,8 +6,10 @@ VCV Rack is free software, so you may simply download and run the software to se | |||
However, if you are experiencing performance issues, make sure you have at least the following hardware. | |||
- Operating system: MacOS 10.7+, Windows 7+, or Linux (Ubuntu 16.04+, etc) | |||
- CPU: Intel/AMD 64-bit processor from \~2011 or later | |||
- Graphics: Dedicated Nvidia/AMD graphics card from \~2013 or later. | |||
Integrated (non-dedicated) graphics such as Intel HD/Iris are not recommended and cause significantly increased CPU usage. | |||
- Graphics: Dedicated graphics card from \~2013 or later with the latest driver software update: | |||
- [Nvidia drivers](https://www.nvidia.com/Download/index.aspx) | |||
- [AMD drivers](https://www.amd.com/en/support) | |||
- [Intel drivers](https://downloadcenter.intel.com/product/80939/Graphics-Drivers). Integrated (non-dedicated) graphics such as Intel HD/Iris are not recommended and cause significantly increased CPU usage. | |||
- RAM: 1GB | |||
- Disk space: 1GB | |||
@@ -7,9 +7,10 @@ If you encounter a bug in Rack itself (not a plugin), such as a UI issue, broken | |||
- Log in or register for a free [GitHub account](https://github.com/). | |||
- Search [Rack's issue tracker](https://github.com/VCVRack/Rack/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) to check if someone else has posted a similar bug report. | |||
- If the bug is already reported, vote for it by adding a "thumb-up" reaction on the first post. | |||
- If not, [open a bug report issue](https://github.com/VCVRack/Rack/issues/new?template=bug_report.md) and fill out the issue template. | |||
- If not, [open a bug report issue](https://github.com/VCVRack/Rack/issues/new?template=bug_report.md) and fill out the issue template ([found here](https://raw.githubusercontent.com/VCVRack/Rack/v1/.github/ISSUE_TEMPLATE/bug_report.md) if it doesn't appear when creating your issue). | |||
If you provide enough information for a developer to reproduce and identify the bug, a fix is then implemented, publicly tested with development builds, and released in a future Rack version. | |||
A developer then attempts to reproduce and identify your bug. | |||
If successful, a fix is implemented, publicly tested with development builds, and released in a future Rack version. | |||
## Feature requests for Rack | |||
@@ -18,9 +19,10 @@ If you want to propose a feature or change for Rack, follow these steps. | |||
- Log in or register for a free [GitHub account](https://github.com/). | |||
- Search [Rack's issue tracker](https://github.com/VCVRack/Rack/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) to check if someone else has posted a similar feature request. | |||
- If the feature is already requested, vote for it by adding a "thumb-up" reaction on the first post. | |||
- If not, [open an feature request issue](https://github.com/VCVRack/Rack/issues/new?template=feature_request.md) and fill out the issue template. | |||
- If not, [open an feature request issue](https://github.com/VCVRack/Rack/issues/new?template=feature_request.md) and fill out the issue template ([found here](https://raw.githubusercontent.com/VCVRack/Rack/v1/.github/ISSUE_TEMPLATE/feature_request.md) if it doesn't appear when creating your issue). | |||
If your proposal is approved (or modified until approved), the feature is then implemented, publicly tested with development builds, and released in a future Rack version. | |||
Your proposal is then discussed and possibly modified. | |||
If approved, the feature is implemented, publicly tested with development builds, and released in a future Rack version. | |||
## Bug reports and feature requests for Rack plugins | |||
@@ -6,7 +6,6 @@ For example, see Fundamental's [plugin.json](https://github.com/VCVRack/Fundamen | |||
JSON paths are denoted in "flat format", as used by [jq](https://stedolan.github.io/jq/manual/). | |||
## `.slug` | |||
*String. Required.* | |||
The unique identifier for your plugin. | |||
@@ -19,7 +18,6 @@ To guarantee uniqueness, it is a good idea to prefix the slug by your "brand nam | |||
The word "slug" [comes from web publishing](https://en.wikipedia.org/wiki/Clean_URL#Slug) to represent URL paths that never change, which in turn [comes from typesetting](https://en.wikipedia.org/wiki/Slug_(typesetting)). | |||
## `.name` | |||
*String. Required.* | |||
The human-readable name for your plugin. | |||
@@ -28,7 +26,6 @@ Used for labeling your plugin the VCV Library. | |||
Unlike slugs, the name can be changed at any time without breaking patch compatibility. | |||
## `.version` | |||
*String. Required.* | |||
The version of your plugin should follow the form `MAJOR.MINOR.REVISION`. | |||
@@ -41,7 +38,6 @@ For example, *MyPlugin 1.4.2* would specify that your plugin is compatible with | |||
If you publish the source code in a git repository, it is recommended to add a git tag with `git tag vX.Y.Z` and `git push --tags`. | |||
## `.license` | |||
*String. Required.* | |||
The license of your plugin. | |||
@@ -50,88 +46,267 @@ Use `"proprietary"` for commercial and freeware plugins. | |||
If your plugin uses a common open-source license, use the identifier string from the [SPDX License List](https://spdx.org/licenses/), such as `GPL-3.0-only`, `GPL-3.0-or-later`, `MIT`, `BSD-3-Clause`, `CC0-1.0`, etc. | |||
## `.brand` | |||
*String. Optional.* | |||
Prefix string for all modules in your plugin. | |||
For example, the brand "VCV" is used by the Fundamental plugin to create "VCV VCF", VCV Unity", etc. | |||
If blank or undefined, the plugin name is used. | |||
## `.author` | |||
## `.description` | |||
*String. Optional.* | |||
A one-line summary of the plugin's purpose. | |||
If your plugin doesn't follow a theme, it's probably best to omit this. | |||
## `.author` | |||
*String. Required.* | |||
Your name, company, alias, GitHub username, etc. | |||
## `.authorEmail` | |||
*String. Optional.* | |||
Your email address for support inquiries. | |||
## `.authorUrl` | |||
*String. Optional.* | |||
Homepage for yourself or your company. | |||
## `.pluginUrl` | |||
*String. Optional.* | |||
Homepage for the plugin itself. | |||
## `.manualUrl` | |||
*String. Optional.* | |||
The manual website of your plugin. | |||
E.g. HTML, PDF, GitHub readme, GitHub wiki. | |||
## `.sourceUrl` | |||
*String. Optional.* | |||
Homepage for the source code. | |||
For GitHub URLs, use the main project page, not the `.git` URL. | |||
## `.donateUrl` | |||
*String. Optional.* | |||
Link to donation page for users who wish to donate. | |||
E.g. [PayPal.Me](https://www.paypal.me/), [Cash App](https://cash.app/) links. | |||
## `.modules[].slug` | |||
*String. Required.* | |||
The unique identifier for the module. | |||
Similar guidelines from [.slug](#slug) apply. | |||
## `.modules[].name` | |||
*String. Required.* | |||
The human-readable name for the module. | |||
## `.modules[].tags` | |||
*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/tag.cpp) in Rack, case-insensitive. | |||
All tags must match the following strings, case-insensitive. | |||
## `.modules[].description` | |||
### `Arpeggiator` | |||
Breaks a chord into a sequence of single notes. | |||
### `Attenuator` | |||
With a level knob and not much else. | |||
### `Blank` | |||
No parameters or ports. Serves no purpose except visual. | |||
### `Chorus` | |||
### `Clock generator` | |||
*Deprecated aliases: `Clock`* | |||
### `Clock modulator` | |||
Clock dividers, multipliers, etc. | |||
### `Compressor` | |||
With threshold, ratio, knee, etc parameters. | |||
### `Controller` | |||
Use only if the artist "performs" with this module. Simply having knobs is not enough. Examples: on-screen keyboard, XY pad. | |||
### `Delay` | |||
### `Digital` | |||
### `Distortion` | |||
### `Drum` | |||
*Deprecated aliases: `Drums`, `Percussion`* | |||
### `Dual` | |||
The core functionality times two. If multiple channels are a requirement for the module to exist (ring modulator, mixer, etc), it is not a Dual module. | |||
### `Dynamics` | |||
### `Effect` | |||
### `Envelope follower` | |||
### `Envelope generator` | |||
### `Equalizer` | |||
*Deprecated aliases: `EQ`* | |||
### `Expander` | |||
Expands the functionality of a "mother" module when placed next to it. Expanders should inherit the tags of its mother module. | |||
### `External` | |||
### `Filter` | |||
*Deprecated aliases: `VCF`, `Voltage controlled filter`* | |||
### `Flanger` | |||
### `Function generator` | |||
### `Granular` | |||
### `Hardware clone` | |||
*Deprecated aliases: `Hardware`* | |||
Clones the functionality, panel design, and component layout of a hardware module on the market. | |||
Remember to follow the [VCV Plugin Ethics Guidelines](PluginLicensing.html#vcv-plugin-ethics-guidelines) and only clone hardware with permission from its owner. | |||
If there is a [ModularGrid](https://www.modulargrid.net/) page for the hardware module, add the [modularGridUrl](Manifest#modules-modulargridurl) property. | |||
If the module name does not include the hardware's name or brand, add that information to the [module description](Manifest#modules-description) so users can search for the module by its hardware name, e.g. `"Based on Mutable Instruments Clouds"`. | |||
### `Limiter` | |||
Limits a signal from exceeding a threshold, e.g. with soft clipping or dynamic range compression. | |||
### `Logic` | |||
Implements binary logic with gate signals. | |||
### `Low-frequency oscillator` | |||
*Deprecated aliases: `LFO`, `Low frequency oscillator`* | |||
### `Low-pass gate` | |||
*Deprecated aliases: `Low pass gate`, `Lowpass gate`* | |||
### `MIDI` | |||
### `Mixer` | |||
### `Multiple` | |||
### `Noise` | |||
### `Oscillator` | |||
*Deprecated aliases: `VCO`, `Voltage controlled oscillator`* | |||
### `Panning` | |||
*Deprecated aliases: `Pan`* | |||
### `Phaser` | |||
### `Physical modeling` | |||
### `Polyphonic` | |||
*Deprecated aliases: `Poly`* | |||
### `Quad` | |||
The core functionality times four. If multiple channels are a requirement for the module to exist (ring modulator, mixer, etc), it is not a Quad module. | |||
### `Quantizer` | |||
### `Random` | |||
### `Recording` | |||
### `Reverb` | |||
### `Ring modulator` | |||
### `Sample and hold` | |||
*Deprecated aliases: `S&H`, `Sample & hold`* | |||
### `Sampler` | |||
### `Sequencer` | |||
### `Slew limiter` | |||
### `Speech` | |||
### `Switch` | |||
### `Synth voice` | |||
A synth voice must have, at the minimum, a built-in oscillator and envelope. | |||
### `Tuner` | |||
### `Utility` | |||
Serves only extremely basic functions, like inverting, max, min, multiplying by 2, etc. | |||
### `Visual` | |||
### `Vocoder` | |||
### `Voltage-controlled amplifier` | |||
*Deprecated aliases: `Amplifier`, `VCA`, `Voltage controlled amplifier`* | |||
### `Waveshaper` | |||
## `.modules[].description` | |||
*String. Optional.* | |||
A one-line summary of the module's purpose. | |||
Displayed in the Module Browser tooltip. | |||
## `modules[].manualUrl` | |||
*String. Optional.* | |||
The manual website of the module. | |||
If omitted, the plugin's manual is used. | |||
## `modules[].modularGridUrl` | |||
*String. Optional.* | |||
If this module has the [Hardware clone](Manifest#hardware-clone) tag, this is the URL to the [ModularGrid](https://www.modulargrid.net/) page for that module. | |||
Example: `"https://www.modulargrid.net/e/mutable-instruments-clouds"` |
@@ -0,0 +1,10 @@ | |||
```bash | |||
perl -i -pe 's/(\w+)_PARAM\b/PARAM_$1/g' src/* | |||
perl -i -pe 's/(\w+)_BUTTON\b/BUTTON_$1/g' src/* | |||
perl -i -pe 's/(\w+)_SWITCH\b/SWITCH_$1/g' src/* | |||
perl -i -pe 's/(\w+)_INPUT\b/INPUT_$1/g' src/* | |||
perl -i -pe 's/(\w+)_OUTPUT\b/OUTPUT_$1/g' src/* | |||
perl -i -pe 's/(\w+)_LIGHT\b/LIGHT_$1/g' src/* | |||
``` | |||
perl -i -pe 's/app::ABI/ABI/g' src/**/* include/**/* |
@@ -14,9 +14,9 @@ This contains the Rack API headers and build system for compiling your plugin. | |||
## Creating the template plugin | |||
The `helper.py` script included in the Rack SDK is an easy way to create a plugin template. | |||
You can run it with no arguments to display documentation. | |||
You can run it with no arguments to show documentation. | |||
Decide on a [slug](Metadata.html#slug) for your plugin. | |||
Decide on a [slug](Manifest.html#slug) for your plugin. | |||
We will use `MyPlugin` for this tutorial. | |||
Run | |||
```bash | |||
@@ -40,7 +40,7 @@ Manifest written to MyPlugin/plugin.json | |||
Created template plugin in MyPlugin/ | |||
Initialized empty Git repository in /home/VCV/MyPlugin/.git/ | |||
``` | |||
You can change this metadata later by editing `plugin.json`. (See [Metadata](Metadata.html)). | |||
You can change this manifest later by editing `plugin.json`. (See [Manifest](Manifest.html)). | |||
To test your build system, you may run `RACK_DIR=<Rack SDK folder> make` in the plugin directory. | |||
If it succeeds, an "empty" plugin will be built containing no modules. | |||
@@ -138,5 +138,5 @@ Eventually you may want to release your hard work. | |||
See [Plugin Licensing](PluginLicensing.html) for information about following Rack's license, particularly if developing a commercial plugin. | |||
It is recommended to add a `LICENSE.txt` file to your plugin's root folder that specifies your preferred license (whether open-source or proprietary). | |||
Review your `plugin.json` [metadata](Metadata.html) file for correctness, spelling, and capitalization. | |||
Review your `plugin.json` [manifest](Manifest.html) file for correctness, spelling, and capitalization. | |||
Finally, submit your plugin to the [VCV Library](https://github.com/VCVRack/library#adding-your-plugin-to-the-vcv-library-for-open-source-plugins) to allow users to easily download your plugin from their VCV account. |
@@ -13,6 +13,7 @@ Your PR will be accepted if it is a net positive benefit to readers. | |||
Install [Sphinx](http://www.sphinx-doc.org/en/stable/) 1.8.1. Newer versions do not generate formulas and image tags properly. | |||
pip install sphinx==1.8.1 | |||
pip install sphinx_rtd_theme | |||
Install [recommonmark](https://github.com/rtfd/recommonmark) 0.4.0. | |||