Loop an Audio File

Pick a short sound and a target length or play count — it's looped in your browser, nothing is uploaded.

Looped audio

Loop audio in your browser

Pick a short sound and how long the result should be — the clip is repeated with ffmpeg, entirely in your browser, and cut to exactly the length you asked for (default 30 seconds). Prefer whole repetitions with no cut at the end? Set Target length to 0 and Or total plays to how many times the clip should play back-to-back. Because the audio is decoded and re-encoded, the joins are sample-accurate — no container-splice clicks.

Worked example

A 6-second rain recording that should run for a minute of background ambience: upload rain.mp3 and set Target length to 60 — the result rain-loop.mp3 plays the rain ten times over and stops at exactly 60 s. For a meditation bell that must ring exactly three times, set Target length to 0 and Or total plays to 3.

Duration or play count?

Limits and edge cases

FAQ

Will the loop be truly seamless?

The joins themselves are sample-accurate — the audio is decoded and repeated at the waveform level, not spliced as files. Whether it sounds seamless depends on the clip: a sound that ends the way it begins loops invisibly, while a clip with a click or an abrupt cut at either edge repeats that flaw at every join. Trim the clip cleanly or fade its edges slightly first.

What's the difference between target length and total plays?

Target length gives you an exact output duration and may cut the final repetition short (fine for ambience). Total plays always finishes the last repetition, so the output is a whole multiple of the clip's length (right for bells or spoken phrases where a cut would be jarring).

Why is my long loop failing or capped?

Outputs are capped at 10 MiB. At 192 kbps mp3 that's about 7 minutes; wav hits the cap after roughly one minute. For long background beds, keep mp3 or ogg as the format, or loop a longer source clip fewer times.

Can I crossfade the repetitions into each other?

Not in this tool — crossfading loop joins needs the clip to overlap itself, which is a different ffmpeg graph. If the joins are audible, the usual fix is a cleaner trim of the source clip; a slight fade at both ends (audio-fade) also softens joins at the cost of a small dip.

Is my audio uploaded anywhere?

No. The page downloads an ffmpeg WebAssembly build once and then processes your file locally in the browser tab — the audio never leaves your device.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool audio-loop 'url=https://example.com/input' 'duration=30' 'count=0' 'format=mp3'

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/audio-loop/?url=https://example.com/input&duration=30&count=0&format=mp3