CoProducer Measure a mix
A glowing gold waveform sculpture on black marble that ends in a sharp clean-cut edge, a faint cyan trail of light fading away beyond the cut, soft magenta light on studio monitors behind

Delivery · 26 October 2026 · 7 min

Song ending cut off when you export? Let the tail ring past the last bar

NoDAW Labs · Lacquer Vol. 06

If the end of your song gets cut off when you export, the export range is stopping at the last bar line while the reverb and delay are still ringing. Run the range at least two bars past the last note, longer for big reverbs, high-feedback delays and slow tempos, then check that the file ends in silence and not mid-sound. Trim the extra silence afterwards. Never trim the tail.

You play the bounce back and the last chord just stops. Not a fade, not a decay. A door slamming. In the session it rang out beautifully. Or the last word of the vocal had a delay throw that echoed off into the dark, and in the bounce the echoes get chopped off mid-repeat.

Nothing is wrong with the mix. The export did exactly what it was told: render from here to here. The “here” at the end is usually the last bar line or the end of the last region, and the effects don’t know the song is over.

Why the bounce stops early

Reverb and delay keep making sound after the notes feeding them stop. Some DAWs have a tail or “remainder” option in the export window. Others render exactly the selection you give them, and not a sample more. Loop-brace exports, region bounces and bounce-in-place are the usual suspects, along with an end marker someone set months ago, before the outro got its big reverb.

A cut ending also clicks. A sound that stops at full swing is a hard edge, the same thing we measured in clicks at your edit points. At the very end of a file it’s the worst place for one, because nothing comes after it to cover it up.

How far past the last bar?

Far enough for the slowest thing in the session to die away. Here’s the arithmetic for bar lengths, reverb decays and delay feedback:

$ python3 tail_math.py
bar length (4/4):
   70 BPM  1 bar 3.429 s   2 bars 6.857 s
   90 BPM  1 bar 2.667 s   2 bars 5.333 s
  120 BPM  1 bar 2.000 s   2 bars 4.000 s
  140 BPM  1 bar 1.714 s   2 bars 3.429 s
  160 BPM  1 bar 1.500 s   2 bars 3.000 s

reverb: a 60 dB decay of N seconds is how many bars?
  1.2 s decay  = 0.45 bars at 90 BPM, 0.70 bars at 140 BPM
  2.4 s decay  = 0.90 bars at 90 BPM, 1.40 bars at 140 BPM
  4.0 s decay  = 1.50 bars at 90 BPM, 2.33 bars at 140 BPM

delay throw: repeats until the echo is 60 dB down (quarter note at 90 BPM = 0.667 s)
  feedback 0.30: 10.5 dB quieter per repeat,  6 repeats,  4.00 s
  feedback 0.45:  6.9 dB quieter per repeat,  9 repeats,  6.00 s
  feedback 0.60:  4.4 dB quieter per repeat, 14 repeats,  9.33 s
  feedback 0.75:  2.5 dB quieter per repeat, 25 repeats, 16.67 s

this demo: tail runs 3.683 s past the last bar line = 1.38 bars -> export 2 extra bars
  slowed to 0.8x the same tail lasts 4.604 s
  slowed to 0.75x the same tail lasts 4.911 s

A few things jump out. A 2.4-second reverb is under a bar at 90 BPM but 1.4 bars at 140. Delay feedback is the sneaky one. At 0.45 feedback each repeat is only 6.9 dB quieter than the last, so a quarter-note throw at 90 BPM takes 9 repeats and 6 seconds to fall 60 dB. Push the feedback to 0.75 for a dub-style throw and it’s 25 repeats and 16.67 seconds. Those are 60 dB below where each effect starts. Tails that start quieter reach silence sooner, but you can’t know that until you check.

Two extra bars is a good default. For ambient outros, dub throws and slow ballads, give it four or more and trim later. If you sync your throws to the tempo, setting delay time from the tempo has the note lengths.

Check that the file actually ends

You can hear a hard stop on good speakers. It’s easy to miss on a laptop, and nobody listens to the last second of every alternate bounce. This script reads a WAV and reports how loud the last 50 ms are, when the tail drops below −60 and −80 dBFS for good, and how much silence trails it:

#!/usr/bin/env python3
"""Does a bounce end, or does it get cut off? Reads a 16/24/32-bit WAV and reports how loud the last
50 ms are, where the tail drops below -60 and -80 dBFS for good, and how much silence trails it.
Usage: python3 tail_check.py song.wav"""
import sys, wave, numpy as np

with wave.open(sys.argv[1]) as w:
    sr, ch, sw, nf = w.getframerate(), w.getnchannels(), w.getsampwidth(), w.getnframes()
    raw = w.readframes(nf)
if sw == 3:                                             # 24-bit: pad each sample to 4 bytes
    b = np.frombuffer(raw, np.uint8).reshape(-1, 3)
    x = (np.c_[np.zeros(len(b), np.uint8), b].copy().view("<i4").ravel() >> 8).astype(float) / 2 ** 23
else:
    x = np.frombuffer(raw, {2: "<i2", 4: "<i4"}[sw]).astype(float) / 2 ** (8 * sw - 1)
x = x.reshape(-1, ch)
db = lambda v: 20 * np.log10(v + 1e-12)
hop = int(0.05 * sr)                                    # 50 ms RMS windows
lv = db(np.sqrt((x[: len(x) // hop * hop].reshape(-1, hop, ch) ** 2).mean(axis=(1, 2))))
print(f"{sys.argv[1]}: {len(x)/sr:.3f} s, {sr} Hz, {ch} ch, {8*sw}-bit")
fmt = lambda v: "digital silence" if v < -200 else f"{v:.1f} dBFS"
print(f"  last 50 ms RMS: {fmt(lv[-1])}; last sample: {fmt(db(np.abs(x[-1]).max()))}")
for thr in (-60, -80):
    above = np.nonzero(lv > thr)[0]
    end = (above[-1] + 1) * hop / sr if len(above) else 0.0
    left = len(x) / sr - end
    print(f"  below {thr} dBFS for good at {end:.3f} s" if left > 0.05 else
          f"  below {thr} dBFS: never - still above it when the file ends")
nz = np.nonzero(np.abs(x).max(axis=1) > 0)[0]
print(f"  trailing digital silence {(len(x) - 1 - nz[-1]) / sr if len(nz) else len(x)/sr:.3f} s")
print("  verdict: " + ("CUT OFF - the tail is still ringing when the file stops" if lv[-1] > -60 else
                       "ends cleanly - the tail has died away before the file stops"))

We built a 90 BPM ending with make_ending.py: a C minor 7 chord on the downbeat of the last bar into a reverb with a 2.4-second decay, a kick that stops a bar earlier, and a quarter-note delay throw at 0.45 feedback on the last vocal word. One export stops at the last bar line, 10.667 s. The other runs 8 seconds past it:

$ python3 tail_check.py ending_cut.wav
ending_cut.wav: 10.667 s, 44100 Hz, 2 ch, 16-bit
  last 50 ms RMS: -31.8 dBFS; last sample: -25.8 dBFS
  below -60 dBFS: never - still above it when the file ends
  below -80 dBFS: never - still above it when the file ends
  trailing digital silence 0.000 s
  verdict: CUT OFF - the tail is still ringing when the file stops

$ python3 tail_check.py ending_full.wav
ending_full.wav: 18.667 s, 44100 Hz, 2 ch, 16-bit
  last 50 ms RMS: digital silence; last sample: digital silence
  below -60 dBFS for good at 14.350 s
  below -80 dBFS for good at 15.050 s
  trailing digital silence 2.554 s
  verdict: ends cleanly - the tail has died away before the file stops

The cut version’s last 50 ms sit at −31.8 dBFS and its very last sample at −25.8 dBFS. That isn’t a tail fading out. That’s the song still playing when the file stops. The long version drops below −60 dBFS for good at 14.350 s, which is 3.68 seconds or 1.38 bars past the bar line. Two extra bars would have covered it.

Export long, then trim the silence

  1. Export long. Two bars past the last note by default, more for the long reverbs, heavy feedback and slow tempos above.
  2. Check the end. Run the script, or zoom in on the last second of the waveform with the vertical zoom up. The tail should taper into nothing, not stop at a wall.
  3. Trim the extra. Cut a little after the tail falls below about −60 dBFS, or −80 if the ending is quiet and exposed, and put a short fade on the last part so the cut itself lands in silence. Our long bounce still had 2.554 seconds of digital silence after the tail was gone. You don’t need all of that.
  4. Don’t fade the tail to save time. If the reverb is too long for the song, shorten the reverb in the mix. The ending should be a decision, not an export accident.
  5. Do the start too. Silence before the first note has its own cost, covered in the silence at the top of your bounce.

Sending it to a mastering engineer? Send the full tail with the extra silence and let them trim. It’s easy to cut silence and impossible to get back a tail that was never rendered. Stems follow the same rule: every stem runs the same length, past the last tail, as covered in exporting stems for a mixer.

Fade-outs, albums and slowed versions

If the song fades out, draw the fade in the session so the reverb and delay fade with the music. A fade drawn on the bounced file after a hard cut still has the cut in it, just quieter.

On an album where songs run into each other, the end of one track and the start of the next are a single sequencing decision, and the gap between them has its own traps once the files are encoded. That’s in why gapless albums get gaps after MP3 or AAC.

Slowing a song down stretches everything, tail included. From the bottom of the arithmetic above, our 3.68-second tail lasts 4.60 seconds at 0.8x and 4.91 seconds at 0.75x. If you trimmed the master tight and then slow it down, there’s no extra silence for that longer tail to ring into. So if you’re slowing a song in the ScrewAI demo, start from the long export and trim after. More on when to slow in when to slow the bounce.

Genre notes

Why does my song cut off at the end when I export?
The export range stops at the last bar or region while reverb and delay are still ringing. Some DAWs render only the selection you give them. Extend the range two bars or more past the last note and export again.
How much silence should be at the end of a song?
Enough for the tail to die away, plus a short fade. Trim a little after the tail falls below about −60 dBFS. On an album, the gap before the next song is a sequencing choice, so set it there.
Should I fade out the end of the bounce?
Fade the silence after the tail, not the tail itself. If you want the song to fade out, draw the fade in the session so the effects fade with the music.
Do stems need the reverb tail too?
Yes. Export every stem the same length, from the same start to a point past the last tail, so they line up and nothing gets cut short in the mix.

A free one-pager

The checklist we run before every release.

Loudness, true peak, mono, tails, export settings and the metadata basics, on one page. Leave your email and it opens straight away, or read it here first. No email needed for that.