edytlab
All posts
extended intro
DJ edit
loop
tutorial

Make a Mixable Extended Intro

5 min read
Four identical drum-bar blocks in a row, a rising fade-in ramp over the first two, and a loop arrow beneath them

Many dance tracks open with a few bars of drums and nothing else. Paste those bars back in at the start, thin them out and fade them in, and the track gains an intro a DJ can mix over.

DJs like long, sparse intros. They give the previous track time to leave, and they make the start of a track easy to beat-match. Plenty of tracks already open with a few bars of drums and nothing else, but not many open with enough of them. If yours does, you can build a longer intro out of its own first bars, and in edytlab that is a short conversation. The extended-intro demo on the home page (2:26, with sound) shows the whole thing on one track; this post goes through it a step at a time and takes it a little further.

This works when the opening bars really are drums alone. Pulling the drums out of a full mix needs stem separation, which has not shipped, so edytlab cannot isolate them for you. It can repeat what is already there.

What you are building

The plan is short: copy the drums-only bars to the clipboard, paste them back in at the start as many times as you like, thin the new intro out with a high-pass filter, fade it in, and export. Pasting is a splice. The audio after the insertion point shifts later by exactly the length you pasted, so the track starts later by a whole number of bars and the join stays on the grid.

Step 1: Find the bars

Prompt: Analyze the track: tempo, downbeats and sections. How long is a bar, and where do the drums-only bars end?

analyze_track returns the BPM, the downbeats and the sections. In 4/4 a bar lasts 4 × 60 ÷ BPM seconds. At 120 BPM that is 2 seconds, so eight bars are 16 seconds. Those are example numbers; use your track's. Section detection is a guide, not an oracle: play the opening and confirm by ear that nothing but drums happens in the bars you plan to loop. A loop that includes the first bass note repeats the bass note.

Step 2: Copy the bars

Prompt: Copy the first 8 bars of the track, from 0 to 16 seconds.

copy_region puts a time range of a track on an in-memory clipboard and leaves the session alone, so this step adds nothing to the graph. Cut on the bar line. A loop that starts or ends slightly off the downbeat will stumble every time it comes around, so ask the agent to take the bar boundaries from the analysis rather than from a rounded guess.

Step 3: Paste them in at the start

Prompt: Paste the copied bars at the very start of the track, three times.

paste_region takes an insertion point in seconds and splices the clipboard in there, shifting everything after it to the right. Pasting at 0 puts the new bars in front of the original opening. At 120 BPM each paste adds 16 seconds, so three pastes add 48 seconds and the intro runs 32 bars: 24 pasted ones, then the original eight. The demo pastes once, for a 16-bar intro. Three is a choice, not a rule.

Each paste is its own node in the session graph, so undo takes them off one at a time, and you can stop at whatever length sounds right. There is also repeat_selection, but it appends its copies to the end of a track's audio. That suits looping a tail, not lengthening an intro.

Step 4: Thin the new intro out

Prompt: High-pass the new intro, the first 24 bars, at 150 Hz.

Taking the low end out keeps the intro from piling bass and kick weight on top of the track you are mixing out of. Leaving the last eight bars, the track's own opening, full range brings the low end back as the cue that the track is about to start. high_pass_filter takes a cutoff and an optional start and end time, and the cutoff is fixed across that range. 150 Hz is a starting point. To find yours without committing, audition a few:

Prompt: Audition a 200 Hz high-pass on the track from 0 to 10 seconds.

audition_effect plays a few seconds with the effect added and creates no node. Once you have a cutoff you like, ask for the real thing.

Step 5: Fade it in

Prompt: Fade the track in over the first 4 bars.

fade is linear, in or out, over a range you give it. Four bars at 120 BPM is 8 seconds. The fade is what lets the intro slide in under the end of the previous track instead of arriving as a hard edge.

Step 6: Listen, then export

Play the start, then the join at the end of the new bars, then the drop. In the demo you hear the original intro first, then the new one, then the drop. If something is off, say what you hear in plain words (“the join clicks”, “the filter comes off too early”) and the agent will adjust the range or cutoff. When it sounds right:

Prompt: Export the track as a WAV to /Users/me/Desktop/extended-intro.wav.

render_final also writes FLAC and MP3. A DJ edit usually keeps the level of the original, so there is no loudness step here; the beatmatch walkthrough covers mastering for a mix.

Try two lengths, keep both

You rarely know whether 16 or 32 bars is right until you hear it. Name the version you have (name_node labels a node in the graph, and right-clicking a node in the Graph tab renames it too), step back to Step 3, and paste a different number of times. Both versions stay in the graph, and you can switch between them with A/B compare. Undo is a graph explains how.

Every tool named here is listed in the tools reference. To try this on your own tracks, download the latest release for macOS, Windows or Linux.

edytlab is an open-source, local-first AI audio editor. Download the latest release or star it on GitHub.