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.
- 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
Granular Weight Function (see time source):
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
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:
- 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: https://www.tangiblewaves.com/store/p90/ALGODRONE.html
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).
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: https://nightmachines.tv/downloads/Bytebeats_Beginners_Guide_TTNM_v1-5.pdf
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.