SunVox User Manual
PDF version of this page
Русская версия
2024.10.15

What is SunVox

SunVox is a small, fast and powerful modular synthesizer with pattern based sequencer (tracker). It is a tool for those people who like to compose music wherever they are, whenever they wish. On any device. On any system.

Official SunVox page

List of terms

  • Amplitude - value (position on the Y-axis) of one sample of the digital audio signal, or the maximum value of the sound wave displacement (relative to zero) during the period (if we are talking about oscillations of the generator);
  • Audio signal - representation of sound in the form of a graph (wave), process of changing the amplitude over time; in analog audio, amplitude is the voltage level; in digital audio, amplitude is a discrete value (usually a 32-bit floating point number);
    Audiosignal
  • Automation - automatic change of project parameters during playback; for example, the program can smoothly decrease/increase the filter frequency, or change the tempo; the source of the automation commands is either a pattern, or one of the special modules (MultiCtl, Pitch2Ctl, Sound2Ctl, Velocity2Ctl);
  • Balance - relative gain of the left and right channels; examples:
    • balance = -128: left channel volume = 100%; right channel volume = 0%;
    • balance = 0: left channel volume = 100%; right channel volume = 100%;
    • balance = 128: left channel volume = 0%; right channel volume = 100%.
  • BP, BPF - Band-pass filter;
  • BPM - number of Beats Per Minute;
  • DC offset, DC bias - vertical displacement of the center of the waveform relative to zero; DC offset for a fragment of length L = sum of sample amplitudes / L;
  • Envelope - graph of the dependence of some parameter (volume, frequency, panning, etc.) on time; in general, any sound wave is an envelope - the audio signal can be converted into control commands using the Sound2Ctl module;
  • HP, HPF - High-pass filter;
  • LFO - Low Frequency Oscillator which is used to modulate some synth/effect parameters (frequency, volume, panning, etc.);
  • LP, LPF - Low-pass filter;
  • Panning - the sound location in the left-right stereo space; if the sound source is mono, then this parameter is equivalent to Balance (described above).
  • Phase - position of a point in time on a waveform cycle (in Generator) or on a sample. Usually this means the initial phase, not the current position.
  • Sample:
    • one unit of sound data - represents an amplitude of the digital audio signal at a point in time;
    • portion of some sound in digital form: set of the values (amplitudes) described above; it can be very long (loop or the whole audio track) and very short (one note of some instrument).
  • Sample rate - number of samples per second.
  • Sustain - suspension point (until the Note OFF) on the envelope.
  • Tick - smallest time interval in SunVox pattern. 1 beat = 24 ticks.
  • TPL - number of Ticks Per Line.
  • Velocity - universal parameter combining such types of expression as the velocity (how fast or hard the keys are pressed) and the aftertouch (amount of force on held-down key). It can be changed at any time in the life cycle of a single note.

Minimum system requirements

Windows: 2000 (x86); 7 (x86_64).

Linux: any modern distribution + libsdl2 (you can install this library using apt-get or some other package manager).

macOS: 10.13 (x86_64).

Android: 4.1.

iOS: 12.

Windows CE: 3.0 (ARM).

Installing

Windows:

  1. Download SunVox for Windows (ZIP archive).
  2. Unpack this archive to the user folder (with read and write permissions; for example, your own folder on the external flash drive).
  3. You will see the new directory sunvox after unpacking - open it, and go to the sunvox/windows_x86 (for 32-bit system) or sunvox/windows_x86_64 (for 64-bit system) directory.
  4. You will find several executable files in the last folder:
    • sunvox - version with 32-bit audio engine;
    • sunvox_lofi_console - version with 16-bit audio engine for slow devices.

Linux:
  1. Download SunVox for Linux (ZIP archive).
  2. Unpack this archive to the home user directory (/home/username).
  3. You will see the new directory sunvox after unpacking - open it, and go to the sunvox/linux_X directory, where the X is the name of the architecture of your device.
  4. You will find several executable files in the last folder:
    • sunvox - version with 32-bit audio engine;
    • sunvox_lofi - version with 16-bit audio engine for slow devices.
  5. In case of some errors: open Terminal, go to the sunvox directory (use cd command), enter chmod a+x sunvox and then ./sunvox ; if still not working - copy all error messages from the Terminal and send it to nightradio@gmail.com.
Here is the instruction for Raspberry Pi users

macOS:

  1. Download SunVox for macOS (ZIP archive).
  2. You will see the new directory sunvox after unpacking; move it to some another user-created directory; don't use the Applications folder.
  3. Go to the sunvox/sunvox/macos directory.
  4. Read this important information for the macOS 10.12+ users
  5. Launch SunVox.

Android:
  1. get SunVox on Google Play;
  2. read this: Known solutions for some problems (Android) (license errors, working with files, etc.).

iOS:Windows CE:
  1. Download SunVox for Windows CE (ZIP archive).
  2. Unpack it to any folder on your computer.
  3. You will see the new directory sunvox after unpacking - open it, and go to the sunvox/wince directory.
  4. You will find the sunvox.cab file in the wince folder - just copy and install this file on the Windows CE device.
  5. Some old Windows CE devices has no GAPI pre-installed - this library is required for SunVox; you can try to get it here.

Comparison of different versions

SystemSupported architecturesSound engine formatMulti-touchGPIO
Linuxx86, x86_64, ARM (Maemo-based devices, Raspberry Pi, PocketCHIP, etc.), ARM64 (PINE64 etc.)32-bit floating-point / 4,12 fixed-pointYESYES
Windowsx86, x86_6432-bit floating-point / 4,12 fixed-pointYES
Windows CEARM4,12 fixed-point
macOSx86_6432-bit floating-point
AndroidARM, ARM64, x8632-bit floating-pointYESYES
iOSARM, ARM6432-bit floating-pointYES

As you can see, there are two sound engine formats in SunVox. Let's look at them in detail.

  • 32-bit floating-point - using high quality 32-bit (and 64-bit in some cases) floating-point computations for the sound synthesis. Math coprocessor (FPU) is required. Can be used on most of modern computers.
  • 4,12 fixed-point - using low quality fixed-point (4 integer bits and 12 fractional bits) computations. Specially for the slow computers without FPU. Such version of the engine will be much faster than the 32-bit one, but a small amount of the quantization noise will be present in sound. In this case the 32-bit WAV export may be with better sound quality due to the absence of the signal clipping.

In some cases the sound engine format will be selected automatically. But in some cases (in Linux, for example) you can choose it manually: there are several versions of SunVox with different engines.
You can always find the information about the current engine format in the SunVox Main Menu -> About window.

Interface description

The SunVox interface is divided into the several rectangular windows (areas):

  • pattern editor;
  • musical keyboard;
  • controllers of the selected module + modules (routing);
  • timeline (select the pattern here and its content will be shown in the pattern editor at the top).
Each window has its own menu with different options and functions - use the button with three horizontal lines to open this menu. By clicking on one of the windows, we make it active and place it in focus. All keystrokes will be sent to this active window first. If the window does not know what to do with the received commands, then it will forward these commands to the pattern editor, since this is the highest priority window.

The size of the windows can be changed. For this, special narrow panels (vertical and horizontal) are provided, by capturing one of which you can change the size of several areas at once. One of the panels contains a clock, volume control and playback control buttons.

First click on the Stop button - stop playing. Second click - reset all SunVox activity and switch the engine to standby mode.

Control

There are two modes in the main SunVox windows (pattern, modules, timeline): selection and navigation.
Left mouse button = selection or navigation (depending on the mode).
Middle mouse button = navigation.
The default on desktops is selection.
Navigation is the default on mobile devices.
If Main menu -> Preferences -> Interface -> Control type = "Fingers", then SunVox will work like on a mobile device.

What if you need navigation but there is no middle mouse button?

  • macOS:
    • CMD + left button;
    • or install some application to emulate the middle button, for example Middle.
  • All systems:
    • there is middle button emulation on some touchpads: using three-finger click or by simultaneously pressing the left and right buttons (see the system touchpad settings);
    • switch between editing modes using the button with a selection rectangle;
    • if there is no such button, uncomment one of the show_sel_btn options in sunvox_config.ini.

General rules for all devices:
  • pressing with the stylus or finger is equivalent to pressing the left mouse button;
  • double click in an empty area - create a new object (if possible);
  • double-clicking on an object opens its properties (if possible);
  • scroll wheel - zoom in or scroll up/down;
  • right mouse button = menu;
  • SHIFT + left button = connect modules or disable snapping to the timeline grid;
  • CTRL + left button = multiple selection mode (previous selection is not cleared).

Toolbars

Toolbar 1 is the main horizontal divider with STOP and PLAY buttons.
Toolbar 2 is the second horizontal divider above the timeline.
Floating toolbar is the window that can be opened from the Main menu -> Toolbar.

Starting from v2.1 these panels can be customized (add/remove buttons). To do this, go to the Main menu -> Preferences -> Toolbars. Each toolbar is described by a string with the names of buttons and commands, separated by commas. Commands < and > set the direction of adding buttons: from left to right or from right to left.
Available names:

  • < - switch the direction of adding buttons: from left to right (default);
  • > - switch the direction of adding buttons: from right to left;
  • play;
  • play2 - play from the beginning;
  • play3 - play pattern;
  • stop;
  • rec;
  • vol - volume;
  • svol - volume (short version);
  • lev - signal level indicator;
  • undo;
  • redo;
  • cut;
  • copy;
  • paste;
  • dup - duplicate;
  • bpm - BPM;
  • bpmtpl - BPM and TPL;
  • clock - current time;
  • cpu - CPU usage monitor;
  • cpu2 - CPU usage monitor (pressing will open a list of modules).

The main menu can be opened by pressing the button with the SunVox logo at the top left. Its items are described below.

Menu itemDescription
New projectCreate a new project (empty or based on a template) through this menu item. The template file can be specified here: Main menu -> Preferences -> Main -> Set starting template.
Load projectLoad project file. Supported formats: sunvox, mod, xm, midi.
Merge projectSame as the previous item, but without clearing the current project.
Save projectSave project file. When re-saving the file name is not asked.
Save project asSave project file. The file name is always asked.
Export/importVarious options for saving and loading a project. For example, export to MIDI or WAV. For some systems, there may be functions for exchanging files with other apps.
Project propertiesOpen the window where you can change the following project parameters:
  • name;
  • BPM and TPL (tempo);
  • time grid display options;
  • the version of the program in which this project was originally created; required for correct playback of files created in older versions of SunVox; affects the sound of some modules;
  • sync settings: SunVox can receive sync commands from other apps via MIDI or from AU host (iOS only); external MIDI sync source can be specified here: Main menu -> Preferences -> MIDI.
Undo
Redo
ToolbarOpen the movable window with some commonly used functions (copy, paste, etc.).
Touch ThereminOpen the virtual Theremin window for live play with the selected module. Tapping with your finger/cursor activates one of the voices. Moving up and down changes the volume of the voice. Moving left and right sets the pitch.
PreferencesOpen the window with the program settings. Settings are divided into the following groups:
  • Main;
  • Modules;
  • Timeline:
    • show timeline:
      • auto - depending on the screen size;
      • yes - always show timeline;
      • no - timeline is hidden by default, but you can show it by pressing the T button in the modules window;
    • show line numbers from 0 or 1;
    • hexadecimal line numbers (on/off);
    • hexadecimal track numbers (on/off);
    • grid cell X size; 1 = time grid value in the Project properties;
    • grid cell Y size; 1 = supertrack / 32;
  • Toolbars - toolbar settings;
  • Interface: scale, colors, fonts, shortcuts, language, etc.;
  • Audio: input/output sound device (not for all systems), buffer size (latency), sample rate;
  • Recording: settings for recording SunVox commands (notes, controller changes):
    • metronome ON/OFF;
    • fit pattern to grid: when enabled - the start position of the new recorded pattern will be multiple of 32;
    • note quantization: when enabled - the Delay effects (40...5F) will not be used for the new recorded notes;
    • automation quantization: when enabled - the Delay effects (40...5F) will not be used for the automation (controller changing) commands, and the pattern size will be much more compact (one track per controller) and readable;
  • MIDI: external MIDI controllers and their settings.
AboutApp version and sound engine information.
HelpBrief and detailed instructions.
ExitCompletely close the program.

Keyboard shortcuts

You can change it in the Main Menu -> Preferences -> Interface -> Shortcuts. Any keys and MIDI-buttons can be assigned to any SunVox action (from the list below).

General:

KeysDescription
CTRL + Zundo
CTRL + Y or SHIFT + CTRL + Zredo
CTRL + Nnew project or object (module/pattern/...)
LEFT,RIGHT,UP,DOWN,
PAGEUP,PAGEDOWN,
HOME,END,TAB
navigation
SHIFT + UP/DOWN/LEFT/RIGHTselection
CTRL + (selection begin
CTRL + )selection end
CTRL + Aselect all
CTRL + X or SHIFT + DELETEcut
CTRL + Ccopy
CTRL + V or SHIFT + INSERTpaste
CTRL + Dduplicate / clone
CTRL + Hdetach: detach the selected modules from the rest or convert the clones to the normal patterns;
INSERT (or Command+I on Mac)insert an empty note and shift the pattern content down; or just insert something
BACKSPACEdelete previous note and shift the pattern content up; or just delete something
DELETE (or Fn+Backspace on Mac)delete
not assignedprevious layout
not assignednext layout
not assignedlayout: normal
not assignedlayout: timeline
not assignedlayout: pattern editor
not assignedlayout: module view + controllers
not assignedlayout: controllers
not assignedlayout: module view

Application:

KeysDescription
ESCexit the application

Project:

KeysDescription
CTRL + SHIFT + Nnew project
CTRL + Oload project
CTRL + Ssave project
CTRL + Bsave project to BACKUP.sunvox

Musical keyboard:

KeysDescription
Z,S,X,D,C,V,G,B,H,N,J,M,'<',L,'>',';','/'
Q,2,W,3,E,R,5,T,6,Y,7,U,I,9,O,0,P,[,=,],ENTER
notes
F1...F8set octave number
SHIFT + )octave up
SHIFT + (octave down

Brush:

KeysDescription
CTRL + Eplay current note (in the pattern editor) and copy it to the brush
not assignedplay current note (in the pattern editor), copy it to the brush and go to the next line
CTRL + Lplay current line (in the pattern editor) and copy it to the brush
not assignedplay current line (in the pattern editor), copy it to the brush and go to the next line
not assignedplay the 1st line of the brush
not assignedсopy selected area of the pattern to the brush
CTRL + Gpaste from the brush

Pattern editor:

KeysDescription
SPACEedit mode ON/OFF
CTRL + '='increase the edit step
CTRL + '-'decrease the edit step
CAPSLOCK or '~'insert "Note OFF" (==)
Kinsert a special command "Set Pitch" (SP)
SHIFT + Kinsert a special command "Previous Track" (<<)
not assignedinsert a special command "Stop the Module" (XX)
CTRL + Mpaste and mix
CTRL + Tselect track
not assignedopen the Interpolator window
CTRL + Iinterpolate values
CTRL + Uinterpolate velocity
not assignedopen the Transpose window
SHIFT + '='transpose up (+1 semitone)
SHIFT + '-'transpose down (-1 semitone)
SHIFT + ']'transpose octave up (+12 semitones)
SHIFT + '['transpose octave down (-12 semitones)
CTRL + Pplace selected events evenly
not assignedopen the Cyclic Shift window
SHIFT + 7cyclic shift up
SHIFT + 8cyclic shift down
not assignedremap
not assignedset effect
not assignedopen the pattern drawing tools
not assignedclear pattern
not assignedshrink pattern /2
not assignedexpand pattern *2
not assignedslice by cursor
not assignedreverse
not assignedpattern properties
not assignedshow/hide CCEEXXYY columns
not assignedscale

Modules (routing):

KeysDescription
CTRL + Rrandomize module controllers
SHIFT + mouse movementmodule link/unlink
SHIFT + controller value changewrite the value to the pattern
SHIFT + >next module
SHIFT + <previous module
CTRL + >next synth
CTRL + <previous synth
CTRL + RIGHTnext module horizontally (to the right)
CTRL + LEFTprevious module horizontally (to the left)
CTRL + DOWNnext module vertically (below)
CTRL + UPprevious module vertically (above)
CTRL + 1toggle mute
CTRL + 2toggle solo
CTRL + 3toggle bypass
CTRL + 4unmute all modules
CTRL + Ffind a module
SHIFT + scroll wheelchange the size of all modules
CTRL + scroll wheelchange the size of the selected module
not assignedmake MetaModule
not assignedtoggle LINK mode (connecting modules)

Timeline:

KeysDescription
F9play/stop
F10play from beginning
F11play pattern
F12stop
SHIFT + F9record start/stop
SHIFT + F10play from the pattern cursor
SHIFT + F12go to beginning
not assignedslice
not assignedtoggle mute
not assignedtoggle solo
not assignedunmute all patterns
not assignedset restart position
not assignedtoggle supertracks
not assignedchange orientation
not assignedsnap to grid ON/OFF
not assignednext pattern horizontally (to the right)
not assignedprevious pattern horizontally (to the left)
not assignednext pattern vertically (below)
not assignedprevious pattern vertically (above)

Touch Theremin:

KeysDescription
SHIFT + touchwrite a microtone (Set Pitch XXYY command) to the pattern

Dialog boxes:

KeysDescription
Y or ENTERfirst button on the left
Nlast button on the right
ESCcancel
1...9buttons from left to right

Basic concepts

Project

The SunVox project consists of the following parts:

  • modules generates the sound;
  • patterns controls the modules (sends them notes and other commands);
  • timeline determines the order of the patterns.

All the project parts are stored in the single *.sunvox file.The sound of the project should be the same (or close to the original) regardless of the device and system.

Numbers in patterns are in hexadecimal format (hex) (to achieve tighter packing of data on the screen). Here are examples of hexadecimal numbers and its decimal (dec) equivalents:

  • 00 = 0;
  • 01 = 1;
  • ...
  • 09 = 9;
  • 0A = 10;
  • 0B = 11;
  • 0C = 12;
  • 0D = 13;
  • 0E = 14;
  • 0F = 15;
  • 10 = 16;
  • 11 = 17;
  • ...
  • FF = 255

Pattern

Pattern is a group of simultaneously played tracks that represents some section of the SunVox project (score). It is divided into horizontal lines. Playing direction is top-down.

Any pattern in the SunVox looks like this:

linetrack 0track 1track 2...
000eventeventevent...
001eventeventevent...
xxx............

event - some music event (something like a MIDI command).

Examples of events:

event of turning note C5 on:C5 80 01 0000 0000
event of turning note A5 on:A5 80 01 0000 0000
event of turning note off:==

As you can see, an events contain several text/numeric columns (fields). All numbers in the pattern are represented in HEXADECIMAL format.

Event format: NN VV MM CCEE XXYY

Lets see detailed description of each column in the event:

  • NN - some special command code or the note:
    • SP - Set Pitch XXYY (shortcut K), where 0000 - highest possible pitch, 7800 - lowest pitch (note C0); one semitone = 100 (256dec);
      formulas:
      from Pitch XXYY to Frequency: frequency (in Hz) = pow( 2, ( 30720dec - XXYY ) / 3072dec ) * 16.3339;
      from Frequency to Pitch XXYY: XXYY = 30720dec - log2( frequency / 16.3339 ) * 3072dec;
    • << - Previous Track (shortcut SHIFT + K); use it to apply effects to previous track; but the following secondary effects are not allowed: 2x, 40..5F, 1D;
    • == - Note OFF (shortcut CAPSLOCK or '~');
    • XX - Stop the Module, clear its internal buffers and put it into standby mode;
    • C0 - С-0 (first note of the lowest octave);
    • c0 - C#0;
    • D0 - D-0;
    • d0 - D#0;
    • E0 - E-0;
    • F0 - F-0;
    • f0 - F#0;
    • G0 - G-0;
    • g0 - G#0;
    • A0 - A-0;
    • a0 - A#0;
    • B0 - B-0;
    • C1 - C-1 (first note of the octave 1);
    • ...
    • B9 - B-9 (last note of the highest octave);
  • VV - velocity (00..80);
  • MM - module number (00,01,02,03,04,05,06,07,08,09, ... FFFF);
  • CC - the controller number (01,02,03, ... 7F) or the MIDI controller number (80,81,82, ... FF);
  • EE - effect that will be applied to the last note activated on the current track; some effects (marked in bold) can use the last nonzero parameter when XXYY = 0:
    • 01 - slide up (portamento up; sliding speed = XXYY);
    • 02 - slide down (portamento down; sliding speed = XXYY);
    • 03 - slide to note (sliding speed = XXYY);
    • 04 - vibrato; (XX - frequency; YY - amplitude);
    • 05 - pitch bend up: pitch = original pitch (initialized when a note is activated) + XXYY; (one semitone = 100 (256dec));
    • 06 - pitch bend down: pitch = original pitch (initialized when a note is activated) - XXYY; (one semitone = 100 (256dec));
    • 07 - set phase (or sample offset) XXYY in percents (from 0000 (0%) to 8000 (100%));
    • 08 - arpeggio (XX - second note increment; YY - third note increment);
    • 09 - set phase (or sample offset) XXYY in samples*256dec;
    • 0A - velocity slide up/down (XX - up speed; YY - down speed);
    • 0F - set playing speed (XXYY: 0001..001F - number of ticks per line; 0020..00FF - BPM) or time grids (XXYY: F001..F020 and F100..F120);
    • 11 - fine slide up;
    • 12 - fine slide down;
    • 13 - set Bypass/Solo/Mute (BSM = XYY) flags; example of mute: 13 0001; example of solo: 13 0010;
    • 14 - reset Bypass/Solo/Mute (BSM = XYY) flags; example of bypass reset: 14 0100;
    • 15 - change the relative note and finetune of the module; XX - relative note (00 - ignore; 01 = -127dec; 80 = 0; FF = 127dec); YY - finetune (00 - ignore; 01 = one semitone lower; 80 = 0; FF = one semitone higher);
    • 19 - retrigger note after XXYY ticks during the line;
    • 1A - fine velocity slide up/down (XX - up speed; YY - down speed); once at the beginning of a line;
    • 1C - cut note after YY ticks in the current line;
    • 1D - delays the start of note until tick YY in the current line;
    • 1F - set BPM;
    • 20 - note probability;
    • 21 - note probability with random velocity;
    • 22 - set controller value to the random number from 0000 to XXYY;
    • 23 - set controller value to the random number with range from XX (00..FF) to YY (00..FF);
    • 24 - take a note from line XXYY on the same track;
    • 25 - take a random note from the range of lines XX..YY (inclusive) on the same track;
    • 26 - take a note from track XXYY on the same line;
    • 27 - take a random note from the range of tracks XX..YY (inclusive) on the same line;
    • 28 - take a note from line XXYY on track 0;
    • 29 - take a random note from the range of lines XX..YY (inclusive) on track 0;
    • 30 - stop playing the song;
    • 31 - jump to line XXYY (address) right after the end of the current line;
    • 32 - set jump address mode YY:
      • 0 - absolute address, relative to the start of the timeline (default);
      • 1 - ( pattern beginning + address );
      • 2 - ( pattern beginning - address );
      • 3 - ( next line + address );
      • 4 - ( next line - address );
    • 33 - slot sync (for sv_sync_resume() in SunVox library);
    • 34 - set (XX) or reset (YY) project options:
      • 1 - no portamento on the first tick (for compatibility with old tracker formats);
      • 2 - no velocity slide on the first tick (for compatibility with old tracker formats);
      • 4 - use Round-robin keyboard track allocation algorithm, instead of default tight packing; may be required for live play on the MultiSynth module with the "trigger" option; but this option may cause the brush to work incorrectly;
      • 8 - always output 7-bit MIDI controller values, even if the controller is 14-bit (0-31);
    • 35 - bind MIDI OUT message XX (0 - Program Change; 1 - Channel Pressure; 2 - Pitch Bend Change) to controller YY (0 - OFF; 0x80 - MIDI controller 0; 0x81 - MIDI controller 1...); for the specified module only;
    • destructive effects (irreversibly change the contents of the pattern):
      • 38 - delete an event on track XX with a probability of YY (00..FF(100%)); see simple_examples/pat effect 38 self destructive.sunvox
      • 39 - cyclic shift of track XX down by YY lines;
      • 3A - generate a new iteration of YY-line polyrhythm on track XX; see simple_examples/pat effect 3A polyrhythm.sunvox;
      • 3B - copy track XX to the pattern named YY;
      • 3C - copy track XX from from the pattern YY; for example, if XXYY = 0023, then the first track will be copied from the pattern named "23";
      • 3D - write a random value to track YY; min value, max value and column must be in track 0, starting from line XX; see simple_examples/pat effect 3D random value;
    • 40...5F - delay an event for selected fraction of the line (from 40 (0%) to 5F (96.875%));
  • XXYY - parameter of a selected effect/controller (0000 - min; 8000 - max).

Velocity can be changed dynamically.
Example:NN VV MM CCEE XXYY C3 10 03 0000 0000 -- 20 -- 0000 0000 -- 30 -- 0000 0000 -- 40 -- 0000 0000 -- 50 -- 0000 0000 -- 60 -- 0000 0000In this example velocity changed from 10 to 60.

Example of changing cutoff frequency (global controller) of filter from min to max value:NN VV MM CCEE XXYY -- -- 01 0200 0000 -- -- 01 0200 1000 -- -- 01 0200 2000 -- -- 01 0200 3000 -- -- 01 0200 4000 -- -- 01 0200 5000 -- -- 01 0200 6000 -- -- 01 0200 7000 -- -- 01 0200 8000The "Cutoff frequency" controller has a number 2 in the filter.

Some modules have the local controllers.
A local controller can be changed for a specific note on a specific track, regardless of other active notes in the same module.
In other words, the local controller only affects the specific polyphony channel of the module.

Example: (changing local controller 2 in the module 1)NN VV MM CCEE XXYY C3 80 01 0200 0000 //Set local controller 2 to value 0000. Separate sound begins playing here -- -- -- 0200 0001 //Set local controller 2 to value 0001 -- -- -- 0200 0002 //Set local controller 2 to value 0002 -- -- -- 0200 0003 //Set local controller 2 to value 0003 -- -- -- 0200 0002 //... -- -- -- 0200 0001

Pattern effects

01 - Slide up (Portamento Up). This effect will slide up the frequency of the synth being played on the track by XXYY (one semitone = 40) tones for every tick. If a slide rate is not specified (XXYY is zero) then the last slide rate used on the track is used again.

02 - Slide down (Portamento Down). This effect will slide down the frequency of the synth being played on the track by XXYY (one semitone = 40) tones for every tick. If a slide rate is not specified (XXYY is zero) then the last slide rate used on the track is used again.

03 - Slide to note. This effect will slide a note being played on a track to a specified note NN. The parameter XXYY (one semitone = 40) will states the speed at which a slide will occur. If a slide rate is not specified (XXYY is zero) then the last slide rate used on the track is used again. If NN is empty, the last NN (specified early for effect 03 in the same track) will be used.

04 - Vibrato with parameters XXYY, where the XX - frequency (examples of values: 20 - one period per line; 40 - two periods per line), YY - amplitude (one semitone = 40).

05 - Pitch bend up. Final pitch = original pitch (initialized when a note is activated) + XXYY. One semitone = 100 (256dec).

06 - Pitch bend down. Final pitch = original pitch (initialized when a note is activated) - XXYY. One semitone = 100 (256dec).

08 - Arpeggio. This effect is normally used to simulate chords. It can also be used to produce a heavy vibrato.
Example:
Note = C3; XXYY = 0407 (second note increment = 4; third note increment = 7)
this is an attempt to produce a C-major chord. At the beginning of a line the C3 note is played, then 1/3 into the line the sound is retriggered at E-3, at 2/3 is retriggered at G3, and at the beginning of the next line (if there are no new notes to be played on the track), it is retriggered at C3 again.
Video: Arpeggio Standard Effect

09 - Set sample offset. This functionality enables you to start a sample from a specified position rather than the normal beginning position. Multiply value XXYY * 256 to get the position in samples from the beginning of the sample where playback should start. If no sample is specified, the sample currently playing is retriggered to the offset specified.
Example: play instrument 2 at note C3, and XXYY = 0023. This would make playback of the sample start at offset 0023 * 0100 = 2300. This offset provides quite a wide range from where you can start playing the sample.

07 - Set sample offset (by percentage). XXYY from 0000 (sample start) to 8000 (sample end). Video: Sampler Retriggering / Scaling

0A - Velocity slide up/down. This effect will change the velocity of the synth being played on a track. XX is the speed of the volume increase. YY is the speed of the volume decrease.
Example: set XXYY to 0003. This means that at the beginning of the line, the current velocity of the synth is decreased by 3 (because YY = 3). The velocity is decreased by 3 again for every tick on this line.

0F - Set playing speed. This effect changes the TPL (number of ticks per line). Valid values are 1 - 1F (1 - 31 in decimal). Values above 1F represent a modified BPM (beats per minute). A speed value of 2A (42 in decimal), equals 42 beats per minute.

11 - Fine slide up. This effect functions just like effect 1, except that the frequency of the note is only modified once (at the beginning of a line).

12 - Fine slide down. This effect functions just like effect 2, except that the frequency of the note is only modified once (at the beginning of a line).

13 - Set Bypass/Solo/Mute flags. BSM = XYY; Example of mute: 13 0001; example of solo: 13 0010.

14 - Reset Bypass/Solo/Mute flags. BSM = XYY. Example of bypass reset: 14 0100.

15 - Сhange the relative note XX and finetune YY of the module.

Relative note XX:

  • 00: ignore;
  • 01: -127dec;
  • 02: -126dec;
  • ...
  • 80: 0 (no note offset);
  • 81: +1;
  • 82: +2;
  • ...
  • FF: +127dec.

Finetune YY:
  • 00: ignore;
  • 01: one semitone lower;
  • ...
  • 80: 0 (no finetune offset);
  • ...
  • FF: one semitone higher.

19 - Retrigger. Effect 19 allows you to retrigger a note after XXYY ticks during the line. For example, let's specify note C3 and set XXYY = 2 when the speed (TPL) is currently 6. This starts the specified note at the beginning of the line, and after two ticks it is restarted. This continues until the beginning of the next line.

1A - Fine velocity slide up/down. XX - up speed; YY - down speed; once at the beginning of a line.

1C - Cut:

  • 00YY - turn off the note after YY ticks;
  • 10YY - set velocity to 0 after YY ticks.

1D - Delay. This effect delays the start of a note until tick XXYY in the current line. For example, if note C2 is played, with effect 1D and argument XXYY = 3 when the speed is 6. The note C2 will be triggered at the 3rd tick after the start of the line. Purpose: to delay the start of a sample for a VERY short amount of time.

1F - Set BPM to XXYY.

20 - Note probability. Set the probability XXYY (from 0 to 8000) of a note being triggered. This effect can be used for original unpredictable rhythms.

21 - Note probability with random velocity. Same as effect 20 but with random velocity.

22 - Write a random value 0...XXYY to the controller CC.

23 - Write a random value XX (00..FF) ... YY (00..FF) to the controller CC.

24 - Note from line XXYY. Take a note from line XXYY on the same track. If the note to the left of the effect is specified, it will be used as the transposition value (relative to C5: c5 - one semitone higher, C4 - one octave lower, etc.). If the module number is missing, then the module number from line XXYY will be used.

Example:

There are four base notes (on top of the track).
The effect 24 helps you to repeat these notes.
Then you can change one of these notes, and the changes will immediately apply to the entire pattern. So you don't need to press DUPLICATE after each change.
Moreover, you can transpose these notes and change the order in XXYY column.
So the above picture is equivalent to this:

25 - Random note from line XX...YY. Take a random note from the range of lines XX..YY (inclusive) on the same track.

26 - Note from track XXYY. Take a note from track XXYY on the same line.

27 - Random note from track XX...YY. Take a random note from the range of tracks XX..YY (inclusive) on the same line.

28 - Note from line XXYY on track 0. Take a note from line XXYY on track 0.

29 - Random note from line XX...YY on track 0. Take a random note from the range of lines XX...YY (inclusive) on track 0. See example "pat effect 29 random note from trk0".

30 - Stop playing the song.

31 - Jump to line XXYY (address) right after the end of the current line.

32 - Set jump address mode YY:

  • 0: jump to absolute address, relative to the start of the timeline (default);
  • 1: jump to ( pattern beginning + address );
  • 2: jump to ( pattern beginning - address );
  • 3: jump to ( next line + address );
  • 4: jump to ( next line - address ).

33 - Slot sync for sv_sync_resume() in SunVox library.

34 - Set (XX) or reset (YY) project options:

  • 1 - no portamento on the first tick (for compatibility with old tracker formats);
  • 2 - no velocity slide on the first tick (for compatibility with old tracker formats);
  • 4 - use Round-robin keyboard track allocation algorithm, instead of default tight packing; may be required for live play on the MultiSynth module with the "trigger" option; but this option may cause the brush to work incorrectly;
  • 8 - always output 7-bit MIDI controller values, even if the controller is 14-bit (0-31);

35 - Enable/Disable additional MIDI OUT message support for the specified module:
By default, the application can receive MIDI messages "Program Change", "Channel Pressure" and "Pitch Bend Change", but can't send them. This effect allows you to temporarily enable support for these messages for the specific module. After enabling if you change the value of the controller YY, the MIDI message XX will be sent instead of the "Control Change" command.

XX:

  • 0 - Program Change;
  • 1 - Channel Pressure;
  • 2 - Pitch Bend Change;

YY:
  • 0 - OFF (default);
  • 0x80 - MIDI controller 0;
  • 0x81 - MIDI controller 1;
  • 0x82 - MIDI controller 2;
  • ...

Warning: the settings made by this effect will not be saved to the project file!

38 - Delete an event on track XX with a probability of YY (00..FF(100%)). See simple_examples/pat effect 38 self destructive.sunvox.

39 - Cyclic shift of track XX down by YY lines.

3A - Generate a new iteration of YY-line polyrhythm on track XX. See simple_examples/pat effect 3A polyrhythm.sunvox.

3B - Copy track XX to the pattern named YY.

3C - Copy track XX from from the pattern YY. For example, if XXYY = 0023, then the first track will be copied from the pattern named "23".

3D - Write a random value to track YY. Min value, max value and column must be in track 0, starting from line XX.
Columns:

  • 0 - NN;
  • 1 - VV;
  • 2 - MM;
  • 3 - CC;
  • 4 - EE;
  • 5 - XX;
  • 6 - YY;
  • 7 - XXYY.
See simple_examples/pat effect 3D random value.

40...5F - delay an event for selected fraction of the line (from 0% (40) to 96.875% (5F)).

Video: Standard Effects

MIDI Out

You can use controllers with number 80+X to send MIDI Control Change command. Where the X is MIDI Controller Number.

Example: NN VV MM CCEE XXYY -- -- 01 8100 0000 - set Modulation (MSB+LSB: 14-bit) to the min value -- -- 01 8100 8000 - set Modulation (MSB+LSB: 14-bit) to the max value -- -- 01 DB00 4000 - set Effect 1 Depth (7-bit) to the center position MSB - Most Significant Byte; LSB - Least Significant Byte.

MIDI controllers 0-31 are 14-bit (possible values: 0...16383): SunVox ctl values (0...32768) will be converted to 0...16383 and sent to MIDI controllers X (high 7 bits) and X+32 (low 7 bits).

You can get MIDI Controller Number for CC column from the following table.

MIDI controller number (dec)SunVox controller number (MIDI contr. + 80 (hex)); Use these values in the CC column of SunVox patternController name
080Bank Select (MIDI Controller 32 more commonly used)
181Modulation Wheel
282Breath Contoller
383Undefined
484Foot Controller
585Portamento Time
686Data Entry MSB
787Main Volume
888Balance
989Undefined
108APan
118BExpression
128CEffect Control 1
138DEffect Control 2
14-158E-8FUndefined
16-1990-93General Purpose Controllers
20-3194-9FUndefined
32-63A0-BFLSB for MIDI Controllers 0 - 31
64C0Damper Pedal (Sustain)
65C1Portamento
66C2Sostenuto
67C3Soft Pedal
68C4Legato Footswitch
69C5Hold 2
70C6Sound Controller 1 (default: Sound Variation)
71C7Sound Controller 2 (default: Timbre/Harmonic Content)
72C8Sound Controller 3 (default: Release Time)
73C9Sound Controller 4 (default: Attack Time)
74CASound Controller 5 (default: Brightness)
75-79CB-CFSound Controller 6-10 (no defaults)
80-83D0-D3General Purpose Controllers
84D4Portamento Control
85-90D5-DAUndefined
91DBEffect 1 Depth (usually controls reverb)
92DCEffect 2 Depth (usually controls tremolo)
93DDEffect 3 Depth (usually controls chorus)
94DEEffect 4 Depth (usually controls detune)
95DFEffect 5 Depth (usually controls phaser)
96E0Data Increment
97E1Data Decrement
98E2Non-Registered Parameter Number LSB
99E3Non-Registered Parameter Number LSB
100E4Registered Parameter Number LSB
101E5Registered Parameter Number MSB
102-120E6-F8Undefined
121F9Reset All Controllers
122FALocal Control
123FBAll Notes Off
124FCOmni Off
125FDOmni On
126FEMono On (Poly Off)
127FFPoly On (Mono Off)

Interpolator

Interpolator is a tool that provides the ability to make a smooth transition between the values of the selected area of the pattern, with various parameters (like the curve type, noise, etc.). To open the corresponding window, go to the pattern editor menu and select the "Interpolate" item.

Description of the buttons

  • First row: type of the interpolation curve, ping-pong mode switch, interpolation step.
  • Second row: column selection (use SHIFT key to select multiple columns).
  • Third row: amount of the noise (random values) and the number of repeats.
  • Fourth row: envelope begin/end values (are only relevant for the Apply envelope button).
  • Fifth row:
    • Interpolate: New value = Smooth transition between the first and the last line of the selection. Video: Interpolation
    • Apply envelope: New value = Old value * Smooth transition between the Env.Start and the Env.end parameters. Video: How to Apply the Envelope
If you want the smooth transition between the first and the last line of your selection - use Interpolate. But if you want to change the existing values (fade them out for example) - use Apply envelope.

Pattern drawing

Since v2.1, the pattern can be edited using the drawing tools. To open the corresponding window, go to the pattern editor menu and select the "Draw" item.

The following tools are available:

  • draw with a brush in the specified columns;
  • draw Note OFF commands;
  • draw levels in the VV column; (after selecting this tool, the working column VV is set, but it can be changed to any other);
  • draw levels in the XXYY column; (after selecting this tool, the working column XXYY is set, but it can be changed to any other);
  • erase values in the specified columns;
  • erase values in all columns;
  • play and copy to brush (specified columns only).

All the tools described above work only when the pattern editing mode is active.

Levels are a graphical representation of the values in the selected column of the track. Before v2.1 there was a menu item "XXYY levels drawing" in the pattern editor. Since v2.1 this function has been moved to the pattern drawing tool window.

Brush is a piece of a pattern that can be used to draw on another pattern. The currently active brush is stored in the on-screen musical keyboard. In the simplest case, the brush is the last chord played on the keyboard. The notes of the first line of this brush will be highlighted in green on the keyboard. To play/change/save/load the brush, increase the height of the keyboard and click the "+" button that appears on the left.

Module

Module is a basic element of the SunVox. There are several types of modules:

  • synthesizer (generator) - can produce some sound;
  • effect (filter) - can change the incoming sound;
  • some other modules that can generate/change not only the sound but the music events (notes, parameters, etc.) too.

Lines between the modules define the direction of signal transmission: more intensive part of line must go from the source; less visible part must go to the destination (reciever).

There is internal set of basic SunVox modules. Click twice on the empty area between the modules - and you will see the list of internal modules. You also can load some modules from the external storage medium by clicking the LOAD button under the list of internal modules. You can find several folders with additional modules (effects, instruments) in the SunVox directory.

There are three ways to connect one module to another:

  • Select the first module (source). Click on the button. Select the second module (destination).
  • Select the first module (source). Drag it to destination with SHIFT key pressed.
  • For multitouch devices: first touch on source, second touch on destination. See this simple video-tutorial.
Reconnection removes the previous connection.

Controllers

Every module has a set of parameters (controllers):

Click twice (or right click) on the controller to open the Controller Properties window, where you can do the following operations: change, reset, randomize, write to pattern, assign MIDI IN:

Controller automation

Automation of the module controllers - automatic change of controller values during playback. Sources of automation: special modules (MultiCtl, Pitch2Ctl, Sound2Ctl, Velocity2Ctl) or the patterns. In the latter case, it does not matter which pattern will send commands to the controller: in SunVox there is no strict binding of certain patterns to the modules and their parameters.
If you press SHIFT, and then on the controller, then its value will be written in a pattern (at the current cursor position). If you need to write more complex automation, then there are three additional ways:

  1. you can manually control the parameters as you want, and all these changes will be recorded in a special pattern in real time; to do this, simply press REC button;
  2. in the pattern, you can specify the initial and final value of the controller (for example, at the beginning and at the end of the pattern), then select this region and use the Interpolator (in the pattern menu) to make a smooth transition;
  3. fill in the columns MM (module number) and CC (controller number); open the drawing tools (pattern editor menu -> Draw) and select the "Draw levels in the XXYY column" tool; then you can draw a freehand automation curve directly in the pattern.

If automation is recorded in a pattern, then the changes do not occur smoothly, but in steps. Step length = 1 tick (after live recording), or 1 line (in other cases). To make changes smoother, automation commands can be sent to the MultiCtl module (in which the Response parameter is different from 1000), which will smooth the changes and send commands to other modules connected to it.

Video: Automation in SunVox: six ways

Modes

Some modules have a "Mode" parameter with the following possible values:

  • HQ - High Quality (stereo);
  • HQmono - High Quality (mono);
  • LQ - Low Quality (stereo) for devices with slow CPU;
  • LQmono - Low Quality (mono) for devices with slow CPU;
  • HQspline - High Quality (stereo) with spline interpolation.

If the CPU of your device is too slow for some SunVox project (app stutters and hangs), you can use the following tips:
  • use monophonic modes (Mono, HQmono or LQmono) for the modules;
  • use low quality modes (LQ or LQmono) for the modules;
  • use reduced polyphony for the generators;
  • don't use the Reverb, or use it in LQ mode (Mode = LQ; All-pass filter = OFF);
  • Sampler: turn off the interpolation (Sample interpolation = OFF; Volume interpolation = OFF);
  • Analog Generator: don't enable the filter when the polyphony is greater than 2; instead, use the single Filter module connected to the output of the generator;
  • Glide, Sound2Ctl, MultiCtl: don't use the Sample rate greater than 150 Hz; usually, a large value of this parameter does not affect the sound quality, but it can increase the CPU load several times;

Timeline

Timeline defines the layout of the SunVox project. It describes how to play the patterns and how to repeat them.

When you select a pattern, you will see its contents (tracks, lines, events) in the Pattern Editor above. In the single pattern play mode, when you select another pattern, it will start playing after the previous pattern has finished.

Playback speed is defined by the following parameters:

  • TPL (Speed) - Ticks Per Line. Tick is the smallest time interval in SunVox. Tick length in milliseconds = 60000 / BPM / 24.
  • BPM - Beats Per Minute. Beat = 24 ticks. Number of lines per beat = 24 / TPL. So if TPL=6, Beat size is 4 lines. Or if TPL=3, Beat size is 8 lines.

Since SunVox 2.0 there are two timeline modes: classic (default) and supertrack mode.
In classic mode, all patterns are independent - each has its own tracks inside.
In supertrack mode, the patterns can complement each other (interact) if they are on the same supertrack. Each supertrack is a set of 32 tracks that can be used by multiple patterns at the same time.
In supertrack mode, you can enable the "don't turn off notes at the end of the pattern" option: one short pattern can turn notes on, and another (on the same supertrack) turn it off.

Internal modules

Synths

Analog Generator

Generator with 32 double alias-free oscillators, 12/24dB filters, envelopes, and smooth change of parameters.
The sound quality of this module is better at a sample rate of 44100Hz.

Controllers:

  • Volume;
  • Waveform:
    • 0 - triangle;
    • 1 - saw;
    • 2 - square;
    • 3 - noise (sampler);
    • 4 - hand drawn waveform;
    • 5 - sine;
    • 6 - half-sine;
    • 7 - absolute sine;
    • 8 - hand drawn waveform with spline interpolation;
    • 9 - noise (sampler) with spline interpolation;
    • A - white noise;
    • B - pink noise;
    • C - red noise;
    • D - blue noise;
    • E - violet noise;
    • F - grey noise;
    • 10 - hand drawn harmonic distribution; remember, if you turn on all 32 harmonics, then the module's performance will slow down 32 times compared to a pure sine generator; reduced polyphony and LQmono mode will slightly reduce the CPU load;
  • Panning;
  • Attack - attack time (volume envelope);
  • Release - release time (volume envelope);
  • Sustain (off/on);
  • Exponential envelope (off/on);
  • Duty cycle (only for square waveform);
  • Osc2 - pitch deviation of the additional oscillator (off in the zero position); semitone = 64;
  • Filter:
    • off;
    • LP (Low-pass) 12dB;
    • HP (High-pass) 12dB;
    • BP (Band-pass) 12dB;
    • BR (Band-rejection) 12dB;
    • LP (Low-pass) 24dB;
    • HP (High-pass) 24dB;
    • BP (Band-pass) 24dB;
    • BR (Band-rejection) 24dB;
  • Filter frequency (Hz);
  • Filter resonance;
  • Filter exponential frequency (off/on);
  • Filter attack - filter envelope attack time;
  • Filter release - filter envelope release time;
  • Filter envelope: off, sustainOFF (without sustain), sustainON (with sustain);
  • Polyphony - number of notes that the module can play simultaneously;
  • Mode: HQ, HQmono, LQ, LQmono;
  • Noise - additional amount of white noise;
  • Osc2 volume - additional oscillator volume;
  • Osc2 mode - mixing mode of the additional oscillator with the main one:
    • addition;
    • subtraction;
    • multiplication;
    • minimum;
    • maximum;
    • bitwise AND; (samples will be converted to 16-bit integers for bitwise operations);
    • bitwise XOR;
  • Osc2 phase - starting phase of the additional oscillator.

Local controllers: Volume, Waveform, Panning, Duty cycle, Filter type, Filter freq, Filter resonance.

Options:

  • 7F - Volume envelope time scaling per key;
  • 7E - Filter envelope time scaling per key;
  • 7D - Volume scaling per key;
  • 7C - Filter frequency scaling per key;
  • 78 - Filter frequency scaling per key (reverse);
  • 75 - Filter frequency = note frequency;
  • 7B - Velocity-dependent filter frequency;
  • 74 - Velocity-dependent filter resonance;
  • 7A - Frequency / 2;
  • 79 - Smooth frequency change;
  • 72 - Increased frequency computation accuracy;
  • 77 - Retain phase;
  • 76 - Random phase;
  • 73 - True zero attack/release.

Video: Virtual Analog Generator

DrumSynth

Drum synthesizer with variety of predefined sounds.
The sound quality of this module is better at a sample rate of 44100Hz.

Distribution of sounds:

  • notes C, C#, D, D# - for bass drum;
  • notes E, F, F# - for hihat;
  • notes G, G#, A, A#, B - for snare drum.

Controllers:
  • Volume - main synth volume;
  • Panning;
  • Polyphony - number of notes that the module can play simultaneously;
  • Bass volume - bass drum volume;
  • Bass power - bass drum power;
  • Bass tone - bass drum tone;
  • Bass length - bass drum length;
  • Hihat volume;
  • Hihat length;
  • Snare volume - snare drum volume;
  • Snare tone - snare drum tone;
  • Snare length - snare drum length.

Local controllers: Panning.

Videos:

FM

Frequency Modulation (FM) Synthesizer.
Each voice of polyphony includes two operators with ADSR envelopes:
1) C (carrier) - base sine wave generator;
2) M (modulator) - sine wave that changes the frequency of the first operator.

The sound quality of this module is better at a sample rate of 44100Hz.

Controllers:

  • C.Volume - carrier volume;
  • M.Volume - modulator volume;
  • Panning;
  • C.Freq mul - carrier frequency multiplier;
  • M.Freq mul - modulator frequency multiplier;
  • M.Self-modulation - how much the modulator modulates itself;
  • C.Attack - carrier attack time;
  • C.Decay - carrier decay time;
  • C.Sustain - carrier sustain level;
  • C.Release - carrier release time;
  • M.Attack - modulator attack time;
  • M.Decay - modulator decay time;
  • M.Sustain - modulator sustain level;
  • M.Release - modulator release time;
  • M.Scaling - how much the modulator volume depends on the pitch;
  • Polyphony - number of notes that the module can play simultaneously;
  • Mode:
    • 0 - HQ: High Quality; stereo; linear interpolation of envelopes;
    • 1 - HQmono: High Quality; mono; linear interpolation of envelopes;
    • 2 - LQ: Low Quality; stereo; no interpolation;
    • 3 - LQmono: Low Quality; mono; no interpolation;

Videos:
FMX

5-operator Frequency Modulation (FM) Synthesizer.

Controllers:

  • Volume;
  • Panning;
  • Sample rate; this value can be reduced if the CPU load is too high;
  • Polyphony - number of notes that the module can play simultaneously;
  • Channels: 0 - mono; 1 - stereo;
  • Input -> Operator #: if not zero, then the incoming signal will be sent to the input of the corresponding operator;
  • Input -> Custom waveform:
    • off;
    • single cycle: store 20ms of the input signal in the custom waveform once;
    • continuous: continuously store every 20ms of the incoming signal in the custom waveform;
  • ADSR smooth transitions:
    • off;
    • rastart and volume change - soft (no clicks) restart of the envelope (when the previous envelope is still playing, but a new one is already running), smooth volume transitions (when changing the "Volume" controller);
    • restart (smoother) and volume change - same as the previous mode, but the envelope restart is even smoother;
    • volume change - the volume will change smoothly, but the envelope start is not smoothed;
  • Noise filter (32768 - OFF) - sets the frequency of the low-pass filter for the noise generator (see the "Noise" controller);
  • For each operator:
    • Volume;
    • Attack (ms) - the time from the beginning of the envelope (zero amplitude) to the maximum amplitude;
    • Decay (ms) - the time from the point with the maximum amplitude to the sustain level;
    • Sustain level;
    • Release (ms) - the time from the sustain level to the end point of the envelope (zero amplitude);
    • Attack curve - attack curve type (linear, smoother, sharper, etc.);
    • Decay curve - decay curve type;
    • Release curve - release curve type;
    • Sustain - suspension point (until the Note OFF) on the envelope:
      • off;
      • on;
      • repeat the envelope until the module is stopped;
    • Sustain pedal (off/on);
    • Envelope scaling per key:
      • negative values - the lower the note, the shorter the envelope;
      • 0 - envelope length does not depend on the note;
      • positive values - the higher the note, the shorter the envelope;
    • Volume scaling per key:
      • negative values - the lower the note, the lower the volume;
      • 0 - volume does not depend on the note;
      • positive values - the higher the note, the lower the volume;
    • Velocity sensitivity:
      • negative values - the higher the velocity, the lower the volume;
      • 0 - volume does not depend on the velocity;
      • positive values - the lower the velocity, the lower the volume;
    • Waveform:
      • 0 - custom;
      • 1 - triangle;
      • 2 - triangle ^ 3;
      • 3 - saw;
      • 4 - saw ^ 3;
      • 5 - square;
      • 6 - sine;
      • 7 - half-sine;
      • 8 - absolute sine;
      • 9 - sine ^ 3;
    • Noise - amount of white noise in the output signal of the operator;
    • Phase shift;
    • Frequency multiplier (1/1000); e.g. 1000 = 1.0 (original frequency), 2000 = 2.0 (twice the frequency);
    • Constant pitch (semitone/64):
      • -8192 = note -128;
      • -1 = just below note C0;
      • 0 = constant pitch is off; operator frequency is set by incoming notes;
      • 1 = just above note C0;
      • 64 = note c0
      • 128 = note D0
      • 768 = note C1;
      • 1536 = note C2;
      • 8192 = note 128;
    • Self-modulation - how much the operator modulates itself;
    • Feedback - how much of the operator's output signal is sent back to the input;
    • Modulation type:
      • phase;
      • frequency;
      • amplitude (multiplication);
      • addition;
      • subtraction;
      • minimum;
      • maximum;
      • bitwise AND; (samples will be converted to 16-bit integers for bitwise operations);
      • bitwise XOR;
      • phase+ - the same as phase modulation, but the envelope will be applied to self-modulation and feedback;
    • Output mode - determines where to send the signal from this operator:
      FMX operator output modes
  • Envelope gain (1/1000); the amplitude of all envelopes is multiplied by ( envelope gain / 1000 ).

Local controllers: Panning.

Generator

Basic generator of different types of periodic signal waveforms with the volume envelope.

This module can receive the incoming signal and use it for the frequency modulation. To do this, connect any other audio source to the input of the Generator, and that source will affect the frequency of the Generator. And don't forget to set a "Frequency modulation on input" controller to some nonzero value.

Controllers:

  • Volume;
  • Waveform:
    • 0 - triangle;
    • 1 - saw;
    • 2 - square;
    • 3 - white noise;
    • 4 - hand drawn waveform;
    • 5 - sine;
    • 6 - half-sine;
    • 7 - absolute sine;
    • 8 - pulse-sine with duty cycle.
  • Panning;
  • Attack - attack time;
  • Release - release time;
  • Polyphony - number of notes that the module can play simultaneously;
  • Mode: 0 - stereo; 1 - mono;
  • Sustain: 0 - off; 1 - on;
  • Frequency modulation on input: 0 - off ... 256 - use input signal for frequency modulation;
  • Duty cycle (only for square waveform).

Local controllers: Type, Pan.

Videos:

Input

Audio input from Microphone/Line-in.

Compatibility: implemented in the iOS and Android versions only. Other systems will be supported in future SunVox updates.

Kicker

Controllers:

  • Volume;
  • Type - type of waveform: 0 - triangle; 1 - square; 2 - sine;
  • Panning;
  • Attack;
  • Release;
  • Boost (additional volume);
  • Env. Accel - volume & frequency envelope acceleration;
  • Polyphony - number of notes that the module can play simultaneously;
  • Anticlick: 0 - OFF; 1 - ON.

Local controllers: Waveform, Panning.

Video: Kicker, Compressor, and Ducking

Vorbis player

OGG Vorbis player.

Sampler

Sampler can play and record audio files.
Supported file formats: WAV (PCM, uncompressed), AIFF (PCM, uncompressed), XI, OGG (Vorbis), MP3, FLAC, JPEG, RAW. In Linux version all FFmpeg/AVConv formats are supported too.
JPEG image will be loaded as a sample: the brightness of the pixels will be converted into a sound wave (pixel scan line by line, left to right, top to bottom).
If the file format is not recognized, the Sampler will load it as raw data: you will be prompted to manually select the data format (number of bits, channels, etc.).

Buttons description:

  • Load - load some audio file; the file will be stored in the module;
  • Rec - start/stop recording of received audio signal; for example, you can connect Generator to Sampler, and Sampler will record the signal from the Generator;
  • Edit - show/hide sample editor.

Controllers:
  • Volume;
  • Panning;
  • Sample interpolation:
    • off;
    • linear;
    • spline;
  • Volume interpolation:
    • off;
    • linear;
  • Polyphony - number of notes that the module can play simultaneously;
  • Rec threshold - the level at which the Sampler should start recording;
  • Tick length - affects the duration of the envelopes (128 - normal length; 64 - half as long; 256 - twice as long);
  • Record:
    • stop recording; the result will be loaded later (the larger file, the longer it will take to load);
    • pause recording;
    • start recording; may not work if the result of the previous recording has not loaded yet.

Local controllers: Panning.

Options:

  • 7F - Start recording on project play;
  • 7B - Stop recording on project stop;
  • 7E - Record in mono;
  • 7D - Record with reduced sample rate;
  • 7C - Record in 16bit;
  • 7A - Ignore velocity for volume;
  • 79 - Increased frequency computation accuracy.

Videos:
SpectraVoice

SpectraVoice synthesizes sound with a complex spectrum.
The spectrum is a graph where the X-axis is the frequency and the Y-axis is the amplitude (loudness). You can place 16 harmonics on this graph, specifying the position, amplitude, shape and width for each.
To hear exactly the specified frequencies (without shifting up or down, depending on the note) - play the note c6.

Controllers:

  • Volume;
  • Panning;
  • Attack (sec/256);
  • Release (sec/256);
  • Polyphony - number of notes that the module can play simultaneously;
  • Mode: HQ, HQmono, LQ, LQmono, HQspline;
  • Sustain (off/on);
  • Spectrum resolution:
    • 0 - 4096 samples;
    • 1 - 8192 samples;
    • 2 - 16384 samples;
    • 3 - 32768 samples;
    • 4 - 65536 samples;
    • 5 - 131072 samples;
  • Harmonic - current harmonic number to edit;
  • H.freq - harmonic frequency;
  • H.volume - harmonic amplitude;
  • H.width - harmonic width;
  • H.type - harmonic type:
    • 0 - half sine;
    • 1 - square;
    • 2 - organ1;
    • 3 - organ2;
    • 4 - organ3;
    • 5 - organ4;
    • 6 - full sine;
    • 7 - random;
    • 8 - triangle1;
    • 9 - triangle2;
    • A - overtones1;
    • B - overtones2;
    • C - overtones3;
    • D - overtones4;
    • E - overtones1+;
    • F - overtones2+;
    • 10 - overtones3+;
    • 11 - overtones4+;
    • 12 - metal (random seed is set by H.width);

Local controllers: Panning.

Video: SpectraVoice: four harmonics

Effects

Amplifier

Signal amplifier with various settings.

For example you can split a stereo audio input into the left and right channels with this module:

  1. filter the desired channel using the Balance controller: -128 for the left; 128 for the right;
  2. move this channel to the center by reducing the Stereo Width to 0.

Controllers:
  • Volume;
  • Stereo balance;
  • DC offset;
  • Inverse amplitude: 0 - off; 1 - on;
  • Width - stereo width: 0 - mono; 128 - normal; 256 - extended;
  • Absolute - enable it to apply "absolute value" filter to the signal;
  • Fine volume;
  • Gain - high amplification (up to 5000 times);
  • Bipolar DC Offset:

Formula: output = width( inverse( abs( pan( input * volume ) + dc_offset ) ) );
(this is a rough description and the actual code is more complex)

Compressor

Side chain compressor

Controllers:

  • Volume;
  • Threshold: 256 - 0 dB;
  • Slope (%);
  • Attack (ms);
  • Release (ms);
  • Mode: 0 - peak; 1 - RMS sensing; 2 - peak with zero latency for compression/limiting without delay (modes "peak" and "RMS" operate with a delay of 1 ms);
  • Side chain input - side chain input number.

Videos:Explanation of compressor settings on the forum

DC Blocker

DC blocking filter.

Controllers:

  • Mono: 0 - stereo; 1 - mono.

Delay

This module delays the sound and the incoming events (note, pitch, phase, velocity).
Max delay length = 1 min.

Controllers:

  • Dry - amount of original signal;
  • Wet - amount of processed signal;
  • Delay L - left channel delay length, or event delay length;
  • Delay R - right channel delay length;
  • Volume L - left channel volume;
  • Volume R - right channel volume;
  • Mono: 0 - stereo; 1 - mono (left channel only);
  • Inverse (off/on) - change the sign of a delayed signal;
  • Delay unit for "Delay L" and "Delay R":
    • sec/16384;
    • ms;
    • Hz;
    • tick;
    • line;
    • line/2;
    • line/3;
    • sec/44100;
    • sec/48000;
    • sample (delay length will depend on the sampling rate in the SunVox settings);
  • Delay multiplier: the values of controllers "Delay L" and "Delay R" will be multiplied by this factor;
  • Feedback (for sound and events);
  • Negative feedback (off/on) - change the sign of the feedback coefficient;
  • All-pass filter (off/on): if enabled, the module will switch to the All-pass filter mode, where the filter order is the delay length in samples; if you need a different phase response curve, enable negative feedback.

To get a comb filter effect, use the following Delay controller values:
(a = scaling factor applied to the delayed signal; for negative a, enable the "Inverse" option)
  • feedforward comb filter:
    • Dry = 256;
    • Wet = a * 256;
    • Feedback = 0;
  • feedback comb filter:
    • Dry = 256;
    • Wet = a * 256;
    • Feedback = a * 32768.

Block diagram for each channel: -----------------> Dry -----------------> | --> (-Feedback*Allpass) --> | | | | | Input --------> Delay --> Inverse ------> Wet -----> Output | | <------- Feedback <--------

Distortion

This module adds various types of distortion to the sound.

Controllers:

  • Volume;
  • Distortion type:
  • Power - amount of distortion of the type selected above;
  • Bit depth - change it to reduce the resolution of the incoming sound; default value 16 means that the bit depth remains unchanged;
  • Frequency (Hz) - change it to reduce the sample rate of the incoming sound; default value 44100 means that the sample rate remains unchanged;
  • Noise - amount of noise.

Echo

Stereo echo.
Maximum delay length: 4 seconds.

Controllers:

  • Dry - amount of original signal;
  • Wet - amount of processed signal;
  • Feedback;
  • Delay length;
  • Stereo: 0 - mono; 1 - stereo;
  • Right channel offset (off/on);
  • Delay unit:
    • sec/256;
    • ms;
    • Hz;
    • tick;
    • line;
    • line/2;
    • line/3;
  • Right channel offset (unit = Delay length / 32768); affects the sound only if the controller "05.Right channel offset" is ON;
  • Filter:
    • off;
    • low-pass filter 6dB;
    • high-pass filter 6dB;
  • Filter cutoff frequency (Hz).

EQ

3Band equalizer.

Controllers:

  • Low;
  • Middle;
  • High;
  • Mono: 0 - stereo; 1 - mono.

FFT

FFT-based frequency transformator.

Controllers:

  • Sample rate; this value can be reduced if the CPU load is too high;
  • Channels: 0 - mono; 1 - stereo;
  • Buffer (samples) - the larger the buffer, the more precisely the module works and the higher the delay;
  • Buffer overlap: less overlap = less CPU load; the more overlap, the softer the sound;
  • Feedback - amount of the output signal that will be mixed into the input of the module;
  • Noise reduction;
  • Phase gain (normal = 16384);
  • All-pass filter;
  • Frequency spread;
  • Random phase;
  • Random phase (lite);
  • Frequency shift: negative values - down; positive values - up; 4096 = Sample rate / 2;
  • Deform1 - deformation algorithm 1;
  • Deform2 - deformation algorithm 2;
  • HP cutoff - high-pass filter cutoff frequency (32768 = Sample rate / 2);
  • LP cutoff - low-pass filter cutoff frequency (32768 = Sample rate / 2);
  • Volume.

Filter

IIR Filter that can remove some unwanted frequency ranges.

In HQ mode the Filter is double-sampled. In LQ mode the Filter is 2x faster, but with the following consequences:

  • frequency range is reduced by half (to 7000 Hz maximum); so if you want to set cut-off frequency 2000 Hz - you should set it to 4000;
  • LQ algorithm is very fast (specially for slow devices), but the cost of this speed is the instability in some cases (Filter in LQ mode with high Freq values is unstable on some input signals with a predominant high-frequency component).

Controllers:
  • Volume;
  • Frequency (Hz);
  • Resonance;
  • Type:
    • 0 - low-pass;
    • 1 - high-pass;
    • 2 - band-pass;
    • 3 - notch (band-stop);
  • Response - rate of change of the frequency, resonance and volume;
  • Mode:
    • 0 - double sampled stereo;
    • 1 - double sampled mono;
    • 2 - low quality stereo;
    • 3 - low quality mono;
  • Impulse - change it to make the frequency impulse (burst): from the Impulse value ... to the previous frequency value; impulse speed = Response;
  • Mix - mix between the input (min) and the output (max) signals;
  • LFO frequency;
  • LFO amplitude;
  • Set LFO phase - initial phase (after the module reset or after receiving the note (Note ON)) or the command to immediately set the phase to a new value;
  • Exponential freq;
  • Roll-off (dB per octave);
  • LFO frequency unit;
  • LFO waveform.

Videos:
Filter Pro

High-quality 64-bit IIR Filter that can amplify, pass or attenuate some frequency ranges. This module is faster than Filter on modern CPUs and slower on older CPUs (without FPU; for example, on some Windows CE devices).

Controllers:

  • Volume;
  • Type:
    • low-pass;
    • high-pass;
    • band-pass;
    • band-pass with constant peak gain;
    • notch (band-stop);
    • all-pass;
    • peaking (use the "Gain" controller to amplify or attenuate the peak at the specified frequency);
    • low shelf (use the "Gain" controller to amplify or attenuate the frequencies below the specified frequency);
    • high shelf (use the "Gain" controller to amplify or attenuate the frequencies above the specified frequency);
    • low-pass 6dB;
    • high-pass 6dB;
  • Frequency (Hz);
  • Frequency finetune (Hz/1000);
  • Frequency scale (%);
  • Exponential freq - enable it if you want to use the exponential frequency scale;
  • Q - quality factor (resonance);
  • Gain - additional parameter for the filter types 6-8;
  • Roll-off (dB per octave): affects all types except the "peaking" and "low/high shelf"; affects the "all-pass" type since version 2.1.2;
  • Response - rate of change of the volume, frequency, Q, gain and mix;
  • Mode:
    • stereo;
    • mono;
    • stereo + smoothing (for additional parameter smoothing);
    • mono + smoothing;
  • Mix - mix between the input (min) and the output (max) signals;
  • LFO frequency;
  • LFO amplitude;
  • LFO waveform;
  • Set LFO phase - initial phase (after the module reset or after receiving the note (Note ON)) or the command to immediately set the phase to a new value;
  • LFO frequency unit.

Flanger

Flanger effect.

Controllers:

  • Dry - amount of original signal;
  • Wet - amount of processed signal;
  • Feedback;
  • Delay - delay length; maximum = 1/64 second;
  • Response - rate of change of the delay length;
  • LFO frequency;
  • LFO amplitude;
  • LFO waveform: 0 - half of sine; 1 - sine;
  • Set LFO phase - initial phase (after the module reset or after receiving the note (Note ON)) or the command to immediately set the phase to a new value;
  • LFO frequency unit.

LFO

LFO - Low Frequency Oscillator.

Here are three ways to use this module.

  1. Generator=OFF; some signal is sent to the input; at the output we get the same signal, but its volume changes in accordance with the oscillations of the built-in oscillator.
  2. Generator=ON; the input is empty; at the output we get the wave of the built-in oscillator; this output signal can be used for something else, for example to modulate the volume or frequency through the Modulator.
  3. Generator=ON; the input is empty; output is connected to Sound2Ctl; thus, the LFO can change the values of the controllers of other modules.

Controllers:
  • Volume;
  • Type: 0 - amplitude modulation (tremolo); 1 - stereo balance modulation;
  • Amplitude;
  • Frequency;
  • Waveform:
  • Set phase - initial phase (after the module reset or after receiving the note (Note ON)) or the command to immediately set the phase to a new value;
  • Channels: 0 - stereo; 1 - mono;
  • Frequency unit;
  • Duty cycle (only for square waveform);
  • Generator:
    • 0 (off) - LFO works as a modulator (changes the volume of the incoming signal);
    • 1 (on) - LFO works as a generator, producing oscillation at the output, independent of the input signal;
  • Frequency scale (%) - use it to slow or accelerate the oscillations;
  • Smooth transitions - disable it to get hard transitions inside the waveform;
  • Sine waveform quality:
    • auto;
    • low (wave table without interpolation);
    • middle (wave table with interpolation);
    • high (perfect sine).

Loop

This module repeats a fragment of the incoming sound a specified number of times.
To restart the loop: either change the "Repeats" controller, or send some note to this module.
By default, the module is in a standby state and does nothing until the input signal appears.

Controllers:

  • Volume;
  • Length - repeat length;
  • Stereo: 0 - mono; 1 - stereo;
  • Repeat - how many times to repeat a fragment before proceeding to capture the next; 128 = repeat endlessly;
  • Mode: 0 - normal; 1 - ping-pong loop playback;
  • Length unit:
    • line/128;
    • line;
    • line/2;
    • line/3;
    • tick;
    • ms;
    • Hz;
  • Maximum buffer size (in seconds) to protect against allocating too much memory;
  • On NoteON:
    • restart with transition to zero iteration (record);
    • restart current iteration.

Video: Loop Module

Modulator

Amplitude or Phase modulator. First input = Carrier. Other inputs = Modulators (will be mixed into a single signal).

In phase modulation mode this module is simply a variable delay controlled by the amplitude of the modulating signal.

Controllers:

  • Volume;
  • Modulation type:
    • 0 - amplitude modulation;
    • 1 - phase modulation; default signal delay = 20ms; delay range: 40ms (mod.amp 1) ... 20ms (mod.amp 0) ... 0ms (mod.amp -1);
    • 2 - absolute phase modulation (only absolute amplitude values will be used); default signal delay = 0ms; delay range: 40ms (mod.amp 1) ... 0ms (mod.amp 0) ... 40ms (mod.amp -1);
  • Channels: 0 - stereo; 1 - mono;
  • Max phase modulation delay.

Pitch Shifter

Pitch shifter is a module for changing the pitch of any sound in real time.
The signal at the output of the module is always slightly delayed. Delay length is proportional to the "Grain size". The module will work without delay only if the following conditions are met:

  • Pitch = 0;
  • Feedback = 0;
  • Bypass if pitch=0 = 1 or 2 (slow transition or fast transition);
  • the input signal is silence.

Controllers:
  • Volume;
  • Pitch - how much to lower or raise the pitch (semitone = 10; octave = 120); if 0, then the module will not change the signal; incoming notes (relative to C5) change the value of this controller;
  • Pitch scale: if less than 100%, the pitch change is reduced; if more than 100%, the pitch change is increased;
  • Feedback - amount of the output signal that will be mixed into the input of the module;
  • Grain size: if rhythm prevails in the original signal, use small values; if the original signal is rather monotonic, use higher values; max = 1/4 sec;
  • Mode;
  • Bypass if pitch=0 (off / slow transition / fast transition) - play the original signal when the module does not change the pitch; it works only with zero feedback;

Video: Pitch Shifter

Reverb

Reverb is a module that simulates the reverberation effect (echo with numerous reflections to make the sound more natural).

Controllers:

  • Dry - amount of original signal;
  • Wet - amount of processed signal;
  • Feedback;
  • Damp - signal attenuation through a low-pass filter;
  • Width;
  • Freeze: 0 - none; 1 - freeze mode;
  • Mode;
  • All-pass filter:
    • 0 - disabled;
    • 1 - enabled: phases of different signal frequencies are shifted randomly;
    • 2 - improved algorithm, which, unlike the previous one, has almost no effect on the gain of the original signal frequencies;
  • Room size;
  • Random seed - random combination of partitions inside the room.

Smooth

The Smooth module attempts to follow the waveform of the incoming signal, smoothing out sharp changes in accordance with the Rise and Fall parameters.

Controllers:

  • Rise:
    • for mode 0: the rate at which the output value increases = Rise/SampleRate;
    • for mode 1: filter frequency (in Hz) for the rising part of the signal;
  • Fall:
    • for mode 0: the rate at which the output value decreases = Fall/SampleRate;
    • for mode 1: filter frequency (in Hz) for the falling part of the signal;
  • Fall = Rise (off/on);
  • Scale: values below 100% will reduce the rise/fall rate;
  • Mode: 0 - linear; 1 - first-order low-pass filter;
  • Channels: 0 - stereo; 1 - mono.

Vocal Filter

Formant filter - designed to simulate the human vocal tract.

Controllers:

  • Volume;
  • Formant width (Hz);
  • Intensity;
  • Number of formants (higher is better);
  • Vowel: A...E...I...O...U;
  • Voice type:
    • soprano;
    • alto;
    • tenor;
    • bass;
  • Channels: 0 - stereo; 1 - mono.
  • Random frequency;
  • Random seed - pseudorandom number generator variation;
  • Vowel1: A...E...I...O...U (use it to reorder vowels in the Vowel controller);
  • Vowel2: A...E...I...O...U;
  • Vowel3: A...E...I...O...U;
  • Vowel4: A...E...I...O...U;
  • Vowel5: A...E...I...O...U.

Video: How to make a beautiful synthetic choir

Vibrato

Vibrato effect.

Controllers:

  • Volume;
  • Amplitude;
  • Frequency;
  • Channels: 0 - stereo; 1 - mono;
  • Set phase - initial phase (after the module reset or after receiving the note (Note ON)) or the command to immediately set the phase to a new value;
  • Frequency unit;
  • Exponential amplitude (off/on).

WaveShaper

In simple terms, WaveShaper allows you to change the shape of the input signal. Default shape is linear (no changes; play the original signal).

In math terms, WaveShaper is the expression y = f( x ); where y - output; x - input; f - function with graph which you can see in the WaveShaper interface.The horizontal axis of the graph is Input.The vertical axis of the graph is Output.

Controllers:

  • Input volume;
  • Mix: minimum - output=input; maximum - output=filtered input;
  • Output volume;
  • Symmetric;
  • Mode;
  • DC filter (DC Blocking Filter).

Misc

ADSR

ADSR envelope generator. The module can be started either by notes at the input (reacts to note ON/OFF), or by setting the "State" controller to the "start" value.

Controllers:

  • Volume;
  • Attack (ms) - the time from the beginning of the envelope (zero amplitude) to the maximum amplitude;
  • Decay (ms) - the time from the point with the maximum amplitude to the sustain level;
  • Sustain level;
  • Release (ms) - the time from the sustain level to the end point of the envelope (zero amplitude);
  • Attack curve - attack curve type (linear, smoother, sharper, etc.);
  • Decay curve - decay curve type;
  • Release curve - release curve type;
  • Sustain - suspension point (until the Note OFF) on the envelope:
    • off;
    • on;
    • repeat the envelope until the module is stopped;
  • Sustain pedal (off/on);
  • State (stop/start);
  • On NoteON:
    • do nothing;
    • start on first note;
    • start;
  • On NoteOFF:
    • do nothing;
    • stop on last note;
    • stop;
  • Mode:
    • generator - the envelope curve appears at the output of the module as an audio signal; use Sound2Ctl to convert this signal into control commands (controllers automation);
    • amplitude modulator mono - the module works as a modulator: the amplitudes of the input signal and the envelope are multiplied;
    • amplitude modulator stereo - the same as the previous mode, but in stereo;
  • Smooth transitions:
    • off;
    • rastart and volume change - soft (no clicks) restart of the envelope (when the previous envelope is still playing, but a new one is already running), smooth volume transitions (when changing the "Volume" controller);
    • restart (smoother) and volume change - same as the previous mode, but the envelope restart is even smoother;
    • volume change - the volume will change smoothly, but the envelope start is not smoothed;

Ctl2Note

Ctl2Note converts the value of the "Pitch" controller to a note (Note ON/OFF commands at the output).

Controllers:

  • Pitch (range: 0...32768);
  • First note - note number corresponding to the zero value of the pitch;
  • Range (number of semitones) - pitch range is divided into this number of semitones;
  • Transpose;
  • Finetune;
  • Velocity;
  • State (off/on);
  • NoteON:
    • never;
    • on pitch change;
  • NoteOFF:
    • never;
    • on min pitch;
    • on max pitch;
  • Record notes (off/on): if this option is enabled and recording is in progress (the REC button is active), then all notes from the output of this module will be recorded into a new pattern.

Feedback

Generally the feedback is not allowed in SunVox: you can't create an endless loop between the modules. But you can do it by placing two Feedback modules inside of the loop (see screenshot).

Internal Feedback delay = 20 ms.

Glide

Glide is similar to the MultiSynth (which sends the input events to the connected output modules), but it also adds the commands of smooth transition between the notes.

Controllers:

  • Response: 1000 - immediate pitch change; 0...1000 - smooth pitch change;
  • Sample rate; optimal value = 150Hz, please avoid higher values without the urgent need;
  • Reset on 1st note (off/on): if enabled, and all previous notes are released (Glide is inactive), then the next received note will sound immediately at its own frequency, without a smooth transition;
  • Polyphony (off/on);
  • Pitch offset (semitone = 10);
  • Pitch scale (%);
  • Reset: if you send 1 (on) to this controller, all notes will be turned off and the smooth transitions will be reset;
  • Octave offset;
  • Frequency multiply;
  • Frequency divide.

GPIO

With this module you can use the General-Purpose Input/Output (GPIO) pins of the device board. For example, you can send some signals to the LEDs, or receive the ON/OFF (1/0) messages from the buttons.

Requirements: Linux with GPIO Sysfs Interface enabled.

Platform-dependent GPIO numbering (not physical numbering) is used to access GPIO pins. here you can read about the GPIO numbering on Raspberry Pi.

Controllers:

  • Out - if enabled, the module will send 0 or 1 to the output pin;
  • Out pin - output pin number;
  • Out threshold - if the signal level at the module input exceeds this value, the output pin will switch to 1;
  • In - if enabled, the module will receive 0 or 1 from the input pin;
  • In pin - input pin number;
  • In note - if 1 is read from the input pin, a note with the specified number (except zero) will be sent to all receiver modules (connected to the output of GPIO module);
  • In amplitude - if 1 is read from the input pin, the specified amplitude (signal level) be set at the output of the module.

Example in simple_examples folder: raspberry_pi_gpio.

Video: Using Raspberry Pi GPIO in SunVox

MetaModule

MetaModule is a full-featured copy of SunVox in a single module. So you can include one SunVox-project into another recursively. Some complex synth or effect (with large amount of the modules) may be hidden in the MetaModule. Then the module can be saved as a .sunsynth file, making it a cross-platform SunVox instrument to share.

There are two ways to play some generator in the MetaModule:

  1. set Input Module controller to play some selected module inside of the MetaModule; polyphony is possible in the this way, because it can be handled by the selected module directly;
  2. set Play Patterns controller and play the whole SunVox project (with patterns) inside of the MetaModule; polyphony is not possible in this way, because we need a separate copy of the MetaModule for each polyphony channel, but this limitation may be removed in future SunVox updates.

Controllers:
  • Volume;
  • Input module (inside the MetaModule) - sound and event receiver from outside;
  • Play patterns (inside the MetaModule):
    • off;
    • on (repeat): after receiving the first note, the MetaModule will start playing its internal project in a loop; after receiving the last release of the note, the MetaModule will stop playing;
    • on (no repeat): the same as the above mode, but the project is played only once;
    • on (repeat, endless): same as "on (repeat)", but playback never stops;
    • on (no repeat, endless): same as "on (no repeat)", but playback never stops;
  • BPM;
  • TPL;
  • + user-defined controllers (max 96)...

To open the user-defined controllers editor - click the "Controllers" button. User-defined controller colors can be changed by adding "@X" to the beginning of the name, where X is the group number from 0 to F. Group colors (c_cgp0, c_cgp1, etc.) can be changed in sunvox_config.ini

Options:

  • 7F - Arpeggiator (base note - C5): incoming notes will change the pitch of the project (inside the MetaModule);
  • 7E - Apply velocity to the project (inside the MetaModule);
  • 7D - Event output: events sent to 0.Output (inside the MetaModule) will be available on the output port of the MetaModule;
  • 7C - Receive notes from the keyboard;
  • 7B - Don't receive notes from the keyboard;
  • 7A - Auto BPM/TPL: synchronize BPM and TPL of the module with BPM and TPL of the parent project;
  • 79 - ignore effect 31 (jump to line XXYY) after the last Note OFF; works only if "Play patterns" >= 3;
  • 78 - jump to the "RL" pattern after the last Note OFF; works only if "Play patterns" >= 3.

Read more...

Video: Five ways to use MetaModule

MultiCtl

With this module you can change the values of multiple controllers (in different modules) at once. Maximum number of connected controllers - 16.

Controllers:

  • Value - input value;
  • Gain (normal = 256);
  • Quantization - max number of output levels;
  • OUT offset;
  • Response: 1000 - immediate change; 0...1000 - smooth change;
  • Sample rate; optimal value = 150Hz, please avoid higher values without the urgent need.

Quantization controller (Q) divides the whole range of values into (Q-1) parts. Each part corresponds to a certain level. So almost the whole range only contains (Q-1) levels. The last (maximum) level can be obtained by setting the Value to 32768.
Special values for the Quantization controller:
  • less than 2 = two levels;
  • 32768 = 32769 levels.

Formula: output_value = quantization( curve( input_value ) ) + offset;
(this is a rough description and the actual code is more complex)

Video: MultiCtl Module

MultiSynth

This module sends the incoming events (notes, pitch change, phase change) to any number of connected modules (receivers). So you can play a large number of synths simultaneously by pressing one note only. The MultiSynth can also modify incoming events according to the parameters described below.

Controllers:

  • Transpose (number of semitones up or down);
  • Random pitch (one semitone = 256);
  • Velocity;
  • Finetune (+256 = +1 semitone; -256 = -1 semitone);
  • Random phase;
  • Random velocity;
  • Phase - the initial position of the sample or the initial phase of some Generator;
  • Curve2 influence - mix between the linear (default) and the user-drawn curve2 (output velocity = curve2(input velocity)).

Options:
  • 7F - Use static note C5 - replace incoming notes by C5;
  • 7E - Ignore notes with zero velocity;
  • 7C - Trigger: Note OFF commands will be ignored; the new note turns off the old note with the same pitch;
  • 7B - Generate missed Note OFF cmds: if two notes follow each other on the same track - there are no Note OFF commands between them (one note simply replaces another); sometimes we need to insert these missing сommands, to avoid notes hanging; read more;
  • 7A - Round note X (X-axis on curve3) to the nearest integer (remove microtones);
  • 79 - Round pitch Y (Y-axis on curve3) to the closest;
  • 78 - Record notes to the scale (curve3) with automatic copying for 10 octaves; see example "dynamic scale";
  • 76 - Output note = Output note - Input note + C5; (difference between output and input pitch, can be used in Pitch Shifter);
  • 75 - Output port number = note % number of connected outputs; (% is the modulo (remainder) operation); see example "drumkit 3 (multisynth)";
  • 74 - Output port number = polyphonic channel % number of connected outputs;
  • 73 - Output port number = round-robin (cyclic): the algorithm cycles through all idle outputs (to which nothing was sent or the NoteOFF command was sent); if the output is not found, then all occupied outputs are cycled through;
  • 72 - Output port number = random1;
  • 71 - Output port number = random2;
  • 70 - Output port number = random3 (no repeats);
  • 7D - Show Curve1: output velocity = curve1(input note);
  • 7D - Show Curve2: output velocity = curve2(input velocity);
  • 7D - Show Curve3: output pitch = curve3(input pitch).

How to use option 78 to dynamically change the scale (curve3) from any pattern:
  1. write 0001 (ON) to controller 78 of the MultiSynth;
  2. send some notes to the MultiSynth - the new scale will be created from these notes;
  3. write 0000 (OFF) to controller 78 to stop recording notes.

Velocity formula: output_vel = curve2( input_vel * velocity * random * curve1( pitch ) );
(this is a rough description and the actual code is more complex)

Videos:

Pitch2Ctl

This module converts the incoming notes to the controller values (in some another connected module).

Controllers:

  • Mode:
    • frequency - use frequency (in Hz) of the incoming notes;
    • pitch - use linear pitch (first note ... first note + number of semitones) of the incoming notes;
  • Note OFF action - action which will be performed after the note release:
    • do nothing;
    • pitch down (to the OUT min);
    • pitch up (to the OUT max);
  • First note (only for the mode pitch); corresponds to the OUT min value of the controller;
  • Number of semitones (only for the mode pitch) between the OUT min and OUT max;
  • OUT min;
  • OUT max;
  • OUT controller.

Pitch Detector

Pitch Detector tries to detect the pitch of the incoming audio signal. The frequency and note will be displayed. Notes will be sent to the module output - synths connected to the Pitch Detector output will play in unison with the original sound.

Controllers:

  • Algorithm (selected depending on the characteristics of the original signal):
    • 0 - fast (zero crossing): for basic periodic waveforms (sine, triangle, saw, square); the fastest and with the lowest latency;
    • 1 - autocorrelation: for sounds with a complex spectrum;
    • 2 - cepstrum: for sounds with a complex spectrum; compared to autocorrelation, it performs worse at low frequencies and better at high frequencies;
  • Threshold - the detector will only accept a signal with an amplitude greater than this value;
  • Gain - output note gain;
  • Microtones: 0 (off) - detect only whole semitones (snap to grid of the 12-tone equal temperament (12-TET)); 1 (on): detect microtones (notes may not fit into 12-TET grid);
  • Detector finetune - fine tuning of the detector base frequencies: -256 (semitone lower) ... 0 ... 256 (semitone higher);
  • LP filter freq (Hz) - cutoff frequency of the low-pass filter at the module input; frequencies above this value will be suppressed - this can help remove noise interfering with the detector; 0 - filter off;
  • LP filter roll-off (dB per octave);
  • Alg1-2 Sample rate (Hz) - sampling rate of algorithms 1 and 2: a lower value will reduce the CPU load, but also reduce the quality of detection;
  • Alg1-2 Buffer (ms) - buffer size of algorithms 1 and 2: less buffer size = less latency; larger buffer size = better detection quality;
  • Alg1-2 Buffer overlap (%): less overlap = less CPU load; the higher the overlap, the more detailed changes in sound volume and frequency are detected;
  • Alg1 Sensitivity (absolute threshold) - influence of neighboring harmonics on the result of algorithm 1; the exact value is selected experimentally, depending on the characteristics of the original signal; the typical value is 10;
  • Record notes (off/on): if this option is enabled and recording is in progress (the REC button is active), then all notes from the output of this module will be recorded into a new pattern.

Example (sunvox/examples/simple_examples): pitch correction (automatic tuning)

Video: Pitch correction (automatic tuning)

Sound2Ctl

This module converts the audio signal to the numeric value of any selected controller.

Input port of the Sound2Ctl is for receiving the audio signal. Output port of the Sound2Ctl is for transmitting the commands like "set controller X to the value Y".

If you want to disable this module: just mute it, or set OUT Controller to 0.

Video: Sound2Ctl Module

Velocity2Ctl

This module converts the velocity parameter of the incoming notes to the controller values (in some another connected module).

Configuration file

In most cases, you should not change this file manually, because the settings are available in the SunVox main menu -> Preferences. But if you want to use some specific options, you can create your own configuration file based on this one (description of all options).

Frequently asked questions (FAQ)

Interface

Interface is lagging
Try to disable some module visualization options: Main Menu -> Preferences -> Modules.

No CCEE XXYY columns in the pattern editor
These columns may be hidden by default. Go to the pattern editor menu and select "Show additional columns".

Modules, samples, effects

How to connect one module to another?
See the answer here.

Filter effect's impulse value doesn't change
It is normal behaviour. There is no need to remember the "impulse" value. Below is a description of the algorithm.
  1. Frequency = 1000 (for example).
  2. You set "Impulse" to 3000.
  3. Filter sets its internal frequency to 3000.
  4. Filter resets "Impulse" to 0. (0 = no more commands from user).
  5. Frequency changes smoothly from 3000 to 1000. Speed depends on the "Response" value.

Is there a particular bit rate/sample rate/# channels that the samples need to be in order to work?
See the answer here.

How to open the sample editor?

For multisamples, how do I set the root note of my sample?
Use the "rel.note" (relative note) parameter.

How do I adjust multisample instruments? I see slots for multiple samples and a zone managment section in the editor, but I can only load one sample at a time?
1. Create a new Sampler and open its editor:

2. Load sample 0:

3. Sample 0 loaded:

4. Load sample 1:

5. Sample 1 loaded:

6. Make sample 1 playable on octaves 5 and 6:

Sound

Sound stutters and freezes. How to fix?
General tips
  1. Make sure that the CPU load is not too high in your project. Check some lightweight project (for example, NightRadio - Tiny Tune).
  2. Open SunVox Main menu -> Preferences -> Audio and change the Sample rate to some other value if you know the native frequency of your sound card.

Windows: Open SunVox Main menu -> Preferences -> Audio and set Driver to ASIO; if there are no ASIO drivers for your sound card, install a universal driver (for example, ASIO4ALL).

Android: Open SunVox Main menu -> Preferences -> Audio and try to change the Sample rate to 44100 (if it's 48000 by default).

Linux

  1. Go to the SunVox Preferences -> Audio and check the Output field. If it is set to Auto - change it to some real audio output device from the drop-down list.
  2. If this does not help, try to launch the SunVox with the following command: pasuspender -- ./sunvox . This will open an exclusive access to the sound card for the SunVox.

Windows CE: go to the SunVox Preferences -> Audio and change the Buffer to some value between 1024 and 4096; for example, 1536 is the best value for iPAQ devices.

MIDI

How to split MIDI notes by channels, and send the notes from different channels to different modules?
Go to the properties of the module and set MIDI IN to "always", if this module should play always (even when not selected). Next, change the channel value to the right of MIDI IN.

Other

Can SunVox be used as a plugin (VST, AU, etc.)? Are there ways for SunVox to communicate with other audio apps?
Windows:
The VST version is planned.
It is possible to redirect the audio stream from one app to another. For example, from SunVox to another DAW. To do this, use Virtual Audio Cable or VB-CABLE.
With loopMIDI you can create virtual MIDI ports to connect SunVox with other apps: in SunVox these ports can be used as MIDI inputs (Main menu -> Preferences -> MIDI) or MIDI outputs (Module Properties -> MIDI OUT).

Linux:
Start a JACK server (eg qjackctl with a GUI), switch the driver to JACK in SunVox settings. Then SunVox can be linked with other JACK-compatible applications (sound + MIDI).

macOS:
Similar to Windows, there is a program for redirecting the audio stream: Soundflower
All a bit easier for MIDI, since most applications (including SunVox) have a MIDI IN port visible to other programs.
Macs with an M1 processor now have the ability to run iOS applications. This means that you can use the AU version (like a VST) of SunVox from the App Store.

iOS:
Standalone version of SunVox (like on macOS) can receive and send MIDI commands to other apps.
There are two ways to send/receive the sound signal:
1) use Audiobus - the host that allows SunVox to communicate with many other programs;
2) use AU version of SunVox; many hosts support this format and allow you to add unlimited copies of SunVox (as instrument or effect) to your projects; The AU version will be available on your system immediately after installing SunVox from the App Store.

Android:
No info yet...

SunVox crashing for no apparent reason
Try to clean the settings of the SunVox. Launch it from console with the following command: sunvox clearall. If you are Windows user - just run the reset_sunvox.bat script.

iOS

How to import/export files from/to the SunVox internal storage?
There are several different ways
  • Use the Files app.
  • Use iTunes File Sharing to access the SunVox files. Launch the iTunes on your computer. Sync it with iOS device. Then find SunVox in the list of apps of your device. Select it and you will see the content of the internal SunVox storage.
  • In some other app (for example, Mail) click on the audio file and select Open in -> SunVox (this function may be hidden in some menus).
  • Use one of the many features presented in SunVox -> Main menu -> Export/import:
    • Wi-Fi export/import (can work even without Wi-Fi (locally) to access files from a browser on the same device);
    • Copy WAV file to system pasteboard;
    • Paste WAV file from system pasteboard;
    • Open in... (open SunVox file in some other app);
    • System export (copy file from SunVox to another place on your device);
    • System import (take SunVox-compatible file from another place on your device).

I cannot find files from the standalone app when using AUv3 version of SunVox
AU and standalone app store their files in different locations. You can use the following file transfer methods.

Method 1

  1. Open SunVox AU.
  2. Maximize the window with SunVox.
  3. Go to the SunVox main menu -> Export/import -> System import -> iOS document picker will open.
  4. Find the folder of the standalone version of SunVox -> pick some file -> selected file will be opened in the AU.
Method 2
  1. Open SunVox AU.
  2. Go to the SunVox main menu -> Export/import -> Wi-Fi export/import.
  3. Open Web Browser on the same device and enter the following address: localhost:8080
  4. You will see the file storage of the AU-version of SunVox.
  5. Click the file select button at the top of the page -> iOS document picker will open.
  6. Find the folder of the standalone version of SunVox.
  7. Pick some file.
  8. Press SEND.
  9. File will be sent to the folder of the AU.
  10. Go back to AU and close the Wi-Fi window.

Android

No signal from the microphone
Open the Android Settings -> Apps -> SunVox -> enable the "record audio" permission.
Known solutions for other problems

macOS

Copy/Paste don't work, the previous session is not saved