Byte Oscillator

Type: Module

Category: Oscillators

Updated: Nov 14, 2020

Manufacturer: Weevil

Contact Manufacturer

$15.00 $25.00

On Sale

Byte Oscillator lets you to create your own waveforms using mathematical expressions. You can create bytebeat patches, program your own effects, create "normal" oscillators using the built in wave functions or create limited wavetables using the table/array construct.

The oscillator has two main parts, Algorithm and Sources. The algorithm is the function that creates the sound. You can write your own function or use any of the included algorithms.There are also buttons and CV that allows you you to modify the algorithm. The sources are the parameters for your algorithm. Three type of sources are supported: TIME, VALUE and AUDIO IN. TIME sources can be thought of as an oscillator with controls reminding of that. CONSTANT sources can be used to tweak the algorithms and AUDIO IN sources allowes you to mix in external sources into your algorithm.

With little, or no, knowledge you can use the built in algorithms to get interesting sounds, melodies and rhythmic patterns. With some time investment you can go really deep into sound creation.

Youtube sample patches


ALG - select algorithm, the arrows below lets you select next and previous algorithm. There are three types of algorithms:

  • Bytebeat - digital and usually rhythmic
  • Oscillator - works like a normal oscillator
  • Pattern - a small algorithm seed that is randomly extended

MUT - mutate the algorithm

CMPL - complicate the algorithm

SMPF - simplify the algorithm

RND - randomize VALUE sources

RES - reset to selected algorithm

Sample rate (8kHz default) - set sample rate

Bit rate (8bit default) - set bit depth

MAP - maps unused sources to constant numbers in your formula

MAIN - Set main algorithm edit mode

MCR - Set macro edit mode (see below)

SMPL - Set sample management mode (see below)

Edit algorithm window - double click to edit the algorithm. The oscillator will parse it and update the output sound as soon as you leave the edit window.


  • + addition
  • - subtraction
  • * multiplication
  • / division
  • % modulus
  • & bitwise and
  • | bitwise or
  • ^ bitwise xor
  • ~ bit inverse
  • << left shift
  • >> right shift


  • FOLD(T) folds down
  • CLIP(T) cuts based on max value based on bit depth
  • ABS(T) absolute value
  • INV(T) inverted value (BD - T%BD)
  • MAX(T,U) max value of T and U
  • MMIN(T,U) min value of T and U

Wave functions:

  • WSIN(T)
  • WTRI(T)
  • WSAW(T)
  • WRMP(T)
  • WSQR(T)


  • MCR1
  • MCR2
  • MCR3
  • MCR4
  • MCR5
  • MCR6


  • SMPL1(T)
  • SMPL2(T)
  • SMPL3(T)
  • SMPL4(T)
  • SMPL5(T)
  • SMPL6(T)

Granular Weight Function (see time source):

  • GWT(T)
  • GWU(T)
  • GWV(T)
  • GWX(T)
  • GWY(T)
  • GWZ(T)

Variables and constants:

  • T, U, V, X, Y, Z the sources (see below)
  • BD max value the selected bit depth allows for (2 ^ bit depth)
  • SL1, SL2, SL3, SL4, SL5, SL6 sample length, defaults to BD if no sample is loaded

Parenthesis are supported.

Hard brackets can be used to implement tables / arrays, like this:
[1, 2, 140, BD, 0](T)

Please check the tutorial patch for a full explanation on how to use tables.

Relational operators are not yet supported (will include that in a later release).

Each cycle, the algorithm is calculated and the number is converted voltage according to the following formula: Voltage(val) = 10 * (val % (2^bit depth)) / (2^bit depth) - 5


Macros are algorithms, just like the main algorithm described below. Macros can be used to simplify advanced algorithms (to avoid repetition) or to allow the byte oscillator to work as 6 independent oscillators.

To edit a macro click on the MCR-button next to the algorithm input text box. Select the macro you want to edit and add your algorithm.

The value of a macro can be assessed in two ways:

  • Use it in the main algorithm in the same way you use a variable of constant: MCR1.
  • Output the value of the macro in one of the source output jacks (set the source output type to MCR1).

To use a macro:

  • Click on MCR
  • Click on MCR1
  • Enter WTRI(T) into the edit algorithm window
  • Click on MAIN
  • Change the algorithm to MCR1

Macros are described in two of the tutorials in the "Byte Oscillator Tutorial" preset pack.


The byte oscillator supports up to 6 samples. Each sample can be up to 20 seconds long (with sample rate 48kHz). In the algorithm you use a sample in the same way as you use a wave function, for example SMPL(T).

To edit a sample, click on the SMPL-button next to the algorithm input text box. Select the sample you want to edit. Here you see the following buttons: LOAD - load a sample Previous sample - load the previous sample in your current folder (only works when a sample is loaded) Previous sample - load the next sample in your current folder (only works when a sample is loaded) LOOP - turn looping on or off NORM - normalize the sample to sit within the -5V to +5V range REV - reverse the sample

To use a sample:

  • Click on SMPL
  • Click on SMPL1
  • Click on LOAD and select a sample
  • Click on MAIN
  • Change the algorithm to SMPL1(T)

Samples are described in two of the tutorials in the "Byte Oscillator Tutorial" preset pack.


The sources are the variables you use in your function. The Byte Oscillator supports up to six different sources: T, U, V, X, Y, Z. To edit a source you click on the button with the source name. The button is green when selected, red if its not used in the algorithm and gray otherwise.

Below each button you either have a knob (for TIME and AUDIO IN types, or an edit box for VALUEs), below this you see two CV input jack and a source output jack. These controls are always displayed (regardless of if the source is selected or not).

Each source has a value that is used when calculating the value of the algorithm. How the source modifies its own values is based on the source type- Three source types are supported:

  • TIME - Source value continuously increased (source T is locked to TIME)
  • CONSTANT - Source value is set to a specific number
  • AUDIO IN - Source value from audio in signals (into CV1 jack and CV2 jack)

You set the output type for the output jack with the source output type button, options are:

  • SOURCE -the source value (value MOD BD)
  • GATE - 5V if source value is changed to 0, otherwise 0V
  • MACRO 1 - value of macro 1
  • MACRO 2 - value of macro 2
  • MACRO 3 - value of macro 3
  • MACRO 4 - value of macro 4
  • MACRO 5 - value of macro 5
  • MACRO 6 - value of macro 6

Some controls are always available, regardless of source type:

  • Source type (see above)
  • Source output type (see above)
  • CV1 Target
  • CV1 Attenuverter
  • CV2 Target
  • CV2 Attenuverter

TIME source

The standard source you will use is a TIME source, the value of a time source will increase every time the algorithm is calculated and thus continuously change the calculated value of the algorithm.

The octave knob is always displayed (source does not need to be selected).

OCT knob (below source button) - sets the octave value of the source SEMI knob - sets semitone POS knob - sets the reset point (used for reset mode GATE and GRANULAR) PFNE knob - finetunes reset point GRNL knob - set granule size (used for reset mode GRANULAR)

Time mode button, defines the pitch (update speed) of the source:

  • FREE - ignores pitch input
  • V/OCT - normal volt per octave based on pitch input
  • OFFSET - offsets the pitch based on source T (one volt per octave)
  • OVERTONES - offsets the pitch based on source T (overtones and undertones)
  • STEP - increase value only when a gate signal is sent into the STEP input jack

Overflow mode button. The source value increases every cycle (8000 per second by default). The overflow mode lets you decide what happens with the value when it goes above the maximum allowed value defined by bit depth (2^bit depth). Options are:

  • NONE
  • MOD, resets the value to 0
  • FOLD, folds the value back

Reset mode button. This lets you control if and when the value is reset. When a value is reset its set to a value defined by POS and PFNE according to the following formula: position 10 sample rate (between 0 and 10 seconds). Options are:

  • NONE - value never reset
  • GATE - value reset when receiving a gate signal in GATE (or in CV if CV mode set to sync)
  • GRANULAR - value reset when receiving a gate signal in GATE (or in CV if CV mode set to sync). Also resets if after a specific time frame defined by the granule length (0 to 1 second).

The GRANULAR mode was inspired by the module Algo Drone:

Granular mode on samples can sometime result in clicks when the granule restarts. To help with this you can use the granular weight function, this works as as an envelope around the granule. The granular weight function is unique per source (see the names of them in the operator list above), you use it like this on a sample: GWT(SMPL1(T))

CV target button (above CV1 and CV2) sets the target of the CV inputs, options are:

  • PITCH - modifies pitch
  • OCT - modifies octave or overtone
  • PHASE - modifies phase (+/- maximum value based on bit depth)
  • POSITION - modifies position
  • GRANULE SIZE - modifies granule size
  • SYNC - use CV as soft sync, attenuverter sets how sensitive it is (all the way to the right is hard sync, all the way to the left is no sync at all).

VALUE source

VAL sources are static numbers. You can set the number in the edit window below the source button. You can also increase and decrease the value with the up and down arrows. The edit field and the up and down arrow are always displayed (source does not need to be selected).

You can use the range button to set the source range. Options are:

  • LOW, 0-15
  • RANGE, 0-max number based on bit depth
  • PRIMES, 0-max number based on bit depth (primes only)
  • BINARY, 0-max number based on bit depth (geometric series 2^x)
  • FREE, any number

AUDIO IN source

The AUDIO IN type use the two CV input jacks as audio inputs, the knob above it works as a mixer between the two inputs.

The mix knob is always displayed (source does not need to be selected).

The input value is converted to a value between 0 (for -5V) and max value based on Bit Depth (2^BD - 1) for +5V.


The slew knob (SLW) applies a little bit of slew to the output value (you can see this as a very simple filter). Since the output for most algorithms are very harsh I recommend adding a filter after the byte oscillator.

In the bottom right part of the module you find the global input and output jacks:

  • STEP, used to increase the value of TIME sources in STEP mode
  • GATE, used to reset TIME sources in GATE mode
  • PITCH, used to set the pitch for TIME sources (not used in FREE and STEP mode)
  • OUT, audio out for the module

Below each source you also see a CV out, this will convert the value of the source to voltage according to the following formula: Voltage(val) = 10 * (val % (2^bit depth)) / (2^bit depth) - 5

For more info on byte beat, check this excellent tutorial from The Tuesday Night Machines:

I have also added a small preset patch (free) with a set of tutorial patched that should make it easier to get started, just search for Byte Oscillator Tutorial in the store.