tools / audio / loop audio

Loop audio

Loop a file N times or out to a target duration, seamless if you want.
Runs locally in your browser. Enable JavaScript to use the interactive tool. The practical details remain available below.

What Loop audio actually does

A target duration is a promise about the finished file, and a looper that repeats until it has passed the target and then stops has not kept it. Asking for sixty seconds from a seven second clip gives sixty three, and adding a crossfade makes the error change sign, because each overlap removes time the repeat count never accounted for. This page counts the repeats with the overlap included and then cuts the result to the target, so the number on the page and the length of the file are the same number. Whole repetitions are still available as an explicit choice rather than as the only behaviour.

How to use it

  • Choose one file. It is decoded in this tab and drawn against the timeline the current settings imply.
  • Loop by a repeat count, or by a target duration and let the page work out the repeats.
  • Render, then compare the predicted length against the length read back from the produced file.

Useful for

  • Extend a short music bed to the exact runtime of a video.
  • Turn a loop into an hour of background audio for a stream or a workspace.
  • Repeat a test tone or a metronome bar out to a fixed practice length.

Limits worth knowing

  • Cutting to an exact target re-encodes, because a stream copy can only cut on a frame boundary. The page says which of the two happened and why.
  • A stream copy of a lossy source carries an encoder padding frame into every join, so the seams are not sample accurate. The page reports the padding per join rather than claiming a seamless result.
  • Whether a loop is audible at the join depends on how the source starts and ends. No looper can make an arbitrary clip meet itself cleanly.

Questions people ask

Is the file uploaded?

No. Decoding, looping and the read-back all happen in this tab. The audio engine is fetched once and cached.

Why did a sixty second target used to give sixty three seconds?

The repeat count was rounded up and the result was never cut. It is now cut to the target, and the whole-repetition behaviour is a checkbox.

Does a crossfade change how many repeats are needed?

Yes. Every join gives up the crossfade length, so more repeats are needed to reach the same target. That is now part of the count.