Undertone Generative Music System Manual
This manual provides an overview of the concepts underlying the Undertone generative music system, and describes some common workflows for managing content and generating soundscapes.
Undertone is first and foremost a generative sequencing and arrangement tool for various styles of music. It takes raw audio material in the form of Layers (single-shot samples and stems tracks), and various compositional and production oriented Attributes, and generates music out of them using the algorithmic rules embodied by a particular Engine.
This management user interface allows you to browse and administer the raw materials used by Undertone, and to generate music based on them.
There are two primary ways to use Undertone:
- To pre-generate tracks for use elsewhere. In this mode, you use Undertone to generate and export tracks as audio files for use outside of the system itself.
- To administer real-time generative music. In this mode, you manage audio streams generated in real time and heard directly by end users. Typically the music is generated by an Undertone runtime embedded in a mobile app, or one running on a server in a customer's server room.
Working Hygiene
When administering real-time generative music, it is important to understand that the changes you make in this system have direct consequences to the listening experience of end users. With this in mind, please adhere to the following general guidelines.
Audition Everything
There are track generation features embedded in all Layer, Attribute, and Genre editor pages. Use them whenever you create or modify something. Listen to your work not just in the context of a single generated track, but several of them. This will help you understand the range of possibilities that your changes introduce.
Keep Layers and Attribute In Draft State Until They Are Ready
For a Layer or an Attribute to be heard by end users, it must satisfy two conditions:
- Its status needs to be set to
Live. - It needs to be linked to at least one public-facing Genre.
So keep your content in a non-Live state until its ready. Alternatively, you can set it Live but refrain from linking it to a published Genre until you are ready.
Run Experiments Within Your Own Genres
Create your own Genres to experiment with. Link any experimental Layers and Attributes only to those Genres. Genres that are not linked to any public-facing playlist are safe to experiment with, since they are not heard by end users.
Concepts
Engines
An Engine implements an algorithm for generating a specific kind of music, e.g. "Ambient Electronic Stasis" of "Lo-Fi Hip Hop". Each Engine has a set of parameters that can be adjusted to control the nuances of the generated music.
You use an Engine by creating a Genre based on it.
Engines are created by the development team and are not user-editable through this interface.
Layers
A Layer is an audio file, or a collection of multiple audio files, that comprises raw source material in the form of a single-shot sample, stem track, or a full linear track.
There are various kind of Layers that differ in their content and their use, e.g. "Ambient Loop" and "Drum". See below for a reference.
You can browse, create, and manage Layers through the Layers page.
You use Layers by linking them to a Genre, which will allow the Engine running that Genre to use them as it generates Tracks.
Attributes
An Attribute embodies some characteristic of music that is not an audio file, but some other form of structured data. This might be a compositional attribute (e.g. a chord progression or a groove) or a production attribute (e.g. a reverb setting).
You can browse, create, and manage Attributes through the Attributes page.
Similar to Layers, you use Attributes by linking them to a Genre.
Genres
A Genre is a conglomeration of
- An Engine
- A set of Layers
- A set of Attributes
that together defines a generative space of music.
Genres are the central unit of music creation in Undertone, i.e. every generated Track is a track in a Genre.
Whenever a Track is generated, the Engine selects an assortment of Layers and Attributes from those linked to the Genre. This means that the same Engine may be used in different Genres for different musical results by virtue of having a different set of associated Layers and Attributes.
The number and variety of different Layers and Attributes linked to a Genre determines the generative variety of that Genre. A Genre with very few Layers and Attributes will generate more or less the same music every time, whereas a Genre with many Layers and Attributes can generate a wide variety of music.
You can browse, create, and manage Genres through the Genres page.
Tracks
A Track is an audio file generated by an Engine in a Genre. Tracks may be pre-generated and exported as audio files through this user interface, or generated in real time on end user devices by embedded Undertone runtimes.
A Genre can produce an infinite number of Tracks. Tracks are considered ephemeral and are not stored by the system. If you want to keep a specific Track, save it as an audio file yourself.
Playlists
A Playlist is a finite or infinite sequence of Tracks, defined by a specific configuration of Genres. Playlists are typically used in real-time listening contexts, to provide a continuous stream of music to end users. If you are only pre-generating tracks, you don't need a Playlist.
A Playlist may be a linear, specific sequence of Genres. It may also be a randomised sequence. Or it may be parameterised based on attributes such as time of day.
Some Playlists comprise of more than one Lane (A "Track" lane and a "Background" lane), where the "Track" lane is the primary music and the "Background" lane is a soundscape that plays underneath the primary music. This is used for cases where the music and the soundscape are of different Genres and play with different timing rules.
You can browse and edit Playlists and generate Tracks from them through the Playlists page.
Access Levels
The data you can see and operations you can do in Undertone are determined by your access level. There are three access levels:
- As a System Admin you can do everything and see all data.
- As an Account Owner you can do everything but only in the context of specific clients. You cannot see or modify the Genres and Playlists of other clients - and conversely, they cannot see or modify yours.
- As a Creator you can contribute Layers and Attributes, and associate them with the Genres of those clients you have access to. You cannot modify Genres, nor can you directly set anything to the Live status. What you can do is submit your work for review by an Account Owner or System Admin, who will make the final decision to publish it as Live or to request changes.
Common Workflows
Generating Tracks
To print and export tracks of a Genre, simply navigate to the Genre's page in the Genres section, and click the "Render Audio" button. You can generate, review, and export as many tracks as you need. The tracks will be in WAV format when downloaded.
You can also navigate to a Playlist in the Playlists section and generate tracks from there. This can be useful if you need the specific duration or parameterisation of a track that is defined in the context of a certain playlist.
When you download a track, you can choose to either download the mastered stereo mixdown, or individual stereo stem packs (background, bass, harmony, melody, drums).
Please note that when you download stems, they will not be mastered, meaning that they will not have the genre's Master Volume gain applied, nor the Master Compressor or saturation.
To generate Tracks with varying mix levels or fade times, click the Edit button on a Genre's page. Here you can adjust the mix, fade, and other parameters on the form and use the Preview feature on the bottom of the form to render and download tracks with the adjusted settings. You don't need to save the settings before rendering, and indeed should not save them if it is a temporary adjustment to a Genre that has already been published.
Contributing a Layer
- Find the Genre you would like to contribute to in the Genres section.
- Locate the Layers tab, and find the layer type you are contributing.
- Click the Add new button for that layer type.
- Upload the audio file(s) for the layer.
- Fill in all the required metadata for the layer.
- If you'd like the layer to be associated with any other Genres than the one you started from, you can add them in the Genres section.
- Audition the layer by using the Render Preview feature. Listen to it in at least a handful of different generated tracks, and make any necessary volume and other adjustments if it doesn't sound right.
- Save the layer:
- If you are a Creator, you can either save it as Draft (if it's not ready yet) or Submit it for Approval if it's ready to be reviewed.
- If you are an Account Owner or System Admin, you can Submit and Approve it immediately, or save it as Draft if you need to come back to it later.
Contributing an Attribute
- Find the Genre you would like to contribute to in the Genres section.
- Locate the Attributes tab, and find the attribute type you are contributing.
- Click the Add new button for that attribute type.
- If the attribute has a MIDI file, upload it.
- Fill in all the required metadata for the attribute.
- If you'd like the attribute to be associated with any other Genres than the one you started from, you can add them in the Genres section.
- Audition the attribute by using the Render Preview feature. Listen to it in at least a handful of different generated tracks, and make any necessary adjustments if it doesn't sound right.
- Save the attribute:
- If you are a Creator, you can either save it as Draft (if it's not ready yet) or Submit it for Approval if it's ready to be reviewed.
- If you are an Account Owner or System Admin, you can Submit and Approve it immediately, or save it as Draft if you need to come back to it later.
Creating a New Genre
- Go to the Genres section.
- Click the New Genre button.
- Enter a name for the Genre.
- Select the Client for the Genre, or select "None" if it is not to be published with any client.
- Select the Engine for the Genre. See the Engine Reference below for more information.
- Enter the Engine specific parameters for the Genre. If you are unsure about any of them, the default values are usually a good starting point.
- Click "Create Genre"
- On the Genre page, locate the Layers and Attributes sections to understand which Layers and Attributes are used by the Engine of this Genre.
- Add new Layers and Attributes by using the "Add new" buttons, or associate already existing Layers and Attributes with the Genre by finding them in the Layers and Attributes sections, editing them, and adding your new Genre to the Genres list on the form.
- Audition the Genre by using the "Render Preview" feature on the bottom of the various forms. Note that most Attributes and Layers that are listed on the Genre pages are in fact required by the respective Engine, so you will need to add at least one of each type to be able to hear meaningful generated results.
Engine Reference
Undertone currently implements the following Engines. Each one implements a different algorithm for generating music, and requires a different set of Layers and Attributes.
Ambient Looping Mixer
Ambient music consisting of several layers of looped ambient material, usually in the form of drones, pads, and melodic stems.
May play up to four layers simultaneously, categorised as "low", "low-mid", "high-mid dronal", and "high-mid melodic". A minimal Genre may, however, omit one or more of these layers.
May also include a synthesised binaural beats drone, single-shot pitched ornaments, background soundscapes, and track transition / bridging elements.
Linear Mixer
Music consisting of either a stack of stem tracks mixed linearly (i.e. all with the same duration, playing simultaneously), or a single pre-mixed track.
Ambient Electronic Stasis
Ambient music consisting of a single, harmonic, looping drone, overlaid with slow sampled pads, synthesized and/or sampler based bass, and background ambiences.
Ambient Electronic Chords
Ambient music consisting of slow sampled pads following a chord progression, overlaid with sparse sampled melodic elements, high sustains, risers, fallers, and background ambiences.
Ambient Keyboard Improv
Ambient music consisting of a sampled keyboard instrument (usually a piano), slowly improvising over a chord progression, overlaid with background ambiences.
Classical Lullaby
Ambient music consisting of a sampled keyboard instrument playing a pre-defined MIDI note sequence (typically a classical piano composition), overlaid with background ambiences.
Ambient Guitar
Music in the "ambient guitar" style, consisting of a single pre-mixed track, overlaid with a kick drum pulse, high sustains, risers, background brown noise, and background ambiences.
Disco Loop
Energetic music in a "French filter house" style, consisting of a single, structured harmonic loop - typically sampled from disco music, and a sampled bass instrument playing a bassline often composed specifically for that loop. Played on top of a drum track consisting of tops loops, kicks, shakers, rides, and cymbals.
Energy Stack
Energetic music consisting of a stack of structured stems designed to work together well (one or two chords stems, one or two melodic stems, a bass stems and ornamental stems). Played on top of a drum track consisting of tops loops, kicks, shakers, rides, and cymbals. Overlaid with background ambiences.
Structured Looping Mixer
Music in a style consisting of a stack of structured stems designed to work together well (one or two chords stems, one or two melodic stems, a bass stems, ornamental stems, and drum stems). Ornamented with additional percussion (cymbals, fills/scratches). Optionally overlaid with brown noise or a nature soundscape.
Note: The "Stem Stack" layer type used in this video is now called "Stem Loop Stack".
Nature Soundscape
A standalone non-musical nature soundscape track, consisting of one to three of biophony, geophony, and anthrophony layers.
Silence
Produces silent output. Useful for including in Playlists where silence is needed at specific points or at specific times of day. May also generate accurate reproductions of "4'33" by John Cage.
Layer Reference
The following types of Layers are currently supported by Undertone. Each Layer type has a different set of metadata. To understand which Layer types are used by a particular Genre, please refer to the Genre's page in the Genres section.
Background Layers
Seamlessly looped non-musical ambiences, typically 1-3 minutes in duration. Used to create backround atmospheres by many Engines.
Subtypes:
- Geophony - Sounds of the Earth, e.g. wind, rain, water, fire, etc.
- Biophony - Sounds of living organisms, e.g. birds, insects, frogs, etc.
- Anthrophony - Sounds of human activity, e.g. traffic, machinery, voices, etc.
- Segue - Sounds designed as transitions to bridge over two consecutive Tracks in a Playlist.
- Brown Noise - A type of noise that has a spectral density that decreases with frequency. Often overlaid with other sounds (e.g. anthrophonic).
Ambient Loop Layers
Seamlessly looped, harmonic, ambient material, typically 1-3 minutes in duration. Used to create ambient music by several Engines.
Subtypes:
- Harmonic Drone - Harmonic material consisting of drones or slow pads.
- Background Drone - Harmonic material designed to fade into the background as added texture.
- Melodic - Melodic material.
Structured Loop Layers
Seamlessly looped, harmonic material of a specific number of bars in duration at a specific tempo. Used by several non-ambient Engines.
Subtypes:
- Chord Loop - A loop of harmonic material, e.g. a snippet of a disco track.
Linear Track Layers
A full linear track, typically several minutes in duration. Used by the Linear Mixer and a few other Engines.
Subtypes:
- Full Track - A full, pre-mixed, standalone track.
- Stem Track - A stem or a submix of a track.
Sampler Layers
A collection of single-shot samples comprising a "sound font" of a specific instrument played at various pitches. Used by several engines to make melodies, pads, basslines, etc.
Subtypes:
- Bass - A bass instrument.
- Lead - A lead instrument.
- High Sustain - A high sustain instrument such as a held high synth or violin note. Usually seamlessly looped to support arbitrary durations.
- Pad - A pad instrument.
- Arp - An instrument suitable for arpeggio lines. Usually a short synth sound.
- Keyboard Melody - A keyboard instrument for melodic ("right hand") playing. Often a piano.
- Keyboard Chords - A keyboard instrument for chords ("left hand") playing. Often a piano.
Transition Layers
Single-shot samples designed to be used as transitions to tie together different sections of a track.
Subtypes:
- Riser - A sound that marks a rise in energy.
- Faller - A sound that marks a fall in energy.
- Mega Riser - A long riser that can be used to build up energy over a sustained breakdown section.
Single Shot Layers
Pitched, single-shot samples.
Subtypes:
- Pitched Ornament - An ornamental sample comprising of harmonic material (a single note or a chord). Could be a vocal, a chime, or a bell, etc.
Drum Single Shot Layers
Non-pitched, single-shot percussive samples.
Subtypes:
- Kick - A kick drum sample.
- Snare - A snare drum sample.
- Dub Snare - A snare drum sample with a long reverb tail or delay effect, used for ornamentation.
- Ride - A ride cymbal sample.
- Cymbal - A crash cymbal sample.
- Cymbal Layer - A sound designed to be layered with other cymbal sounds, e.g. a white noise sweep.
- Reverse Cymbal - A reverse crash cymbal sample.
- Shaker - A shaker or tambourine sample.
- Kick Scratch - A scratch sound formed out of a kick drum sample.
- Snare Scratch - A scratch sound formed out of a snare drum sample.
- Fill Scratch - A scratch sound used for fills.
Layers
A sequence of drum samples, sliced up from a loop, supporting recombination for different grooves and tempos.
Subtypes:
- Percussion Loop Slices - A sliced up shaker, tambourine, or other percussive loop.
- Build-Up Snare Stages - A sequence of snare drum samples increasing in energy, used for build-up sections.
Drum Loop Layers
A full drum loop, one or several bars in duration at a specific tempo.
Subtypes:
- Top Loop - A drum loop consisting of tops, e.g. hi-hats, claps, etc. Ideally with no kick included.
- Full Loop - A full drum loop, including tops, kicks, snares, etc.
Stem Loop Stack Layers
A collection of structured looped stems designed to work together well, all at the same tempo and harmonically compatible.
Layer types:
- Drums - A drum stem loop.
- Drums Intro - A drum stem loop only to be used in an intro section of a track.
- Drums Main - A drum stem loop only to be used in a non-intro section of a track.
- Bass - A bass stem loop.
- Chords Primary - A primary chords stem loop.
- Chords Primary Intro - A primary chords stem loop only to be used in an intro section of a track.
- Chords Primary Main - A primary chords stem loop only to be used in a non-intro section of a track.
- Chords Secondary - A secondary chords stem loop. Often used by an engine to create more energy at or after a build up.
- Melodic Primary - A primary melodic stem loop.
- Melodic Primary Intro - A primary melodic stem loop only to be used in an intro section of a track.
- Melodic Primary Main - A primary melodic stem loop only to be used in a non-intro section of a track.
- Melodic Secondary - A secondary melodic stem loop. Often used by an engine to create more energy at or after a build up.
- Strings - A strings / high sustains stem loop.
- Bleeps - A bleeps / ornamental stem loop.
- Noise - A white / other noise stem loop.
- Tops - A tops / percussion stem loop.
- Riser Primary - A riser.
- Riser Secondary - A riser.
- Faller - A faller.
- Pitched Ornament - A pitched ornament.
- Cymbal - A cymbal crash.
Linear Stem Stack Layers
A collection of structured stems designed to work together well, all at the same tempo and harmonically compatible. Used exclusively by the Linear Mixer Engine.
Layer types:
- Background - A background soundscape stem.
- Drums - A drum stem.
- Bass - A bass stem.
- Chords Primary - A primary chords stem.
- Chords Secondary - A secondary chords stem.
- Melodic Primary - A primary melodic stem.
- Melodic Secondary - A secondary melodic stem.
- Tops - A tops / FX / percussion stem.
Attribute Reference
The following types of Attributes are currently supported by Undertone. Each Attribute type has a different set of metadata and is used to control a different aspect of the music generated by an Engine.
To understand which Attributes are used by a particular Genre, please refer to the Genre's page in the Genres section.
Shaker Pattern
A MIDI file, providing a looping shaker or tambourine pattern.
Should use the Shaker general MIDI instrument (MIDI note 69).
Ride Pattern
A MIDI file providing a looping ride cymbal pattern.
Should use the Ride general MIDI instrument (MIDI note 51).
Kick Pattern
A MIDI file providing a looping kick drum pattern.
Should use the Kick general MIDI instrument (MIDI note 36).
Fill Pattern
A MIDI file providing a snare fill pattern.
Should use the Snare general MIDI instrument (MIDI note 37 or 64).
Bass Movement
Settings for how the bassline of a track should move from note to note in pitch space.
Has two possible modes of operation:
Follow Chords
In this mode, the bassline will follow the chord progression of the track.
You may specify which tones of the base triad of the current chord the bass is allowed to use:
- Bass - the lowest note of the chord. Usually the root, but might not be if the chord is an inversion.
- Root - the root note of the chord.
- Third - the third note of the chord. Major or minor third, or might be a suspended tone, depending on the type of the chord.
- Fifth - the fifth note of the chord. Almost always a perfect fifth above the root, but in case of diminished chords, it might be a diminished fifth.
Follow Scale
In this mode, the bassline will follow the scale of the track, only playing specific scale degrees.
You may specify which scale degrees the bass is allowed to use (1-7). E.g. 1 = tonic of the key of the track, 4 = dominant of the key. Choosing one scale degree only will effectively result in pedal point bass, as it will only be allowed to play that one note (e.g. the tonic).
You can additionally choose for the bassline to favour chord tones over scale degrees, when following scale degrees. This means that when there are multiple scale degrees for the bass to choose from, it will try to pick ones that are also included in the current chord. Leaving this unchecked may result in occasional dissonances, which may or may not be desired.
You also specify which scale modes this bass movement is designed for. For example, if you specify "major" as the only scale mode, the bassline will only be used in tracks that are in major mode.
Bass Pattern
A MIDI file providing a looping bassline pattern.
Bass Synth Preset
Envelope and tone colour settings for a synthesised sub-bass instrument provided by some Engines.
Groove
A MIDI file providing a rhythmic Groove for a track.
Should be a succession of sixteenth notes. The deviations in timing from the 16th note grid will be used for timing humanisation, and the velocities will be used for dynamic humanisation.
Chord Progression
A sequential list of chords forming a chord progression. Expressed as fully voiced chords in a specific key and mode. An AI assistant is available to generate chord progressions based on text prompts, instead of manually entering them.
Onset Pattern
A sequential numeric list specifying the number of notes triggered at successive sixteenth notes. Each number in the list represents a sixteenth note, and the number itself represents the number of notes to trigger at that time.
Depending on the context it's used in, the pattern may represent slightly different things. When used for keyboard accompaniment, it can represent the left-hand playing of a keyboard instrument (e.g. arpeggios, broken chords.) When used in the context of ornament placement, it can represent the number of ornaments to trigger at successive sixteenth notes in a section of a track.
For example, the repeating pattern 1 - 1 - 1 - 1 represents a simple arpeggio with one note played on every sixteenth note,
and the non-repeating pattern 3 represents three notes of a chord played simultaneously at the start of each bar.
Harmonic Rhythm Pattern
A sequential list of numbers representing the duration of each chord in a chord progression. Each number in the list represents the number of bars that the chord should be held.
For example, the pattern 1 - 1 - 1 - 1 represents a chord progression where each chord is held for one bar.
Note that the length of a harmonic rhythm may sometimes be different from the length of a chord progression, if, for example, a Genre includes three chord progressions and harmonic rhythms with four entries. In these cases, the two lists are cycled against each other, forming a more complex harmonic rhythm structure.
Meter Pattern
A sequential list of numbers representing the number of beats in each bar of a track, and the relative velocities of those beats.
Effectively, defines both the meter and the metric accentuation of a track.
Each number in the list represents the velocity of a beat, with 0 being silent and 1 being the loudest. The total length of the list defines the number of sixteenth notes in a bar.
Timing Humanisation Preset
A range of numbers controlling, in milliseconds, how much the timings between consecutive notes in a track should be varied, to "humanise" the track and make it sound less mechanical.
Timeline
A sequence of sections and their durations (in bars) that define the structure of a track.
EQ Preset
A preset for a two-filter parametric equaliser, controlling the types of filters, their cutoffs, gains, and Q factors. Equalisers may be used on the "master" track of an Engine to shape the overall frequency response of the mix, or for individual groups of instruments.
The target of an EQ preset is controlled by tagging it accordingly. Refer to the Genre page of your Genre to understand which EQ presets that Genre may use, and how it expects them to be tagged.
Delay Preset
A preset of a delay effect. When included for a particular layer, a stereo feedback delay will be added to the layer audio chain. The delay may be set to a tempo-relative time. It may function in straight stereo or ping pong mode. There is an adjustable bandpass filter in the feedback path, which is used for further attenuation in addition to the feedback gain.
Reverb Preset
A reverb preset, controlling the settings of a reverb effect included in an Engine.
Compressor Preset
A compressor preset, controlling the settings of a master bus compressor included in the engine. When included, this compressor will be applied as a final mastering pass on the mixed output of the Engine.
Binaural Beats Drone Preset
A preset controlling the settings of a synthesised binaural beats drone generated by an engine. The preset specifies the range of difference tones generated by the drone. The actual base frequency is determined by the key of the track, which relies on other harmonic material selected by the Engine.
Noise Preset
A preset controlling the settings of a synthesised noise generator included in an engine. The preset specifies the type of noise generated by the noise generator (white noise, pink noise, or Brownian noise).