# trowaSoft-VCV
trowaSoft Modules plugin for [VCV Rack](https://github.com/VCVRack/Rack) v0.5.x and v0.6.x. 
Current pack includes [trigSeq & trigSeq64](#trigseq--trigseq64), [voltSeq](#voltseq), [multiWave](#multiwave) (new 2018-06-24), [multiScope](#multiscope), and [cvOSCcv](#cvosccv).
For more information about these modules, please visit:
http://www.geekasaurusrex.net/page/trowaSoft-Sequencer-Modules-for-VCV-Rack.aspx.
For more information about Rack, please visit:
https://vcvrack.com/.
If you like the modules and wish to donate, you may do so [here](https://paypal.me/j4s0n). Any donation is much appreciated! Also note though that:
+ $5 USD buys the 'dev team' a Jack & Diet (programming fuel) at a neighborhood bar.
+ $10 USD buys the designer a bottle of wine.
## Binaries/Builds
Any builds that are currently available are at [Github Releases page](https://github.com/j4s0n-c/trowaSoft-VCV/releases) and [geeksaurusrex](http://www.geekasaurusrex.net/page/trowaSoft-Sequencer-Modules-for-VCV-Rack.aspx). 
Recent builds should also be available in the [VCV plugin manager](https://vcvrack.com/plugins.html).
**VCV Rack v0.6.x**:
**2018-06-24**: The latest version is [v0.6.3](https://github.com/j4s0n-c/trowaSoft-VCV/releases/tag/v0.6.3) (for Rack v0.6.1).
**VCV Rack v0.5.x**:
2018-02-17: The last version is [v0.5.5.2](https://github.com/j4s0n-c/trowaSoft-VCV/releases/tag/v0.5.5.2). No more versions for Rack 0.5.x will be developed.
To build for your platform, please visit the [VCV rack documentation](https://github.com/VCVRack/Rack#setting-up-your-development-environment).
## Sequencers
Currently there are three (3) sequencer modules.
### trigSeq & trigSeq64
  
These are basic boolean on/off pad step sequencers (0V or 10V), based off the [Fundamentals SEQ3 sequencer](https://github.com/VCVRack/Fundamental).
+ **trigSeq** is 16-step; **trigSeq64** is 64-step.
+ Now 64 patterns. ~~16 patterns.~~
+ 16 channels (outputs).
+ Output modes: **TRIG** (trigger), **RTRG** (retrigger), **GATE** (continuous) (0 or 10V).
+ Inputs: Pattern, BPM, (step) Length, Clock, Reset.
+ Copy & Paste of channel or entire pattern.
+ Open Sound Control (OSC) interface (as of v.0.5.5.1). [more info](https://github.com/j4s0n-c/trowaSoft-VCV/wiki/Open-Sound-Control-(OSC)-Interface)
+ Advanced Randomization options (as of v.0.5.5.2) for all patterns, current edit pattern, or only the displayed channel. Chose from 'normal random' or 'structured' random patterns.
+ Hold mouse down and set multiple pads by dragging.
### voltSeq
  
**voltSeq** is a variable voltage output step sequencer (-10V to +10V), based off the [Fundamentals SEQ3 sequencer](https://github.com/VCVRack/Fundamental).
+ **voltSeq** is 16-step.
+ Now 64 patterns. ~~16 patterns.~~
+ 16 channels (outputs).
+ Output modes:
    + **VOLT** - Voltage (-10V to +10V): Output whatever voltage you want.
    + **NOTE** - Midi Note (-5V to +5V) ~~(-4V to +6V)~~: Output notes (12 notes per 1 V; 10 octaves). [Base pitch (0V)](https://github.com/j4s0n-c/trowaSoft-VCV/issues/9) is now C4 (as of v0.5.5.2). Range is C-1 to C9 as of v0.6.0.
    + **PATT** - Pattern (-10V to +10V): To control the currently playing Pattern (or Length) on another **trigSeq** or **voltSeq**. (Now 1 to 64 in range).  
+ Inputs: Pattern, BPM, (step) Length, Clock, Reset.
+ Copy & Paste of channel or entire pattern.
+ Open Sound Control (OSC) interface (as of v.0.5.5.1). [more info](https://github.com/j4s0n-c/trowaSoft-VCV/wiki/Open-Sound-Control-(OSC)-Interface)
+ Advanced Randomization options (as of v.0.5.5.2) for all patterns, current edit pattern, or only the displayed channel. Chose from 'normal random' or 'structured' random patterns.
+ Shift Values (as of v0.5.5.2): +/- 1 Volt or 1 Octave or 1 Pattern for all patterns, current edit pattern, or only the displayed channel.
## multiWave
**multiWave** is a digital oscillator module with three (3) oscillators/clocks, each with two (2) configurable wave channel outputs. This module has been made to complement multiScope
and is new in v0.6.3.
+ Screen User Controls:
    + Click on a value to edit it directly (a text box should appear and allow you to type the value).
    + **Tab** or **Tab-Shift** will iterate through the editable text boxes. 
    + Valid for all displayed values except for WAVE and AUX (AUX is only an editable textbox for pulse width when SQR/rectangle wave is selected).
+ CV Inputs & User Controls per Oscillator:
    + **SYNC** - (Right hand side) Reset/sync the oscillator (to phase 0). Currently this is CV only (no UI control).
    + **AMPL** - Amplitude (-10V to +10V).
    + **FREQ** - Frequency (1V/Oct) for the oscillator clock.  
    The Frequency knob rotates 360°. Hold down the **Shift** key for coarser control or the **Control** key for finer control while dragging up/down.
    + **PHASE** - Phase Shift (-10V to +10V).
    + **OFFSET** - Offset (-10V to +10V).
    + CV Inputs & User Controls per Channel Output:
        + **WAV** - Waveform Type (-5V to +5V): SIN, TRI, SAW, SQR.
        + **AUX** - Aux (-5V to +5V). If the CV input is active then, the knob value is ignored.  
        Currently only SAW and SQR have functions: 
		    + SAW: Slope (pos |/| or neg |\\|). 0 or positive CV for positive slope.
			+ SQR: Pulse Width.
			+ SIN and TRI adjustments will be added later when/if we think of another parameter for these waveforms.  
        + **PHASE** - Phase Shift (-10V to +10V). Value is relative to the oscillator clock.
        + **MOD** - Amplitude modulation (-10V to +10V). Knob controls the mix between the raw signal and the modded signal.
        + **\*** - Button for modulation type (Digital or Ring). Currently this is UI only (no CV input).
+ CV Outputs per Oscillator:
    + **SYNC** - Triggers whenever the period restarts.
    + CV Outputs per Channel Output:
        + **X<n> or Y<n>** - RAW waveform without amplitude modulation (**MOD**).
        + **MOD** - The modulated waveform (based on the MOD knob and the incoming MOD signal input).
## multiScope
**multiScope** is a visual effects scope, with lissajous mode, that allows three (3) waveforms to be drawn on the same screen/canvas. (code based on [JW Modules FullScope](https://github.com/jeremywen) and [Fundamental Scope](https://github.com/VCVRack/Fundamental))
**WARNING**: New version seems to crash on Mac OS. If anyone more adept at OSX programming wants to figure out why, it would be **MUCH** appreciated. Otherwise, whenever there is time we will try to figure it out, but the multiScope module has been degraded to low priority.
+ CV Inputs per Channel:
    + **X** - X-value (horizontal component).
    + **Y** - Y-value (vertical component).
    + **C** - Color/hue (0V to +5V).
    + **A** - Alpha channel (0V to +5V).
    + **BLANK** - Blank ON or OFF. By default, Blank is off. ON is any input <=0 (really < 0.1V), otherwise it will be OFF.  
    You can use a **trigSeq** (in **CONT** mode, synchronized with a **voltSeq**) to control / hide lines that you do not wish to be shown.
	+ **FC** - Fill Color hue (0V to +5V)
    + **FA** - Fill alpha channel (0V to +5V).
    + **R** - Rotation (-10V to +10V). Will either be a rotational rate or if the **ABS** button is on, it will be the absolute angular position.
    + **T** - Time.
    + **TH** - Line Thickness.
  
+ User Controls per Channel:
    + **X** - Offset (OFF) & Scale (SCL) knobs.
    + **Y** - Offset (OFF) & Scale (SCL) knobs.
    + **LNK** - (Toggle) Link the X-scale and Y-scale knobs together so they will change together (have the same value).
    + **C** - Color knob. If an input is active on the Color port, this is ignored. Highest setting will yield White now.
    + **A** - Alpha channel knob. If an input is active on the Alpha port, this is ignored.
    + **FC** - Fill Color knob. If an input is active on the Fill Color port, this is ignored. Highest setting yield give White now.
    + **Fill Color** - (Toggle) Fill on/off.
    + **FA** - Fill alpha channel knob. If an input is active on the Alpha port, this is ignored.
    + _Rotation Controls_:
        + **R** - Rotation knob. If an input is active on the Rotation port, this is ignored.
        + **ABS** - (Toggle) Turning ABS on will make the rotation inputs control the absolute angular position instead of a rate.		
    + **T** - Time adjustment knob. Will be used along with the Time input port.
    + **TH** - Line Thickness. If an input is active on the Thickness port, this is ignored.
	+ **EFFECT** - Effect knob.
    + **X*Y** - (Toggle) Toggle lissajous mode on / off (default is on).
+ User Controls for entire module:
    + **INFO** - (Toggle) Toggle input parameter information on / off (default is on). Located on the right-hand-side (RHS) bar.
	+ **BG COLOR** - (Toggle) Toggle on-screen Background Color picker on / off (default is on). Located on the right-hand-side (RHS) bar.
	+ **Background Color Picker** - Displayed on screen. Hue-Saturation-Light (HSL) sliders to pick the background color.
## cvOSCcv
  
**cvOSCcv** is a simple, generic Open Sound Control (OSC) module for outputting Rack CVs to OSC and reading in simple OSC messages into Rack CVs. This module is new in version 0.6.0.
+ **CV Inputs** - CV => OSC (8 Channels), each channel:
    + **TRG** - If active, then OSC messages will output the **VAL** CV input when triggered.
    + **VAL** - The value that will output over OSC. Currently sent as a float.
      If there is no trigger present, the module will output whenever **VAL** changes at least 0.05 up to 100 Hz.
+ **CV Outputs** - OSC => CV (8 channels), each channel:
    + **TRG** - (0-10V) Triggers whenever an OSC message is received.
	+ **VAL** - (Gate) Outputs the last OSC value received.
+ **User Controls**:
	+ **CONFIG** - (Toggle) Button to toggle the configuration view. When an OSC connection is active, a blue light will appear on the button.
	+ **OSC IP Address** - The IP address of the OSC client/server.  Default is `127.0.0.1`.
	+ **Out Port** - Port for sending messages. 
	+ **In Port** - Port for receiving messages. Currently, trowaSoft modules can NOT share the same ports.
	+ **Namespace** - The OSC namespace. Default is `trowacv`.
	+ **Auto Con** - Automatically reconnect on load from save. The connection will be restore if the connection was active (in the save file) and this is checked.
    + Per Channel:  
        + **Address** - Endpoint address. Default is `/ch/{channel #}`.
		+ **ADV** - (as of v0.6.2) Advanced settings for simple value conversions. Specify simple OSC data types (float, int, bool) and the CV and OSC ranges.
	NOTE: To save Channel Address changes after a connection is active, simply hide the configuration screen again.