All Projects → carrierdown → Mutateful

carrierdown / Mutateful

Licence: gpl-3.0
Add-on for Ableton Live that enables live coding functionality fully integrated into Live's session view.

Projects that are alternatives of or similar to Mutateful

Nba Go
🏀 💻 The finest NBA CLI.
Stars: ✭ 3,634 (+1153.1%)
Mutual labels:  cli, live
Sonic Pi Tool
🎻 Controlling Sonic Pi from the command line
Stars: ✭ 133 (-54.14%)
Mutual labels:  cli, osc
Nba Live
Watch NBA games in the terminal, the content in Chinese only.
Stars: ✭ 181 (-37.59%)
Mutual labels:  cli, live
Angular Ssr
Angular 4+ server-side rendering solution compatible with @angular/material, jQuery, and other libraries that touch the DOM (as well as providing a rich feature set!)
Stars: ✭ 283 (-2.41%)
Mutual labels:  cli
Vk
A console client for vk.com
Stars: ✭ 285 (-1.72%)
Mutual labels:  cli
Meguca
anonymous realtime imageboard focused on high performance and transparent moderation
Stars: ✭ 286 (-1.38%)
Mutual labels:  live
Kingpin
CONTRIBUTIONS ONLY: A Go (golang) command line and flag parser
Stars: ✭ 3,178 (+995.86%)
Mutual labels:  cli
Bruce Cli
A React/Vue application automation build scaffold with zero configuration out of the box
Stars: ✭ 283 (-2.41%)
Mutual labels:  cli
Simpletable
Simple tables in terminal with Go
Stars: ✭ 288 (-0.69%)
Mutual labels:  cli
Svgo
⚙️ Node.js tool for optimizing SVG files
Stars: ✭ 17,050 (+5779.31%)
Mutual labels:  cli
Ink
🌈 React for interactive command-line apps
Stars: ✭ 17,505 (+5936.21%)
Mutual labels:  cli
Stag
Streaming bar graphs. For stats and stuff.
Stars: ✭ 286 (-1.38%)
Mutual labels:  cli
Aws Rotate Key
Easily rotate your AWS access key. 🔑
Stars: ✭ 288 (-0.69%)
Mutual labels:  cli
Dosxvpn
Easily deploy your own personal VPN server with DNS adblocking running on DigitalOcean
Stars: ✭ 284 (-2.07%)
Mutual labels:  cli
Consola
Elegant Console Logger for Node.js and Browser 🐨
Stars: ✭ 3,461 (+1093.45%)
Mutual labels:  cli
Cli
Tools for making beautiful & useful command line interfaces
Stars: ✭ 283 (-2.41%)
Mutual labels:  cli
Nestjs Console
A nestjs module that provide a cli to your application.
Stars: ✭ 284 (-2.07%)
Mutual labels:  cli
Data Science At The Command Line
Data Science at the Command Line
Stars: ✭ 3,174 (+994.48%)
Mutual labels:  cli
Rewardlayout
仿斗鱼直播送礼物和连击效果动画
Stars: ✭ 286 (-1.38%)
Mutual labels:  live
Chalk
🖍 Terminal string styling done right
Stars: ✭ 17,566 (+5957.24%)
Mutual labels:  cli

mutateful

tl;dr: mutateful enables live coding in Ableton Live's session view. Set up transformations that trigger whenever a source clip is changed, including arpeggiation, shuffling, and ratcheting/retriggering.

mutateful in action

With live coding being all the rage this looks like a groovy new idea to bring that excitement and its new possibilities to Ableton. I’m watching closely.

— Matt Black, co-founder of Ninja Tune & Coldcut.

Concept

mutateful reimagines Ableton Live's session view as a spreadsheet-like live coding setup. You add formulas to dynamically shuffle, arpeggiate, constrain, scale, retrigger, and otherwise transform clips in myriad ways. Formulas operate on other clips and/or textual inputs to produce new clips. Unlike most experimental sequencers, mutateful leverages Live's built-in sequencing functionality, allowing you to use any existing MIDI clip as a source of fresh inspiration.

Installing

Go to the latest release for installation instructions and download links for Windows and OS X.

See it in action

creating beat variations with mutateful

Creating beat variations

mutateful demo video 1

Demo #1: concat, constrain, transpose

mutateful demo video 2

Demo #2: ratchet, shuffle, interleave

A musical spreadsheet

The easiest way to understand what mutateful does is by comparing it to a traditional spreadsheet. Let's say you have two numbers that you'd like to multiply. You put one number in cell A1, another in A2, and in A3 you enter the following (very simple) formula: =A1 * A2. Cell A3 will then contain the result of this operation, and will update automatically whenever A1 or A2 changes.

Since the session view in Ableton Live presents clips in a spreadsheet-like grid, mutateful works the same way, only with more musically interesting commands. For instance, you could shuffle the contents of clip A1 using the contents of clip A2. The pitch values of the various notes in clip A2 would then be used to shuffle the order of notes in A1. Similar to the example above, we would like the result to be inserted into clip A3, but instead of using a spreadsheet command we will use a mutateful command, as follows: =A1 shuffle -by A2. In this example, A1 is a source clip (i.e. the clip that will be transformed), and A2 is the control clip (i.e. the clip that controls the transformation). The latter could be omitted, in which case clip A1 would be shuffled using itself as the control clip. The formula for this would simply be =A1 shuffle.

Usage examples

Creating an arpeggio from a sustained note and a chord

=B1 slice 1/2 transpose 0 7 slice 1/16 1/8 transpose -by C1

This formula does the following: Start with the single sustained note contained in the clip at position B1. Slice it in half, keeping the first note unchanged and transposing the second note 7 semitones up (a perfect fifth). Now, slice the resulting two half-notes into a pattern alternating between 1/16 and 1/8th notes. Finally, transpose this pattern with the chord contained in the clip located at position C1.

Arpeggio from note and chord

Interleaving two clips together

=B1 C1 interleave -mode event

This formula combines the notes contained in the clips located at positions B1 and C1, so that the notes from each clip are played one after the other in an alternating fashion.

Interleaving two clips

Adding retriggering to a beat

=A4 ratchet 1 2 3 6 1 2 5

This formula adds retriggering (also called ratchets) to the beat contained in clip A4. The numbers specify the retrigger amount for each note encountered in the clip. In this case, the first note in the clip will be divided into one (i.e. it will be kept as is), the second one will be divided into two, and so on. When the last number is reached it will loop back to the beginning if there are still unprocessed note events left in the clip.

Adding retriggering

Ratchet accepts a number of other parameters to scale the resulting retriggers in various ways, including starting fast and going gradually slower towards the end of the note. This can be achieved by adding the -shape parameter and specifying EaseIn (the default is Linear). In addition, the resulting output can be tamed slightly by adding the -strength parameter and setting it to 0.5 (i.e. 50% strength):

=a4 ratchet 1 2 3 6 1 2 5 -shape easein -strength 0.5

Adding retriggering with shaping

Quick command reference

Command Parameters (default values in bold) Description
arpeggiate
arp
‑rescale <Number: 2>
‑removeoffset
‑by <Clip reference>
Arpeggiates the given clip using another clip, or itself.
concat
cat
Concatenates two or more clips together.
crop <list of Musical fraction: 2> Crops a clip to the desired length, or within the desired region.
filter
flt
<Musical fraction: 1/64>
‑invert
Filters out notes shorter than the length specified (default 1/64). If -invert is specified, notes longer than the specified length are removed.
interleave
il
‑chunkchords
‑solo
‑mode NotSpecified|Event|Time
‑ranges <list of Musical fraction: 1>
‑repeats <list of Number: 1>
‑skip
Combines notes from two or more clips in an interleaved fashion.
legato
leg
Removes silence between notes. Basically the same as the built-in legato function in Live, but often useful in the context of a mutateful formula as well.
loop <Decimal number: 1> Lengthens the incoming clips according to the factor specified (e.g. 2 would double the clip length)
mask ‑by <Clip reference> Creates a masking clip which is used to remove or shorten notes not overlapping with the mask clip. If no -by clip is specified, a sustained note is used instead, effectively inversing the clip rhythmically.
monophonize
mono
Makes the clip monophonic by removing any overlapping notes. Lower notes have precedence over higher notes.
padding
pad
p
<Musical fraction: 2>
‑length <Musical fraction: -1>
‑post
Adds silence (i.e. padding) at the start of a clip, or at the end of a clip if -post is specified. If -length is specified, padding is calculated so that the total length of the clip matches this. If length is shorter than the current clip length, the clip is cropped instead.
quantize
qnt
q
<list of Musical fraction: 1/16>
‑amount <Decimal number: 1.0>
‑by <Clip reference>
Quantizes a clip by the specified amount against a regular or irregular set of divisions, or even against the timings of another clip.
ratchet
rat
<list of Number>
‑autoscale
‑by <Clip reference>
‑mode Velocity|Pitch
‑shape Linear|EaseInOut|EaseIn|EaseOut
‑strength <Decimal number: 1.0>
‑velocitytostrength
Creates retriggers/ratchets in the current clip, based on a sequence of passed in values or another clip. The ratchets produced can be scaled and shaped in various ways.
relength
relen
rl
<Decimal number: 1.0> Changes the length of all notes in a clip by multiplying their lengths with the specified factor.
remap
rm
‑to <Clip reference> Remaps a set of pitches to another set of pitches
resize
rs
<Decimal number: 1.0> Resizes the current clip based on the specified factor (i.e. 0.5 halves the size of the clip, effectively doubling its tempo)
scale
constrain
scl
‑by <Clip reference>
‑strict
Uses a clip passed in via the -by parameter as a scale to which the current clip is made to conform. If -strict is specified, notes are made to follow both the current pitch and octave of the closest matching note.
setlength
length
len
sl
<list of Musical fraction: 1/16> Sets the length of all notes to the specified value(s). When more values are specified, they are cycled through.
setpitch
pitch
sp
<list of Number>
‑by <Clip reference>
Sets the pitch of all notes to the specified value(s). When more values are specified, they are cycled through.
setrhythm
rhythm
sr
‑by <Clip reference> Retains pitch and velocity from the current clip while changing the timing and duration to match the clip specified in the -by parameter.
shuffle
shf
<list of Number>
‑by <Clip reference>
Shuffles the order of notes by a list of numbers of arbitrary length, or by another clip. When another clip is specified, the relative pitch of each note is used to determine the shuffle order.
skip <list of Number: 2> Creates a new clip by skipping every # note from another clip. If more than one skip value is specified, they are cycled through.
slice
slc
<list of Musical fraction: 1/16> Slices a clip (i.e. cutting any notes) at a regular or irregular set of fractions.
take <list of Number: 2> Creates a new clip by taking every # note from another clip. If more than one skip value is specified, they are cycled through.
transpose
tran
tp
<list of Number>
‑by <Clip reference>
‑mode Absolute|Relative
Transposes the notes in a clip based on either a set of passed-in values, or another clip.
velocityscale
vel
vs
v
<Musical fraction> Scale a clips notes' velocities.

Parameter types

Type Description
Clip reference Cells in the session view are referenced like they would be in a spreadsheet, i.e. tracks are assigned letters (A-Z) and clip rows are assigned numbers (1-N). Example: track 1 clip 1 becomes A1, track 2 clip 3 becomes B3.
Musical fraction These are commonly used in sequencer software to denote musical fractions like quarter notes, eight notes and so on. Examples: quarter note = 1/4, eighth note = 1/8.
Number Whole number (integer), either negative or positive
Decimal number Decimal number, from 0.0 and upwards

Full documentation

I've started adding more in-depth documentation in our wiki. There's still a long way to go, though.

Be sure to star this repo and/or follow me at twitter.com/KnUpland for updates.

Compiling from source

Pre-requisites

  • Git
  • .NET Core 3 SDK

Building

Using the command line/terminal, navigate to the src folder inside the mutateful repository and run:

Windows: dotnet publish -c Release
MacOS / OS X: dotnet publish -c Release /p:RuntimeIdentifier=osx-x64 /p:PublishTrimmed=false

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].