Browse Source

Add jq to build deps. Reorganize community list.

pull/26/head
Andrew Belt 6 years ago
parent
commit
d07d3ae317
6 changed files with 75 additions and 47 deletions
  1. +1
    -1
      About.md
  2. +15
    -7
      Building.md
  3. +8
    -8
      Communities.md
  4. +10
    -8
      FAQ.md
  5. +41
    -23
      Migrate1.md
  6. BIN
      favicon.png

+ 1
- 1
About.md View File

@@ -4,7 +4,7 @@ VCV was founded by Andrew Belt in 2016 and is based in Tennessee, USA.
Its flagship product VCV Rack was released on September 10, 2017 at [Knobcon](https://knobcon.com/) after two years of development.
It was based on an unreleased C++ modular audio engine written by Andrew in 2012.

VCV collaborates with [Grayscale](http://grayscale.info/) to design the [Fundamental](https://vcvrack.com/Fundamental.html) plugin and commercial VCV modules.
VCV collaborates with [Grayscale](http://grayscale.info/) to design the [Fundamental](https://vcvrack.com/Fundamental.html) plugin, commercial VCV modules, and the UI design of Rack.

## Mission



+ 15
- 7
Building.md View File

@@ -11,26 +11,32 @@ However, you need proper tools to build Rack and these dependencies.
Install [Xcode](https://developer.apple.com/xcode/).
Using [Homebrew](https://brew.sh/), install the build dependencies.
```
brew install git wget cmake autoconf automake libtool
brew install git wget cmake autoconf automake libtool jq
```

### Windows

Install [MSYS2](http://www.msys2.org/) and launch the MinGW 64-bit shell (not the default MSYS shell).
If you have an anti-virus program running, disable it.

Install [MSYS2](http://www.msys2.org/) and launch the MinGW 64-bit shell from the Start menu, *not the default MSYS shell*.
```
pacman -Syu
```
Then restart the shell.
```
pacman -S git wget make tar unzip zip mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake autoconf automake mingw-w64-x86_64-libtool
pacman -Su git wget make tar unzip zip mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake autoconf automake mingw-w64-x86_64-libtool mingw-w64-x86_64-jq
```

### Linux

On Ubuntu 16.04:
```
sudo apt install git curl cmake libx11-dev libglu1-mesa-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev zlib1g-dev libasound2-dev libgtk2.0-dev libjack-jackd2-dev
sudo apt install git curl cmake libx11-dev libglu1-mesa-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev zlib1g-dev libasound2-dev libgtk2.0-dev libjack-jackd2-dev jq
```

On Arch Linux:
```
pacman -S git wget gcc make cmake tar unzip zip curl
pacman -S git wget gcc make cmake tar unzip zip curl jq
```

## Building Rack
@@ -38,18 +44,20 @@ pacman -S git wget gcc make cmake tar unzip zip curl
*If the build fails for you, please report the issue with a detailed error message to help the portability of Rack.*

Clone this repository with `git clone https://github.com/VCVRack/Rack.git` and `cd Rack`.
Make sure there are no spaces in your absolute path, as this breaks the Makefile-based build system.
Make sure there are no spaces in your absolute path, since this breaks the Makefile-based build system.

Clone submodules.

git submodule update --init --recursive

Build dependencies locally.
You may add `-j$(nproc)` to your make commands to parallelize builds across all CPU cores.
You may add `-j4` (or your number of logical cores) to your `make` commands to parallelize builds.
This may take 15-60 minutes.

make dep

Build Rack.
This may take 1-5 minutes.

make



+ 8
- 8
Communities.md View File

@@ -1,23 +1,23 @@

# Communities

- [VCVRack.com](https://vcvrack.com/)
- [Forum](https://community.vcvrack.com/)
- [Website](https://vcvrack.com/)
- [Community forum](https://community.vcvrack.com/)
- [Facebook page](https://www.facebook.com/vcvrack/)
- [Twitter](https://twitter.com/vcvrack)
- [Github issue tracker](https://github.com/VCVRack/Rack/issues)
- [Youtube](https://www.youtube.com/c/VCVRack)
- [Instagram](https://www.instagram.com/vcvrack/)
- [Facebook user group](https://www.facebook.com/groups/vcvrack/)
- [Facebook developer group](https://www.facebook.com/groups/2035785263299933/)
- [Facebook French user group](https://www.facebook.com/groups/2069785583250645/)
- [Facebook Italian user group](https://www.facebook.com/groups/vcvitalia/)
- [Switched On Rack blog](http://www.switchedonrack.com/)
- [Youtube](https://www.youtube.com/c/VCVRack)
- [Instagram](https://www.instagram.com/vcvrack/)
- [Discord](https://discord.gg/wxa89Mh)
- [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)
- [Patchstorage](https://patchstorage.com/platform/vcv-rack/)
- [Switched On Rack collaboration albums](https://switchedonrack.bandcamp.com/)
- [Reddit](https://www.reddit.com/r/vcvrack/)
- [IRC](http://webchat.freenode.net?channels=%23VCVRack)

+ 10
- 8
FAQ.md View File

@@ -80,11 +80,13 @@ When running Rack in development mode, it is your current working directory inst

## Will Rack be ported to iOS or Android?

It is not planned. Many issues would need to be addressed.
- Tablet and phone users don't normally use mice, so a touch driver would need to be written. If GLFW is still used, [touch support](https://github.com/glfw/glfw/issues/42) would need to be added to the library.
- There is no user-managed filesystem on iOS, and forcing users to mess with the filesystem is bad UX on Android, so plugin folders and patch files would need to be managed entirely by Rack itself.
- There is no OpenGL on mobile devices, so the OpenGL ES driver would need to be used and tested.
- RtAudio and RtMidi don't have iOS Core Audio/MIDI or Android HAL/OpenSL ES backends, so they would need to be added and tested.
- Apple does not allow apps distributed through the store to download and execute code, so either all plugins would need to be included in the distributable, or it could only be distributed on jailbroken iOS devices, which is an absurd user requirement.
- Such a port would be very 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.
It is not planned. There are many issues with such a project.
- Technical:
- Tablet and phone users don't normally use mice, so a touch driver would need to be written. If GLFW is still used, [touch support](https://github.com/glfw/glfw/issues/42) would need to be added to the library.
- There is no user-managed filesystem on iOS, and forcing users to mess with the filesystem is bad UX on Android, so plugin folders and patch files would need to be managed entirely by Rack itself.
- RtAudio and RtMidi don't have iOS Core Audio/MIDI or Android HAL/OpenSL ES backends, so they would need to be added and tested.
- Apple does not allow apps distributed through the store to download and execute code, so either all plugins would need to be included in the distributable, or it could only be distributed on jailbroken iOS devices, which is an absurd user requirement.
- 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 or Google are typically not obligated to continue serving an app and may remove it at will or change policies that can disrupt VCV's business model. This would place VCV's risk in a small number of baskets.

+ 41
- 23
Migrate1.md View File

@@ -1,6 +1,6 @@
# Migrating 0.6 plugins to Rack v1

***This document is a draft. It is not recommended to migrate plugins at this time. If you begin now, you will likely need to follow this guide again when the Rack v1 API is stabilized.***
**This document is a draft. It is not recommended to migrate plugins at this time. If you begin now, you will likely need to follow this guide again when the Rack v1 API is stabilized.**

## The easy way: using the `rack0.hpp` compatibility header

@@ -21,17 +21,23 @@ Model *modelMyModule = Model::create<MyModule, MyModuleWidget>("MyModule");

Make the following string replacements (requires Perl).
```
perl -pi -e "s/Model::create/createModel/g" src/*.cpp
perl -pi -e "s/ParamWidget::create/createParam/g" src/*.cpp
perl -pi -e "s/ModuleLightWidget::create/createLight/g" src/*.cpp
perl -pi -e "s/Port::create/createPort/g" src/*.cpp
perl -pi -e "s/Port::OUTPUT/PortWidget::OUTPUT/g" src/*.cpp
perl -pi -e "s/Port::INPUT/PortWidget::INPUT/g" src/*.cpp
perl -pi -e "s/Widget::create/createWidget/g" src/*.cpp
perl -pi -e "s/MenuLabel::create/createMenuLabel/g" src/*.cpp
perl -pi -e "s/MenuItem::create/createMenuItem/g" src/*.cpp
perl -pi -e "s/toJson/dataToJson/g" src/*.cpp
perl -pi -e "s/fromJson/dataFromJson/g" src/*.cpp
# Rename `plugin` variable to avoid a name collision with the `plugin::` namespace
perl -pi -e "s/\bplugin\b/pluginInstance/g" src/*

# Change `X::create()` functions to `createX()`
perl -pi -e "s/Model::create/createModel/g" src/*
perl -pi -e "s/ParamWidget::create/createParam/g" src/*
perl -pi -e "s/ModuleLightWidget::create/createLight/g" src/*
perl -pi -e "s/Port::create/createPort/g" src/*
perl -pi -e "s/Port::OUTPUT/PortWidget::OUTPUT/g" src/*
perl -pi -e "s/Port::INPUT/PortWidget::INPUT/g" src/*
perl -pi -e "s/Widget::create/createWidget/g" src/*
perl -pi -e "s/MenuLabel::create/createMenuLabel/g" src/*
perl -pi -e "s/MenuItem::create/createMenuItem/g" src/*

# Change `to/fromJson()` to `dataTo/FromJson()`
perl -pi -e "s/toJson/dataToJson/g" src/*
perl -pi -e "s/fromJson/dataFromJson/g" src/*
```

If your plugin uses any of Rack's `dsp/*.hpp` headers, remove the `#include` statements since they are now automatically included.
@@ -47,16 +53,28 @@ First complete the above section using the compatibility header as a first step.
Once it is able to compile, change `#include "rack0.hpp"` back to `#include "rack.hpp"`

```
perl -pi -e "s/engineGetSampleRate/app()->engine->getSampleRate/g" src/*.cpp
perl -pi -e "s/engineGetSampleTime/app()->engine->getSampleTime/g" src/*.cpp
perl -pi -e "s/, PortWidget::INPUT//g" src/*.cpp
perl -pi -e "s/addInput\(createPort/addInput(createInput/g" src/*.cpp
perl -pi -e "s/, PortWidget::OUTPUT//g" src/*.cpp
perl -pi -e "s/addOutput\(createPort/addOutput(createOutput/g" src/*.cpp
perl -pi -e "s/randomUniform/random::uniform/g" src/*.cpp
perl -pi -e "s/randomNormal/random::normal/g" src/*.cpp
```
# Use `APP` macro for accessing global state
perl -pi -e "s/engineGetSampleRate/APP->engine->getSampleRate/g" src/*
perl -pi -e "s/engineGetSampleTime/APP->engine->getSampleTime/g" src/*
perl -pi -e "s/Font::load/APP->window->loadFont/g" src/*
perl -pi -e "s/Image::load/APP->window->loadImage/g" src/*
perl -pi -e "s/SVG::load/APP->window->loadSvg/g" src/*

Add the `dsp::` prefix.
# Use `createInput/Output()` functions instead of `createPort()`
perl -pi -e "s/, PortWidget::INPUT//g" src/*
perl -pi -e "s/addInput\(createPort/addInput(createInput/g" src/*
perl -pi -e "s/, PortWidget::OUTPUT//g" src/*
perl -pi -e "s/addOutput\(createPort/addOutput(createOutput/g" src/*

TODO
# Add namespaces to global functions
perl -pi -e "s/randomUniform/random::uniform/g" src/*
perl -pi -e "s/randomNormal/random::normal/g" src/*

# Change `void draw(NVGcontext *vg)` to `void draw(const DrawContext &ctx)`
perl -pi -e "s/draw\(NVGcontext \*vg\)/draw\(const DrawContext &ctx\)/g" src/*
perl -pi -e "s/\(vg/(ctx.vg/g" src/*
perl -pi -e "s/draw\(vg\)/draw\(ctx\)/g" src/*

# Add the `dsp::` namespace to dsp classes
# TODO
```

BIN
favicon.png View File

Before After
Width: 196  |  Height: 196  |  Size: 10KB Width: 196  |  Height: 196  |  Size: 5.6KB

Loading…
Cancel
Save