@@ -11,8 +11,8 @@ Before writing a single line of code, most features and bug fixes require | |||
Instead, there are many other areas where contributions are much appreciated. | |||
- Dependencies of Rack. Especially [nanovg](https://github.com/memononen/nanovg)'s performance, [rtaudio](https://github.com/thestk/rtaudio)/[rtmidi](https://github.com/thestk/rtmidi)'s stability and compatibility, and maybe even touch support in [GLFW](https://github.com/glfw/glfw). You would be helping many more projects than just Rack. | |||
- your own or others' Rack [plugins](PluginDevelopmentTutorial.md) | |||
- Maintaining the VCV community plugin database. Volunteer at https://github.com/VCVRack/community/issues/248. | |||
- Your own Rack [plugin](PluginDevelopmentTutorial.md) | |||
- Maintaining the Rack plugin ecosystem by [curating](https://github.com/VCVRack/community/issues/352), [updating](https://github.com/VCVRack/community/issues/269), and [reviewing](https://github.com/VCVRack/community/issues/354) plugins | |||
- Edits to the [VCV Rack manual](https://github.com/VCVRack/manual). | |||
I will consider your contribution to Rack if you first open a [GitHub issue](https://github.com/VCVRack/Rack/issues) with a detailed design proposal, which may create an open discussion before the change is implemented. | |||
@@ -1,19 +1,19 @@ | |||
# Core | |||
*Core* modules are how Rack interfaces with your computer's audio drivers, external audio interface devices, physical and virtual MIDI devices, and (through *Bridge*) other DAWs. | |||
*Core* modules are a part of the overall Rack program, and thus do not appear in the [Plugin Manager](https://vcvrack.com/plugins.html). | |||
## Modules | |||
1. [Audio](Core.md#audio) | |||
2. [MIDI Interfaces](Core.md#midi-Interfaces) | |||
- a. [MIDI-1](Core.md#midi-1) | |||
- b. [MIDI-4](Core.md#midi-4) | |||
- c. [MIDI-CC](Core.md#midi-cc) | |||
- d. [MIDI-Trig](Core.md#midi-trig) | |||
3. [Blank](Core.md#blank) | |||
4. [Notes](Core.md#notes) | |||
The *Core* plugin (built into Rack itself) includes utilities and interfaces for interfacing between virtual and hardware realms. | |||
#### Modules | |||
- [Audio](Core.md#audio) | |||
- [MIDI Interfaces](Core.md#midi-interfaces) | |||
- [MIDI-1](Core.md#midi-1) | |||
- [MIDI-4](Core.md#midi-4) | |||
- [MIDI-CC](Core.md#midi-cc) | |||
- [MIDI-Trig](Core.md#midi-trig) | |||
- [Blank](Core.md#blank) | |||
- [Notes](Core.md#notes) | |||
### Audio | |||
 | |||
@@ -42,7 +42,7 @@ A good balance can be found by increasing the block size until no audio "glitche | |||
Note: Using multiple Audio modules is experimental and may crash Rack or render unstable audio. | |||
Most DAWs avoid this feature entirely by restricting audio to a single input and a single output device for stability reasons, but if using multiple audio devices in Rack works with your configuration, more power to you! | |||
--- | |||
### MIDI Interfaces | |||
Each MIDI interface module (described below) supports the following drivers. | |||
@@ -62,7 +62,7 @@ The *computer keyboard* MIDI driver generates MIDI notes when keys are presses w | |||
Using two rows of keys, the virtual MIDI keyboard spans approximately 2½ octaves and can be shifted down and up with the <code>`</code> and `1` keys. | |||
Currently only the QWERTY (US) layout is supported, but other keyboard layouts may function similarly. | |||
--- | |||
#### MIDI-1 | |||
 | |||
@@ -73,7 +73,7 @@ The **CV** output generates a 1V/oct pitch signal of the last held MIDI note. | |||
**CLK1** and **CLK2** generate triggers specified by the division set by right-clicking on the panel and selecting the *CLK 1 rate* or *CLK 2 rate*. | |||
**STRT**, **STOP**, and **CONT** generate triggers when the MIDI hardware or DAW host (for VCV Bridge) sends a start, stop, or continue event. | |||
--- | |||
#### MIDI-4 | |||
 | |||
@@ -87,7 +87,7 @@ Right-click the panel to select the polyphony mode to specify the behavior in ma | |||
Remember that MIDI interfaces can be used simultaneously with the same driver, for example if global controls like pitch and mod wheel are needed along with polyphonic controls. | |||
--- | |||
#### MIDI-CC | |||
 | |||
@@ -99,7 +99,7 @@ Each output can be assigned a particular CC number by clicking on the digital di | |||
A **LRN** indicator is displayed to represent that the port is in "learn" mode. | |||
Either type a number or move a controller to set the CC number. | |||
--- | |||
#### MIDI-Trig | |||
 | |||
@@ -109,15 +109,14 @@ For MIDI sequencers and drum machines that send immediate note ON/OFF messages i | |||
To generate a CV signal corresponding to the velocity of the note instead of 10V, right-click on the panel and enable *Velocity* mode. | |||
This is useful for setting the amplitude of percussive sounds for MIDI controllers with velocity-capable pads, for example. | |||
--- | |||
--- | |||
### Blank | |||
 | |||
Useful for adding space between modules in your rack. | |||
You can resize the panel by dragging the edges horizontally, with a minimum size of 3HP. | |||
--- | |||
### Notes | |||
 | |||
@@ -5,16 +5,24 @@ One of its many applications is to generate and process audio from virtual/digit | |||
There are many online resources and books for learning DSP. | |||
- [Digital signal processing Wikipedia](https://en.wikipedia.org/wiki/Digital_signal_processing) | |||
- [DSPRelated.com](https://www.dsprelated.com/) | |||
- [Signal Processing Stack Exchange](https://dsp.stackexchange.com/) | |||
- [Digital Signal Processing MIT OpenCourseWare](https://ocw.mit.edu/resources/res-6-008-digital-signal-processing-spring-2011/) | |||
- [The Scientist and Engineer's Guide to Digital Signal Processing](http://dspguide.com/) by Steven W. Smith | |||
- [The Art of VA Filter Design](http://www.native-instruments.com/fileadmin/ni_media/downloads/pdf/VAFilterDesign_2.0.0a.pdf) by Vadim Zavalishin (PDF) | |||
Below are my mindless ramblings of various topics with a focus on DSP for modular synthesizers. | |||
Eventually this will become organized, but it is currently a *work-in-progress*. | |||
If anything here is inaccurate, you can [edit it yourself](https://github.com/VCVRack/manual) or [open an issue](https://github.com/VCVRack/manual/issues) in the manual's source repository. | |||
- [Digital signal processing Wikipedia](https://en.wikipedia.org/wiki/Digital_signal_processing): An neutral overview of the entire field. | |||
- [Julius O. Smith III Online Books](https://ccrma.stanford.edu/~jos/) ([Index](https://ccrma.stanford.edu/~jos/GlobalJOSIndex.html)): Thousands of topics on audio DSP and relevant mathematics, neatly organized into easy-to-digest but sufficiently deep pages and examples. | |||
- [Mathematics of the Discrete Fourier Transform (DFT)](https://ccrma.stanford.edu/~jos/mdft/) | |||
- [Introduction to Digital Filters](https://ccrma.stanford.edu/~jos/filters/) | |||
- [Physical Audio Signal Processing](https://ccrma.stanford.edu/~jos/pasp/) | |||
- [Spectral Audio Signal Processing](https://ccrma.stanford.edu/~jos/sasp/) | |||
- [Signal Processing Stack Exchange](https://dsp.stackexchange.com/): Questions and answers by thousands of DSP amateurs and professionals. | |||
- [DSPRelated.com](https://www.dsprelated.com/): Articles, news, and blogs of both fundamental and modern DSP topics. | |||
- [The Scientist and Engineer's Guide to Digital Signal Processing](http://dspguide.com/) by Steven W. Smith: Free online book about general DSP topics. | |||
- [Digital Signal Processing MIT OpenCourseWare](https://ocw.mit.edu/resources/res-6-008-digital-signal-processing-spring-2011/): Video lectures and notes covering the basics of DSP. | |||
- [The Art of VA Filter Design](http://www.native-instruments.com/fileadmin/ni_media/downloads/pdf/VAFilterDesign_2.0.0a.pdf) (PDF) by Vadim Zavalishin: Huge collection of deep topics in digital/analog filter design and analog filter modeling. | |||
- [KVR Audio Forum - DSP and Plug-in Development](http://www.kvraudio.com/forum/viewforum.php?f=33): Music DSP and software development discussions. | |||
The following topics are targeted toward modular synthesizer signal processing, in which designing small synthesizer components is the main objective. | |||
This document is currently a *work-in-progress*. | |||
Remember that if anything here is inaccurate, you can [edit it yourself](https://github.com/VCVRack/manual) or [open an issue](https://github.com/VCVRack/manual/issues) in the manual's source repository. | |||
Image credits are from Wikipedia. | |||
### Signals | |||
@@ -182,11 +190,10 @@ $$ y(t) = (h \ast x)(t) = \int_{-\infty}^\infty h(\tau) x(t - \tau) d\tau $$ | |||
where $h(t)$ is the *impulse response* of our filter. | |||
The signal $h(t)$ is the result of processing a [delta function](https://en.wikipedia.org/wiki/Dirac_delta_function) through our filter, since $\delta(t)$ is the "identity" function of convolution, i.e. $h(t) = (h \ast \delta)(t)$. | |||
Clapping your hands or popping a balloon (both good approximations of $\delta$) in a large cathedral will generate a very sophisticated impulse response, which can be recorded and processed in a FIR filter algorithm to reproduce arbitrary sounds as if they were performed in the cathedral. | |||
Clapping your hands or popping a balloon (both good approximations of $\delta$) in a large cathedral will generate a very sophisticated impulse response, which can be recorded as $h(t)$ and processed in a FIR filter algorithm to reproduce arbitrary sounds as if they were performed in the cathedral. | |||
Repeating this process in the digital realm gives us the discrete convolution. | |||
$$ y_k = \sum_{n=-\infty}^\infty h_n x_{k-n} $$ | |||
Note that $h_n$ is both non-causal (nonzero for negative $t$ or $n$) and infinitely long, which is addressed later. | |||
#### Brickwall filter | |||
@@ -205,6 +212,13 @@ where $\operatorname{sinc}(x) = \sin(\pi x) / (\pi x)$ is the [normalized sinc f | |||
Although the impulse response is infinitely long, restricting it to a finite range $[-T, T]$ and shifting it forward by $T$ produces a finite causal impulse response that can be solved by a fast FIR algorithm to produce a close approximation of an ideal brickwall filter. | |||
### Windows | |||
The impulse response $h_n$ is defined for all integers $n$, so it is both non-causal (requires future knowledge of $x(t)$ to compute $y(t)$) and infinitely long. | |||
*TODO* | |||
### To-do | |||
- digital filters | |||
@@ -4,8 +4,6 @@ The VCV Rack manual is under active development. | |||
Edit this manual at https://github.com/VCVRack/manual. | |||
[PDF download](VCV-Rack-manual.pdf) | |||
### Communities | |||