DJ Waveforms

A DJ performance layer for Ableton Live: moving waveforms, deck transport, hot cues, loops, a track library, a mixer, and MIDI and keyboard control, all driving Live in real time.

What it is

DJ Waveforms turns the audio tracks of an Ableton Live set into DJ decks. Each deck shows a scrolling, beat-aligned waveform of the clip playing or parked on that track, coloured by frequency: red for bass, green for mids, blue for treble. You play, pause, cue, loop, jump and nudge each deck, and the app applies every action to Live itself, so what you hear always comes from Live's own audio engine.

Every warped clip follows Live's one tempo, so decks stay in sync, and EQ, effects, routing and recording are whatever you build in Live. DJ Waveforms adds the performance surface Live is missing.

Everything is Live underneath. The app never processes audio. It reads positions, tempo and levels from Live and sends the same launch, seek and mixer commands you could perform by hand. Close it mid-set and Live keeps playing.

Requirements

The app is local-only: it talks to Live on your machine and is never reachable from the network. No internet is needed at a gig, and this manual comes with the app: Settings > User manual opens it in your browser. Activating a license needs the internet once (see License).

First run and setup

  1. Launch DJ Waveforms. The window opens at once, even if Live is not running, and shows "Waiting for Live...".
  2. Install the bridge (first time only). If the Remote Script is not installed, after a few seconds the centre of the window offers an Install Remote Script button (also in Settings under "Live connection"). Click it. The app copies the script into your Ableton User Library (see Where the script goes).
  3. Enable it in Live (first time only). Open Preferences > Link/Tempo/MIDI, set any free Control Surface slot to AbletonJS, and leave its Input and Output on None: it talks to Live over its own connection, not over MIDI. Then restart Live. Live has no way to automate this step.
  4. Open your Live set. The app connects on its own: the status pill turns green ("live") and your audio tracks appear as decks.

From then on, launching the app while Live runs, or Live while the app runs, connects by itself. Keyboard shortcuts work out of the box: the first run installs an editable "Keyboard shortcuts" mapping with Serato-style defaults (see Keyboard shortcuts).

Where the script goes

The script is installed as Remote Scripts/AbletonJS inside your Ableton User Library, the folder Live shows under Preferences > Library > Location of User Library. The app reads that setting from Live itself, so the script lands where Live looks: the default place, Dropbox, an external drive, wherever you put it. With more than one Live version installed, the app follows the one you started most recently. Settings > Live connection shows the folder in use.

Only when Live has never been started on your computer is there no setting to read. Then the app uses Live's default location:

OSDefault location
macOS~/Music/Ableton/User Library/Remote Scripts/AbletonJS
WindowsDocuments\Ableton\User Library\Remote Scripts\AbletonJS (a Documents folder redirected into OneDrive is detected)

Your Live set

DJ Waveforms needs no special project. It works with any Live set: your usual template, racks, groups, sends and routing stay exactly as they are. The app reads whatever set is open in Live and builds its decks from it.

Your clips and audio files are never modified. To play a track the app makes a temporary copy of the clip on the deck's track, the deck's copy, and removes it once the deck has moved on. Markers it moved for launching are put back when the deck stops, swaps tracks or the app quits. A clip you launched in Live yourself is only read, never levelled, looped or warped. The app deletes only copies it made itself, and never the last copy of a song. What it adds to a set, it adds because you asked: the "DJ Waveforms Library" tracks of Add to set, a stem deck's tracks and its bus routing (Plain deck undoes both), a scene row when no row is free for a load, and warp markers when you fix a grid. Nothing reaches the .als on disk until you save in Live.

Which Live track a deck follows

Right-click a deck's name and the menu lists every audio track in the set; pick one and that deck follows it from then on. A stem deck is listed once, by the name of its fader (the bus or group its stems play through) with its stem count, so two stem decks whose first tracks share a name still read apart. The deck rebuilds around whatever the track holds: its playing or parked clip, its channel strip, its sends. A template whose first channels are busy with something else needs no rearranging: point the decks at the channels you want.

The interface

Top to bottom: the header (tempo, snap and the icon row), the deck area (the deck controls column and the waveform lanes, with the optional mixer between them), the optional Library at the bottom, and the status bar.

Header

Hovering a header icon shows its name under the pointer. Hovering any other control shows a short grey hint in the status bar.

Each deck

The waveform lane is the scrolling wave with the playhead, bar grid, hot cue markers and loop brace. Live's warp-marker ticks appear only in the grid editor (or always, with the Style panel's "Show Live warp markers"). Settings > Lock waveform lanes makes the lanes ignore the mouse, no grab and no nudge, while the deck controls, MIDI, the keyboard, wheel zoom and the cue right-click keep working. A plain click never moves a deck.

The deck controls are the panel beside the lane:

At the Small deck size the panel condenses to two rows: name and BPM, then Play, Stop, the overview stretched between them, and the key.

Status bar

Waveforms only

The icon in the header (or the mappable action Interface > "Waveforms only") strips the window down to the waveform lanes: no header, deck controls, mixer, master bar, Library, Settings, status bar or window buttons. The waveforms stay where they were on screen; the window shrinks around them. Each view remembers its own size and position.

Transport

Everything transport-related lands on the next SNAP line, the next point of the SNAP grid in the header, exactly like launching clips in Live. A parked deck is stopped at a position, ready to launch from it.

The CUE button

CUE is the text button left of Play. It works like a CDJ cue button, including how the cue point itself is set.

Settings > Immediate CUE (CDJ style) sets how CUE acts, from the mouse, MIDI or the keyboard alike:

Unwarped tracks on a deck

An unwarped track plays at its natural tempo: time readouts count real seconds, the tempo slot reads UNWARPED, and the lane draws no beat grid. Drag the wave or scrub the overview to park or relocate, tap cues to jump, pause and resume exactly where it froze; every placement is exact, since there is no grid to snap to. Launches follow the SNAP setting like any deck, and relocating a playing unwarped track retriggers it at the new spot.

What it cannot do is beat-based work: beat jumps, loops and nudge need a warped clip, so they are dimmed with a hint, and the grid editor opens with every pad dimmed but one. To make the track mixable, press Grid and then WARP: the app's beatgrid goes on the deck's copy (the saved grid, else a fresh detection); your set's clip is never touched. UNWARP on the same pad takes a grid off again (see the UNWARP / WARP pad).

Waveform control

GestureEffect
Drag the waveformGrab: carry the wave to a new position. On release the target bar snaps to the grid and the deck relocates (on the SNAP line while playing, at once while parked).
Hold Shift while draggingNudge: phase-shift a playing deck by hand, unquantized and fine, the vinyl way to beat-match by ear. It is momentary: the next grid-snapped action re-asserts the grid. On a parked deck it places the cue exactly, without snapping. Also mappable per deck ("Nudge").
Right-click and drag up or downResize the waveform height on every deck. On a stem lane it resizes the stem waveforms instead.
Drag the overview stripScrub through the whole track; hold Shift for fine sensitivity. Right-click the overview to switch every overview to the Flat look, with the cue sections coloured; right-click again to return.
Mouse wheel, or = / -Zoom the waveform. Remembered across reloads. Mappable to an encoder or a fader (Interface > "Waveform zoom").

The deck size (S, M, L, XL) is set with the grip under the decks, the SIZE readout or the window's edge (see Resizing).

Hot cues

Eight hot cues per track, in the pad grid's Cue mode and as chips on the waveform.

Loop per cue

In the same right-click menu, give a cue a loop length, from a quarter bar to 32 bars, and pressing that cue jumps there and loops from it in one press. Click the lit length again to clear it. On a parked deck the loop is ready before playback starts; on a playing deck the jump lands on the SNAP line and the loop takes hold there. Pressing a cue that has no loop lets a cue loop go and the track plays on; a loop you set with the Loop pads is yours and stays. The pad shows its loop length in the corner.

Tick Loop when reached, under the lengths, and the loop also starts on its own when playback reaches the cue, so an outro never runs out. It waits while another loop runs or a pad is held; once you exit the loop, the track plays on to the next cue marked this way. A waiting loop shows as a thin amber bracket at the foot of the lane, and its pad's length tag turns dark. Unwarped clips cannot loop.

Warp mode per cue

In the same menu, give a cue one of Live's warp modes (Beats, Tones, Texture, Re-Pitch, Complex or Complex Pro) and the deck plays in that mode from this cue until the next cue that has one, whether you launch at the cue, park on it or play into it. A cue with no mode changes nothing, and before the first cue with a mode the clip keeps the mode it has in Live; change that in Live's clip view and the deck treats the new one as the clip's own. Pads show a short code for their mode, the deck controls show the mode that is playing, and a switch lands on the SNAP line, exactly where the cue does. An active loop holds its mode. Unwarped clips have no warp mode to switch.

Serato cues

Hot cues that Serato (or Mixed In Key's cue export, the same tag format) wrote into your files' tags are imported automatically, read-only, with their stored names and colours. They can be hidden (the file is never modified), and shift-clicking the pad-mode button resets the pads to the Serato originals. Renaming an imported cue overrides its stored name; clearing the rename brings it back.

Where a track parks, and where cues live

With Load to the first cue point on (the default), a freshly loaded track parks at its first cue, ready to launch from there. A track with no cues, or with the setting off, parks on the first bar of its beatgrid, never between grid lines, so a launch always lands on the beat. Stop returns the deck to the same spot. Unwarped tracks park at their very beginning.

Cues, names, colours, warp modes, loop lengths and section fills are saved per audio file, keyed by an audio fingerprint, so they survive restarts, file moves and renames, and re-warping. They are stored by the app (see Your data), never in the audio file and never in the Live set.

Loops and beat jump

Loop pads

Jump pads

Clips that loop

A clip can have Live's own Loop switch on, so it repeats instead of playing to the end. A loop over part of the track draws as an amber bracket, like a loop from the pads. A loop over the whole file has nothing to bracket, so the deck controls show a loop readout next to the remaining time, reading "whole track" (or the length in bars): the one warning that rem will never run out. To play straight through, hold Shift over the Loop pads and press CLEAR, or turn the Loop switch off in Live.

An app load clears a whole-track loop on the deck's copy, so a full track plays to its end; your source clip keeps its settings, and loops of 32 bars or less stay as they are. To loop a full track on purpose, switch its Loop on in Live after it loads. Settings > Repeat short loops tiles a looping clip across the whole lane so short loops read like a continuous wave.

Slip

The Slip button in each deck's controls (L size and up, shown with the loop pads; also the mappable "Slip on / off", which works in every size) makes every loop on that deck a slip loop. While the loop repeats, a dashed line in the playhead's colour shows where the track would be had it never looped, and exiting lands there, in phase with everything else.

Loop roll

The mappable "Loop roll" action per deck (not in the default map: put it on a pad in Hold mode). Hold it to loop the current N bars in place, N set on the binding; release and the playhead lands where the track would be had it played straight through, on the next SNAP line or at the roll's own end when the roll is shorter, then continues. A roll always slips, whatever the Slip button says.

Beat Repeat and Looper

The app looks for Live's Beat Repeat and Looper on every deck's track, on each stem's track and a stem deck's fader track (see Stem decks), and inside racks on any of those, and draws on the waveform lane what they play. Neither device moves the clip, so the playhead always shows where the track really is; the drawing shows where the audio you hear comes from. Turn it off with Settings > General > Show Beat Repeat and Looper. Devices inside racks need the Remote Script that ships with this version; after an update, restart Live once.

Beat Repeat

Looper

Key shift

The key in each deck's controls moves the track's key with Live's own Transpose on the deck's clip. The tempo stays put, and the readout shows the key the deck is sounding in, with the clip's Transpose beside it ("+2", or "+2 -15" with cents). A track already transposed in Live, in the set or by its saved clip settings, shows its pitch the moment it loads.

Stem decks

A song split into stems (vocals, drums, bass, other) plays as one deck. Each stem is a Live audio track of its own; the deck plays their clips in lock-step and every transport action, Play, CUE, hot cues, loops, beat jump, nudge and key shift, acts on all of them at once. Live does the mixing: the stems are ordinary tracks with their own devices, and they all play through one track, the deck's fader.

How a stem deck is built

A stem deck is a fader plus the 2 to 8 audio tracks that feed it, side by side in the set. The fader is the deck's mixer strip; its rack, level, sends and controller mappings shape the whole stem mix. There are two ways to get one:

On a controller's clip grid, a stem deck the app made shows as the deck's track plus one column per stem, and the deck's own pads are silent while it is a bus, so start its song from the app or a mapped control. A group's launch pad starts all its stems together.

A stem deck is remembered by its tracks' names and positions, so one renamed track does not lose it, and it comes back next session with the same set. Open a set without those tracks and its decks are plain. In every deck's track menu a stem deck is listed once, by its fader's name.

Making a stem deck

Turning it back: Plain deck

Right-click the deck's name and choose Plain deck. On a deck the app made, the stem tracks leave the set and the deck's track gets its Audio From and Monitor back, so it plays its own clips again. If an input it had is not connected, Audio From stays at No Input until you set it in Live. If one of the stem tracks holds a clip or a device of yours, or sends its output somewhere else, the change is refused and the deck names the track: remove that in Live first. On a fader of your own, the deck follows its first track alone and the other tracks come back as decks of their own. Either way a solo made in the app is released, and the song's copies are removed once nothing plays them.

Loading a single track onto a stem deck asks the mirror question, Make Deck N a plain deck? Make plain deck + load turns the deck plain exactly as above and loads the track onto it.

Roles: which stem goes where

Each stem track has a role, and a song's stems go to the track of their role, so the effects and controller mappings you set up per track always get the right stem.

A song never changes your tracks' settings. A load brings only the song's clips, with their gain, beatgrid, start and end (the warp mode follows the Complex Pro setting, below). Effects, sends, levels and routing on the stem tracks stay as you set them, on the tracks the app added too, so put your per-stem effects there and they stay from song to song. Plain deck then refuses until you remove them.

Stem songs in the Library

The Library lists a stem song as one row, marked with a layers icon and the stem count. Click the arrow before the title to list the stems under it, or use Show stems / Hide stems in the row's menu; a song from a Live set has Reveal in Finder (Windows: Reveal in Explorer). The stem files themselves never appear as tracks; the Stems chip in the toolbar shows only songs. The Library finds songs in three shapes:

A song with a stem file missing shows a red dot, names the files and does not load. Every stem loads in Complex Pro while "Warp in Complex Pro" is on in Settings, whatever mode the song's set carries; with the setting off the clip's own mode is kept.

Add to set: make loads instant

A song that is not in the set loads straight from its files, one stem at a time, in a few seconds. Add to set (right-click one or several songs) puts the stems into the set once, into the app's own tracks named "DJ Waveforms Library 1" and on, added at the end of the set and muted, so they never sound. From then on a load is a copy of those clips and lands in a blink. It runs while nothing plays and the Library's activity line follows it stem by stem; a song in the set shows a green dot. Save the set in Live and the songs are there next time. Remove from set takes a song out; tracks left empty leave the set.

Loading a song

Unloading

Unload (the Unload button, or its mappable action, pressed twice) stops every stem and removes the song's copies from the set. The deck stays a stem deck, ready for the next song; only Plain deck changes its shape. Loading another song replaces the one on the deck, on a playing deck at the next SNAP line like any track.

Playing a stem deck

What belongs to the song, and what a stem deck cannot do

Mixer

The mixer column (header icon, on by default) shows a channel strip per deck plus a master bar. It controls Live's mixer and your racks and adds no processing of its own. Build the sound in Live; perform it here.

Building a channel strip

A recommendation, not a requirement: a channel with no rack shows a fader and a meter. Live has no club mixer, so you build one strip and copy it across your deck channels. Six knobs cover what a DJ mixer gives you: low, mid, high, filter, and a reverb and delay throw.

  1. Start from Live's own DJ EQ. You do not have to build one. Search Live's browser for EQ Three Rack (it ships in the Core Library, under Racks > Audio Effect Racks > Performance & DJ) and drop it on the first deck's channel. Its Low, Middle and High macros rest at centre, so the app gives them centre-notch fills on its own. The same folder holds Zone 62 DJ EQ if you would rather have four bands.
  2. Wrap it together with a filter. Add an Auto Filter after it, select both, and press Cmd/Ctrl+G to group them into one outer Audio Effect Rack. The app reads the first Audio Effect Rack on the channel, so the outer rack's macros become your knobs. Map macros 1 to 3 to the EQ rack's Low, Middle and High, and macro 4 to the filter.
  3. Set the filter up. In Live 12.2 or newer, set Auto Filter's filter type to DJ and map macro 4 to its bipolar Control knob: that is the classic single-knob sweep, low-pass one way and high-pass the other. Earlier versions have no DJ type; the best answer there is DJMFilter by Xfer Records: freeware for Mac and Windows, one knob, and exactly the sweep a club mixer gives you. Without a plugin, map macro 4 to Auto Filter's Freq on Low Pass, which is the half of the sweep you will reach for most anyway.
  4. Point the last two knobs at your sends. Reverb and delay do not belong in the rack; they belong on return tracks, shared by every deck. Drag the strip's resize grip down to expose two more knob slots, then right-click each and choose Map to > the send you want. That is your reverb throw and your delay throw, per deck.
  5. Copy it across. Drag the finished rack onto your other deck channels. Every deck now has the same six knobs in the same places.

The two returns. Put Live's Reverb and Delay on returns A and B, both at Dry/Wet 100%. Starting points that behave well in a mix:

Colour, if you want it. For character, Fors Sala is a free reverb that turns small sounds into shimmer (VST3 / AU, any Live edition), and Fors Retur a free delay with grit and screeching feedback (Max for Live, so it needs Live Suite or the Max for Live add-on). Either drops onto a return in place of the stock device without changing anything above.

The rest of that Performance & DJ folder is worth a browse while you are there. Filter Driver, Cut-o-matic and Instant Repeat all map straight onto spare knobs, and DJ Master Channel is built for exactly what the app's master bar reads: drop it on the master track and its EQ and reverb macros appear as master knobs.

Faders and meters

Knobs

Snapshots

Snapshots capture the position of every knob on a deck, visible and hidden slots alike, and the master bar knobs, and bring them back on demand: instantly, on the beat, or as a slow sweep. They live in a second pad row under the Cue / Jump / Loop pads, shown at the XL deck size (the row lines up with the fourth knob row). At the L deck size a PERF button at the right end of the transport row swaps the pad section for the snapshot pads and MORPH; the button lights while the snapshot pads are shown, and pressing it again swaps back. The coloured pads are snapshots; the small knob on the right is MORPH.

Master bar

Headphone cue (PFL)

Each deck's Headphone Cue button (in the deck controls) solos that track as a pre-listen. This uses Live's Solo-in-place as PFL and requires Live's mixer to be in Cue mode (the option next to the master track); in plain Solo mode there is no separate headphone send, so the button stays off the row and its entry in the transport right-click menu reads "not available". Switch Live to Cue mode and it appears.

Auto gain

Every track you load is levelled to the same loudness, so a quiet older rip and a loud modern master mix at matched volume without riding trims. The loudness is measured during Analyze, or on the first load, and applied as clip gain on the deck's own copy; your files and the clips in your set keep theirs. Hover the deck's BPM readout for the correction applied. Settings > General > Auto gain turns it off and restores the loaded decks' original gain.

Recording your mix

The REC button in the status bar arms Live's Arrangement recording: grey when off, red when armed, pulsing while recording. It also switches on Live's Automation Arm, so every fader, EQ, crossfader and tempo move you make, by hand or over MIDI, is captured as automation. Play a deck and Live records the whole performance into the Arrangement; click REC again to stop arming. If the Arrangement already has recorded material, arming does not overwrite it: the playhead moves to the bar after the last event so your new take appends after it, and a "New mix" locator is dropped at the start (if you have already positioned Live's playhead past the material, it records from there instead). Mappable to a key or MIDI control (default Ctrl+N, matching Serato).

Library

The Library (header icon, or B) lists every audio clip in your Live set and every track in the folders you add, as one list, whatever deck a track is on. Rescan walks your folders again and re-reads the set; the list also refreshes when the set's tracks change. Files can also be dragged from Finder, Explorer or Live straight onto a deck: a file that exists in the set loads as that clip, any other loads from disk.

The toolbar

Three groups. What to show: Tracks / Loops, Unplayed / Played, Match, Ready, Stems, key and BPM, with an X at their end that clears them and the search at once. How it looks: the folder column, the columns picker, and Aa, the list's text size from 11 to 18 px, plus a Bold titles switch. The actions: Rescan, Analyze, Add folder.

Your music on disk

The Library lists whole folders on your disk, thousands of tracks, browsed and loaded like the set's own clips.

Crates

Crates are your own ordered lists, in the sources column under This set. Press the + on the CRATES label, name the crate, then drag rows onto it (a whole selection at once) or right-click rows for Add to crate. Inside a crate, with the # column sorted and the filters clear, drag rows to build the order; that order is the # column and persists. Drag a crate above or below another to order your crates. A track can sit in any number of crates.

Columns

#, colour, Title, Artist, BPM, Key, Energy, Genre, Comments, Track, Folder, Length, Year, Album, Added, Format and Status. Track, Year, Album and Format start hidden. Resize, reorder, or right-click the header row to show and hide columns.

Editing

Search and filters

Loading to a deck

Status dots

One dot per track shows its state. Hover a dot for the detail, and the column header for the legend.

The count line and the activity line

The band under the list. On the left, how many tracks you are looking at and what narrows the list. On the right, what the Library is doing right now, and nothing when idle: "Scanning Techno: 212 of 1,204", "Analyzing 14 tracks - reading waveform, tempo and key 3 of 14: Name", "Waiting for Live" while Live is busy. Three pulsing dots mean work is running; a thin bar shows how far. A refusal about the list (a reorder outside a crate) stays readable there until your next click. With the Library hidden, a small dot on its header icon means it is working; hover the icon to see on what. Loading a track is never on this line: a deck's messages show on its own waveform lane.

Track prep

Getting tracks ready before a gig. Analyze caches waveforms, checks beatgrids and measures loudness; the prep panel collects what needs a decision; Fix writes grids; Add to set puts tracks into the Live set so they load in a blink.

Analyze

Analyze makes tracks load instantly. It has two halves:

The activity line names each step with its count ("Analyzing 72 tracks - Live analyzes 1 of 34: Name"). When it is done the prep panel says so, and any fixes or checks it found are the panel's next line.

Checking grids: the prep panel

Analyze checks every grid: a grid matches only when its beats land on the detected hits, cross-checked with the file's BPM tag, not merely when the tempo number agrees. A grid you set or confirmed in the grid editor is never questioned. Analyze only reports; nothing changes until you decide. Each track ends in one of three states:

Everything Analyze finds lands in the prep panel, which slides down between the toolbar and the track list when there is something to decide or a run has just finished, and slides away once the library is settled. A run in progress shows on the activity line, with its Cancel.

The panel counts only tracks the Library shows you (in the set, or in one of your folders); a fix for any other track is kept and comes back the moment the track has a row again. A fix for a folder track that is not in the set is written by loading it into Live for a moment, a few seconds per track; the panel says how many before you press Fix. A track that is still online-only is named ("2 wait for a download") and its row offers Download instead of Fix.

Writing fixes

Press Fix and the app writes the grids one track at a time: each grid is written, verified against what Live holds, and only then saved. Cues and loops ride along, and a track that was not warped at all is warped as part of its fix. The row being written pulses its dot, and loading that track is refused until it is done ("This track is being prepared - one moment"). The activity line follows every step:

Windows. Live shows its own "Analyzing" dialog while it warps a track for the first time. Tracks are prepared one at a time, so at most one dialog is open. Cancelling Live's dialog marks that track failed with the reason, and the run moves on.

Add to set

Add N tracks to set (row menu) analyzes folder tracks and keeps their clips in a "DJ Waveforms Library" track of the set, never a deck, so they are saved with the set and load like any set clip, in a blink. A crate's right-click offers Add crate to set, in crate order. Like loading, on an older Live it is offered only for tracks under a Live Place. Stem songs have the same verb (see Stem decks).

Beatgrid editor

Launches, loops, jumps and sync all quantize to the clip's warp grid in Live. The grid editor fixes a grid from inside the app, writing Live's own warp markers, so a track gridded once stays right everywhere. On a stem deck the Grid button is dimmed (see Stem decks).

The Grid button appears when the Remote Script that ships with this version is installed; the normal First run install covers it. If you installed the script with an older version, reinstall it: quit Live, click Reinstall under Settings > Live connection, then start Live again.

The grid editor

Press Grid next to a deck's transport buttons (beside PERF) to open the editor; press it again to close. While it is open the waveform draws the grid as gold bar lines with bar numbers plus thin beat ticks, and every change redraws them at once. Edits save as they happen: closing the editor by any route keeps them, and only Cancel restores what you started with.

Fixing a track takes a drag and two taps:

  1. Drag the wave until a clear kick sits exactly under the playhead. In the editor a drag moves the deck freely, with no snapping; hold Shift for extra-fine motion.
  2. Tap 1.1.1. That kick becomes bar 1, beat 1, and the lines re-seat around it.
  3. If the tempo is off, set the BPM (below). Then jump near the end of the track: if the far kicks drift off the lines, park exactly on a clear kick and tap Align. The BPM is recalculated from the distance and the downbeat stays put. If the tempo started far off, Align once mid-track first, then again at the end.
  4. Press OK to close, or Cancel to put the grid back the way the editor found it.

The eight pads:

Undo is Ctrl/Cmd+Z in the open editor: it steps back one grid change. The previous grids are saved with the file, so this works across sessions. Grid changes also go into Live's undo history as regular edits. Save your Live set to keep applied grids.

Playing deck: the glide

On a playing deck, dragging the wave in the editor becomes a smooth glide: the audio bends like a turntable pitch-bend while the beat clock stays locked, so you align it by ear against the other deck exactly like beatmatching. Release, and once the ramp plays through, the correction is written into the grid. The BPM and 1.1.1 pads want a parked deck; pause first, or use the glide.

Saved grids

Every grid edit saves the grid under the file's audio fingerprint, the same identity hot cues use, so a track is never gridded twice. Live keeps its own per-file analysis (.asd), so re-adding a file can bring an old grid back. When that happens the BPM pad shows the mismatch, and right-clicking the WARP pad and choosing Use saved grid puts your own grid back. The app never rewrites a grid on its own.

Waveform styles

Keyboard shortcuts

Keyboard control is a virtual device ("Keyboard", shown in blue) inside the same mapping system as MIDI. A default Serato-style map is installed and enabled on first run, fully editable.

Typing is always safe. Shortcuts never fire while you are typing in a text field (search, rename, settings), while the mapping Manager is open, or when the Keyboard device is switched off. Esc and a bare Delete or Backspace are reserved by the app and cannot be bound; Space is left unbound.

Default map

Deck 1 lives on the upper letter row, deck 2 on the home row, deck 3 (partial) on the bottom row. Keys are physical positions (US layout); on macOS Alt is Option.

ActionDeck 1Deck 2Deck 3
Play / pauseWSX
Cue (tap: back to cue, hold: preview from the cue)QAZ
StopShift+WShift+SShift+X
Previous / next trackAlt+Q / Alt+WAlt+A / Alt+SAlt+Z / Alt+X
Hot cues 1-51-56-0-
Clear hot cue 1-5Ctrl+Shift+1-5Ctrl+Shift+6-0-
Autoloop 1/2/4/8/16 barsAlt+1-5Alt+6-0-
Loop on/off (4 bars)['-
Loop halve / doubleO / PK / L-
Beat jump back / forward (4 bars)Alt+E / Alt+RAlt+D / Alt+F-
Nudge back / forward (hold)T / YG / H-
Library and globalKeys
Select previous / next rowUp / Down
Page up / downPgUp / PgDn
Load selected row to deck 1 / 2 / 3Shift+Left / Shift+Right / Shift+Down
Show / hide the LibraryB
Record (arm Arrangement recording and Automation Arm)Ctrl+N
Undo the last grid change (in the open grid editor)Ctrl/Cmd+Z
Add the selected rows to the crate you are inCtrl/Cmd+D
Tempo up / down 0.1 BPMShift+= / Shift+-
Zoom the waveform= / - (numpad + / - too)
Cancel a pending quantized action (built in)Esc

Holding a key auto-repeats where it makes sense (beat jump, loop halve and double, Library navigation, nudge, tempo, zoom) and never for hot cues.

Pop-up choices answer to the keyboard. In any short list the app raises (which deck to load onto, a question before a load, a right-click menu), Up / Down move the highlight, Home and End jump to the ends, Enter takes the highlighted item, and Esc cancels. The app's two dialogs (Reset all settings, the trial pause) open with the keyboard already inside them, on the safe answer.

Remapping

  1. Click the header Mapping icon and pick Keyboard in the device list (or switch the floating pill to Keyboard, blue).
  2. Press Map keys on screen, click any highlighted control, then press the chord you want. Delete clears a binding.
  3. If the chord is already used, the pill asks: Replace, Cancel, or press the chord again. An Undo follows a replacement.

The Manager opens the full bindings table with every action, including ones with no on-screen control, where key chips can be edited per action and per size (the 1-bar and 2-bar loop pads are separate bindings). Keys can also drive knob targets in step, set and toggle modes (as percentages of the control's travel) and encoder targets (the BPM readout, the DECKS count, the waveform zoom, Library scroll, nudge) as step keys, one step per press, repeating while held. Deleting the "Keyboard shortcuts" map and re-enabling the device re-seeds the defaults.

MIDI controllers

Any class-compliant MIDI controller can drive the app, including DJ controllers with jog wheels. The MIDI engine runs in the background, so mappings keep working with the window behind Live.

Mapping a controller

  1. Connect the controller and click the header Mapping icon. The Manager opens: turn your device on with its switch. Behind the panel every mappable control in the app is already outlined.
  2. Press Map on screen. The panel steps aside and the outlines come forward: unmapped is an outlined ring, mapped is solid with its binding printed on it. The track list and the folder column are outlined too (the list learns the browse knob, turn for Browse and press for Press; the folder column learns Back). Outlines are gold for a controller and blue for the keyboard. If the button is greyed it says why: the device is off, not connected, or has no mapping of its own yet.
  3. Click a control on screen, then touch the hardware control you want to bind. Learn detects the control type: button, absolute knob or fader, or relative encoder (all three common encodings).
  4. Shift+click binds the shift layer: one global shift control (bind any button to "Shift") gives every other control a second function.
  5. If that control is already used, nothing is overwritten behind your back. The pill asks ("CH1 CC 28 already does Mixer knob 6 - replace it with Filter deck 1?") with Replace and Cancel, or touch the control once more to replace it from the hardware. After a Replace, an Undo puts the mapping back as it was.
  6. Esc or the pill's Manager button goes back to the Manager; Close, a second Esc, or the header Mapping icon leaves mapping altogether. While a mapping surface is open your controller and keyboard are watched but never acted on, so touching a pad to see what it sends cannot fire a deck; the Manager's status line says "Controls are paused while mapping is open".

The Manager

The Manager holds the device list (enable switch, activity blips, per-device mapping assignment), the mapping files (New / Duplicate / Rename / Import / Export / Delete), the full bindings table grouped by deck, master, library, interface and global, a raw input Monitor that shows exactly what a control sends, and Rescan. Map on screen at the end of its top row is the way in and out of mapping mode. Built-in maps are read-only: turning a device on gives it an editable copy of its matching map, and Duplicate copies one you pick by hand.

Behaviors worth knowing

DJ controllers and jog wheels

A Pioneer DDJ-400 mapping ships built in, covering the jog wheels, tempo fader, EQ, pads and browse. Every address in it comes from Pioneer's MIDI documentation; it has not been checked on real hardware. If something is off, Duplicate the map, fix it, and please send it to us.

Map a platter to the Jog wheel / platter action (not "Nudge (encoder)", which is for small detented knobs). One full turn moves the track by one turn of a 33 1/3 rpm record, about 1.8 seconds, whatever the tempo. What the jog does depends on the deck:

If the jog feels twitchy or dead, set Ticks per revolution in the Behavior column to your wheel's resolution (720 on most Pioneer units, 2048 on a DDJ-SX, 894 on a Denon MC7000), then fine-tune with Sensitivity. If the wheel runs away or goes backwards, the Encoder type is wrong: jog wheels are almost always "Encoder offset".

Scratching is not possible. Live cannot play audio backwards or at a variable speed from another program, so a jog can only nudge the track or move the cue. Spinning a platter hard on a playing deck moves the full distance but sounds stepped, not like a scratch.

Tempo bend. The Tempo bend (jog) action turns a jog or encoder into a pitch-bend on the whole mix: while you turn, Live's tempo rises or falls with the wheel, and when you stop it eases back to the tempo you started from. Every deck follows Live's tempo, so this is the tool for drifting your whole set into phase with something outside the app: another DJ's rig, a turntable, a live player. Tempo bend + (hold) and Tempo bend - (hold) do the same from two held buttons or keys.

High-resolution faders. Pioneer tempo faders, EQs and crossfaders send 14-bit values. Learn detects this and uses it, so a tempo fader resolves to hundredths of a BPM.

MIDI clock

The app sends MIDI clock to any controller whose mapping file carries "clock": true, so hardware that blinks, cycles or counts bars runs with your Live set. Add that key at the top level of the map assigned to the device, beside "name", and it takes effect within a second or two. The map file is the whole configuration, so it travels with Export and Import. Built-in maps are read-only, so Duplicate one first.

On a Neuzeit DROP: Shift + CLOCK, set Source to Ext MIDI and the clock device to the computer's port, turn Start/Stop on and leave Song Pos off.

Map files

One file per controller, human-readable and shareable, in the midi-maps folder of the app's data folder (see Your data). Import and Export in the Manager move single files, the easy way to share a mapping or move it to another computer. The built-in "Example - 2 deck starter" doubles as a starting point.

Settings reference

Settings opens as a panel on the right and stays open while you work; the cog closes it. Its sections are General, Library, Mixer, Style, Updates, License, User manual, Live connection (only while Live is not connected) and Diagnostics. One section is open at a time, and the one you had open is remembered.

SettingDefaultWhat it does
General
Show master baronThe master bar under the decks. Off hides just the master bar; the mixer strips stay. The mixer icon in the header hides both.
Show status baronThe bottom bar. Hiding it gives the waveforms the height.
Show hints in status baronGrey hover hints. Errors and warnings always show.
Lock waveform lanesoffThe mouse cannot grab or nudge the waveforms. Controls, MIDI, keyboard and wheel zoom still work. The lock icon in the Waveforms only strip is the same switch.
Load to the first cue pointonA loaded track parks at its first hot cue. Off, or with no cues, it parks on the first bar of the beatgrid (see Where a track parks).
Do not load to a playing deckoffBlocks any load (drag, right-click, MIDI, keyboard) aimed at a deck that is playing.
Immediate CUE (CDJ style)onCUE acts the moment you press, like hardware. Off puts press and release on the SNAP line (see The CUE button).
Auto gainonLevels every loaded track to the same loudness with clip gain on the deck's copy (see Auto gain). Off restores the loaded decks' original gain.
Repeat short loopsonTiles a looping clip across the whole lane instead of showing it once.
Show Beat Repeat and LooperonDraws what a Beat Repeat or Looper plays on the waveform lane (see Beat Repeat and Looper).
New song: every stem playsonA song loaded on a stem deck starts with no stem muted. Off keeps the tracks' mutes from song to song (see Stem decks).
Data folderDefaultWhere your library, hot cues, beatgrids, settings, mixer and MIDI maps are stored. Choose points it at another folder (a synced one for a backup or a second computer); Default brings it back. The app reconnects to Live after a change, so it is refused while a deck plays. A folder that already holds app data asks whether to use that data or replace it with this computer's (see Your data).
Backup-Back up library data... saves a zip of your data files and MIDI maps to a folder you choose; Restore from backup... restores one and restarts the app.
Analysis cache size2 GBHow much disk the cached waveforms may use (about 0.5 MB per track). When full, the least recently loaded tracks are dropped first and re-analyze on their next load.
Library
Folders-The folders of music on disk the Library lists. Add or Remove here; Rescan, Relocate and Exclude are on the folder's right-click menu in the panel.
Analyze new tracksonA track the app has never seen gets its waveform, tempo and key in the background while no deck plays. Live's own analysis is not part of this; it waits for Analyze, or for the crate setting below.
Fully analyze the selected crateonThe crate you have selected also gets Live's analysis, one track at a time while nothing plays, so every load from tonight's crate is instant. Only crates do this.
Warp in Complex ProonTracks the app warps or grid-fixes get Live's Complex Pro mode, and tracks warped in a lesser mode join the Fix batch as mode switches. Loops are never changed; the right-click "Warp in Complex Pro" always applies.
Mixer
Deck knobs9Maximum knobs per deck strip (the layout and grip decide how many show).
Master knobs8Assignable knobs on the master bar.
Show master knobsoffThe master bar shows its knobs; off keeps the slim bar. The same switch as the grip on the master bar's top edge.
Master bar below libraryonMaster bar under the Library panel; off places it between the decks and the Library.
Snapshots include master knobsonSnapshots also save and recall the master bar knobs (never volume, cue or crossfader).
Master clip warningonThe whole master meter turns red while the level is past 0 dB. Off keeps only the top segments red.
Style, Updates, License, User manual, Live connection
Style + EditRainbowWaveform preset picker and the style editor (see Waveform styles).
Check for updatesonWatch for a newer version and show an "Update Available" link in the status bar. Off, a Check now button appears instead (see Updates).
LicenseTrialActivate a license key, or Deactivate this computer. Shows your email and masked key when licensed (see License and trial).
User manual: Open-Opens this manual, the copy that came with your version, in your browser. No internet needed.
Live connection-Remote Script status, the folder it installs to, and Install or Reinstall. Hidden once Live is connected.
Diagnostics
Copy report / Save full log-Anonymized report for troubleshooting (see Sending a useful bug report).
Render qualityAutoAuto adapts waveform sharpness and frame rate to your machine so scrolling stays smooth. Full pins maximum sharpness. Balanced pins standard sharpness at the full frame rate, the best pick on battery. Reduced is the lightest 30 fps mode. The row shows what is active right now.
Show performance overlayoffA small readout in the top-right of the waveform area: frame rate and frame-time consistency (green bars mean on-cadence frames), render cost, the active quality level, and Live tick timing.
Clear analysis cache-Wipes computed waveforms; tracks re-analyze on their next load. Cues and library are kept.
Reset all settings-Restores style, layout, toggles and window to defaults. Keeps your library, hot cues and loops.

For the fastest loads

The app works with any Live set and any Live preferences. Every load is instant and Live never pauses under these conditions:

License and trial

Open beta until October 15, 2026. The trial pause below is switched off and the status bar shows BETA. Buying and activating a license works as described. From October 16 an unlicensed copy returns to the trial by itself.

DJ Waveforms is a one-time purchase with a free trial. The trial is the complete app: every deck, the mixer, the Library, MIDI and keyboard control, and all waveform styles. The only limit: after 15 minutes of continuous playback, playback pauses once. A "playback pauses in 60 seconds" note appears a minute before, and the counter resets whenever every deck is stopped, so stopping between songs keeps it out of your way. Press play to carry on; nothing is lost.

Buying and activating

  1. Buy from the product page, the Purchase a license button in Settings > License. Your license key arrives by email and on the receipt, and stays on the receipt.
  2. Open Settings > License, paste the key, and click Activate. The TRIAL pill in the status bar disappears within a second or two; no restart is needed.

Activation needs the internet once. After that the app caches your license and works fully offline. A dropped connection, dead venue wifi or the license server being down never locks you out and never interrupts a set.

Moving between computers

A license activates on up to 3 computers. To move it, open Settings > License on a machine you no longer need and click Deactivate, which frees a slot, then Activate on the new machine. If you run out of slots, for example after reinstalling the operating system a few times, contact support to clear an old machine.

If you copy your license file to another computer, or rename your computer, the app keeps working and quietly re-checks itself the next time it is online. You are never dropped in the middle of a set over a licensing check.

Refunds

14-day, no-questions refunds. A refunded key is disabled and the app returns to the trial the next time it checks in with the license server, never mid-set.

Updates

Updates are free through version 1.x. With Check for updates on (the default), the app watches about once a day for a newer public release. When one is available, Settings > Updates shows the new version with a Download link, and an Update Available link appears in the status bar; click either to open the download page. Install the new version over the old app; your hot cues, library and settings are kept. With the setting off, a Check now button takes its place and the result shows in the Status row.

You choose when to update. This is a notice, not an automatic update. The download is the same for everyone, so you can always get the current version straight from djwaveforms.com.

The app window

Your data and where it lives

The app keeps two kinds of files. Your data (library, hot cues, beatgrids, settings, mixer and MIDI maps) lives in the data folder, which is the per-user folder below unless you choose another one in Settings > General > Data folder. Everything disposable (waveform caches, folder catalogs, logs, the license binding) always stays in the per-user folder on this computer.

OSPer-user folder
macOS~/Library/Application Support/DJWaveforms
Windows%APPDATA%\DJWaveforms
FileLives inContentsSafe to delete?
cues.jsonData folderHot cues, names, colours and section fills, keyed by audio fingerprintNo: your performance data
grids.jsonData folderSaved beatgrids per track (confirmed grids, proposals, undo history), keyed by audio fingerprintNo: your grid work
library.jsonData folderLibrary edits, played marks, crates, and the folders you added. Tracks are named by folder and relative path, so the file reads the same on every computerNo: user data
midi-maps/Data folderYour mapping files (including the editable keyboard map)Only if you can re-map; keyboard defaults re-seed
mixer.json, midi.json, prefs.json, ui.jsonData folderMixer knob mappings and snapshots; MIDI device enables and assignments; the Settings switches; waveform styles, toggles and column layoutYes: remaps, enables and settings are lost
loud.json, proignore.json, cuemode.jsonData folderMeasured loudness per track (auto gain); ignored warp-mode warnings; last detected Solo/Cue modeYes: re-measured or re-learned
owner.jsonA chosen data folderWhich computer has the folder open right nowYes
data-folder.jsonThis computerWhere the data folder is, when it is not the per-user folderYes: the app returns to the data in the per-user folder
license.json, clock.jsonThis computerYour license key, activation, machine binding and timekeepingYes: the app returns to the trial and you re-enter your key
window.json, ui-local.json, place-roots.jsonThis computerWindow bounds; deck size, column widths and mixer layout for this screen; where each music folder is on this computerYes: recreated, or Relocate the folders
analysis/This computerWaveform analysis cache (bounded by the Analysis cache size setting)Yes: the same as "Clear analysis cache"
snapshots/This computerA copy of each data file per day, the last seven daysYes, but it is the copy to go back to
sync-base/This computerWith a chosen data folder, the last version both copies agreed on, used to mergeYes
diskcopies.jsonThis computerWhich clip copies in the set the app made, so a restart can clean them upYes
catalog/, fps.jsonThis computerWhat each added folder holds (rebuilt by Rescan); the audio-fingerprint index behind duplicate detectionYes: rebuilt
server.log, diagnostics.log, diag-*.json, server.lock, v8flags.txtThis computerLogs, diagnostics history, housekeepingYes

Every data file keeps a .bak last-good sibling and is written crash-safe. The first save of each data file on a new day also copies it to snapshots/, seven days kept. If a data file cannot be saved, does not read, or was written by a newer version of the app, the status bar says so once.

Settings > General > Back up library data... saves a zip of your data files and MIDI maps (DJ Waveforms backup and the date) to a folder you choose. Restore from backup... asks for the zip, confirms, keeps each file it replaces as <name>.replaced.json, and restarts the app.

The data folder on Dropbox, or on two computers

Settings > General > Data folder > Choose moves your data files into a folder of your choice. A synced folder (Dropbox, Google Drive, OneDrive, iCloud Drive) makes them a backup and lets a second computer use the same library, cues, grids, crates and settings. What travels is everything you decided or worked on. What stays on each computer is what only that computer can use: the waveform cache, window and deck size, column widths, the license, and logs.

Troubleshooting

"Waiting for Live" never connects

  1. Is Live running with a set open?
  2. Is AbletonJS set as a Control Surface in Live > Preferences > Link/Tempo/MIDI? Settings > Live connection shows whether the script is installed.
  3. Did you restart Live after installing and enabling the script?
  4. If the script is installed but Live still never appears, Settings > Live connection shows the folder the app installed to. Compare it with Live's Preferences > Library > Location of User Library. They differ only if you moved the library after installing, or use two Live versions with different libraries. Start the Live you use, click Reinstall in the app, and restart Live.

"No signal" while Live is clearly running

A deck arms (the fill rises) but never starts

The Live track is deactivated (greyed out in Live); Live ignores launches on deactivated tracks. Re-enable the track. The app warns: "<deck> did not start - is its track enabled in Live?"

Clips launch then instantly stop (some tracks, not others)

This is almost always a stray MIDI mapping saved inside that Live set. A track control mapped to "fire scene" or "stop" gets triggered by MIDI arriving on a virtual or loopback port (commonly the macOS IAC Driver) with Live's Remote switch left on, so the clip starts and is stopped again a beat later. Tracks without such a mapping play fine, which is the tell. Fix it in Live: Preferences > Link/Tempo/MIDI, turn Remote off for ports you are not deliberately mapping; then clear the set's mappings with Cmd+M (select the affected track, delete its entries) and save. DJ Waveforms never needs Live's Remote.

Loading a track is slow the first time

The first time Live warps a track it has not analyzed, it analyzes it for several seconds, once per track; the first load of a file also decodes it for the waveform, which is then cached. Press Analyze in the Library before a gig (see Track prep) so every load is instant.

The waveform looks wrong or out of date

An M4A/MP4 file will not load on a deck (Windows)

Some Live versions on Windows do not accept M4A/MP4 files: they are missing from Live's own browser and a drag into a clip slot is refused. Convert the file to WAV, AIFF or FLAC and load that. The app's own waveform, key and beatgrid read M4A on Windows fine; it is Live's import that turns it away.

A track draws no waveform, but only when its file is in Downloads, Desktop or Documents (macOS)

macOS gates those three folders (and external and network volumes) behind a per-app permission. If the request was refused or dismissed, the app draws that deck with a dashed centre line and the status bar reads audio blocked (OS file permission); the deck still follows Live, only the picture is missing. Fix: System Settings > Privacy & Security > Files and Folders > DJ Waveforms > turn on the folder, then quit and reopen the app and load the track again. Files in your Music folder or anywhere else in your home folder need no permission. The diagnostics report records every blocked read with the folder it hit.

Waveforms look soft or blurry after moving the window to another display

Displays with different pixel densities can leave the picture at the old scale. Resize the window slightly, or quit and relaunch, after moving between displays.

Waveforms look softer than usual, or scrolling stutters

Render quality is Auto by default (see Settings reference): on a machine that cannot keep scrolling smooth it softens the waveform and, if needed, the frame rate instead of stuttering, and steps back up when there is headroom. Pick Full to force maximum sharpness; if scrolling then stutters, your machine cannot keep up at that quality. On battery, try Balanced. Turn on Show performance overlay to watch the frame timing while you test: steady green bars mean frames are on cadence, amber and red bars mean dropped frames. The diagnostics report includes the same measurements and whether your system renders without GPU acceleration.

After laptop sleep the decks look stale

Quit and relaunch the app to resync with Live.

Keyboard shortcuts do nothing

MIDI controller not responding

An encoder runs away, or both encoder types feel the same

An encoder does not announce how it counts, so a mapping can be set to the wrong Encoder type: one detent then arrives as sixty-three, inverted. Both wrong choices misbehave, differently in each direction, which is why trying them by hand feels like they do the same thing. The app tells you: turn the control a few times and, if what arrives does not match the mapping, a line in the status bar and in the Manager's warnings names the encoding your hardware is really sending. Set Encoder type to that.

The same check catches an endless encoder still in its absolute mode: it sends positions (0 to 127) rather than ticks, so it jumps erratically whichever encoding you pick and feels far too fast. Switch that encoder to a relative mode on the controller, then re-learn it. For the waveform zoom there is a second answer: map the control to Waveform zoom (absolute), which expects positions.

A transport button is missing from the decks

Right-click any transport button and tick it back on. Headphone Cue also needs Live's mixer in Cue mode (see Headphone cue).

Sending a useful bug report

  1. Settings > Diagnostics > Copy report: a short, anonymized summary of the session (connection handshake, startup timeline, analysis timing). Paste it into your report.
  2. For deeper issues, Save full log attaches the complete diagnostics log (also anonymized). Both are always on: nothing to enable, nothing to reproduce twice.