# sunny A control voltage and gate processor for Eurorack and other 1V/Oct systems. ## Language The `sunny` control language is based on the concept of channels. Each channel consists of one CV (analog) output and one gate (digital) output. Each track has an associated octave value, by default 4, in which it will play note values. ### Example ```text channel 0 bpm 120 legato on octave 2 play c play d play e channel 1 { set nF5; trigger } off; wait beat play c play d play e channel 1 { set nG5; trigger } off; wait beat play c play d channel 1 { set nF5; trigger } play e channel 1 { set nG5; trigger } off; wait beat play b off; wait beat ``` ### Values - Note values, either **simple** like `C`, `A#`, and `Db`, **relative** like `C=` (C in this octave), `D+` (D in the next octave), or `A-` (A one octave down), or **absolute** like like `C2`, `Ab4`, or `F#0`. Where a note value is needed, a voltage value (as below) can be substituted, prefixed with a `v`, like `v12c`. - Voltage values, which can be expressed in volts (like `2v`), millivolts (like `2330mv`), cents (like `220c`), semitones (like `4s`), or octaves (like `1o`), and which can be **absolute** or **relative** (like `+2c`). Where a voltage value is needed, a note value (as above) can be substituted, prefixed with an `n`, like `n2C#`. - Conf(iguration) values, which are used to set up channel parameters, are either integers or real numbers (as context dictates) which can be **absolute** or **relative**, and are sometimes **optional**, allowing the values "off" and "none". - Boolean values, which can be `true` (or `on`) or `false` (or `off`). - Time values, which are either `s`econds or `u` (milliseconds), or the special value `beat` which refers to one beat based on the BPM of the channel. ### Building Blocks - `set ` (abbr. `s`) sets the CV value of the channel to a given value. This value can be given in `c`ents, `s`emitones (which is the default), `o`ctaves, or - `play ` (abbr. `n`) sets the CV value to a given value and turns on and off the digital output for one beat minus the trigger amount (or simply leaves it on if legato is configured). - `wait