Audio Merger
Drag the clips into the order you want, join them end to end, with a gap or with a crossfade, and save one file without uploading anything.
Drop the clips here
MP3, WAV, M4A, OGG or FLAC. Decoded in this page, never uploaded.
Drag a row to reorder, or use the arrows. The order here is the order in the file.
Seconds of silence at each join. Up to 30.
Seconds of overlap. Capped at half the shortest clip.
Equal power suits unrelated recordings.
Pulls every clip toward the middle loudness. Capped so nothing clips or gets over-amplified.
Scales the finished file so its loudest sample sits at 0.98.
- Clips
- —
- Sources
- —
- Result
- —
- Approx. size
- —
- Output
- —
Why a crossfade shortens the file
A crossfade overlaps two clips rather than padding between them, so each join removes its own length from the total: five clips with a one-second crossfade come out four seconds shorter than the five added together. The result figure above already accounts for it. Every join also gets a 3 ms ramp, even end to end with no gap, because a step from one waveform straight into another is an audible click.
Everything here runs on your device. Nothing you enter is uploaded or stored.
Joining audio is usually a job with a deadline attached. Three voice memos that are really one interview. A set of takes that need to become one file before a meeting. Chapters of an audiobook, a podcast intro against the episode, two halves of a lecture the recorder split at the two-gigabyte mark. It is a small job, and it should not require an upload, an account, or a desktop editor you install once and never open again.
The order is the list
Drop the clips in, then drag the rows. The order you see is the order in the file, and the arrow buttons do the same thing for anyone who would rather not drag. Each row shows the clip’s duration, its sample rate and whether it is mono or stereo, because those are the three things that decide what the merge has to reconcile.
Removing a clip removes it from the merge, not from your disk, and the numbers above the buttons update as you go. The result length is calculated before anything is processed — it is what you are deciding against, so it should not arrive after the file does.
Three joins, not three presets
End to end is exact. The clips butt against each other with nothing between them, which is what you want for takes that were recorded to fit together, or halves of a recording that was split mid-sentence.
With a gap inserts a measured silence at every join. This is the audiobook and chapter setting: a second and a half between sections reads as structure, where no gap at all reads as a mistake.
Crossfade overlaps the clips so one fades out as the next fades in. It is the only one of the three that changes the total length, and the readout says so rather than leaving you to work out why the file came back short.
The fade curve has two options and the difference is real. Equal power uses sine and cosine gains, which holds the perceived loudness flat across the seam — the right choice for two unrelated recordings, whose energies add rather than their amplitudes. Linear ramps both sides in a straight line, which is right when the two clips are the same material, and which dips about 3dB in the middle when they are not. Equal power has its own cost: on highly correlated clips the two waveforms add in amplitude and the seam peaks around 1.41 times either input, which is why the page checks the finished file for clipping and offers to normalise rather than assuming.
The crossfade is also capped at half the shortest clip in the set. A two-second fade against a three-second clip would run past that clip’s own start and pull in audio from the one before it, so the cap is not a limitation being imposed on you — it is the longest fade that is arithmetically possible. When the cap bites, the page shows the length actually being used.
Level matching, with the caps stated
Clips recorded on different days at different distances arrive at different volumes, and a merge that ignores that produces a file the listener has to ride the volume knob through. Ticking the match option measures every clip, takes the median as the target, and moves each one toward it — half go down, half go up, and the total amount of gain applied stays small.
Where it cannot get there, it says so. A clip whose peaks already sit near full scale cannot be raised without clipping, and a nearly silent clip boosted by 40dB would amplify room noise and preamp hiss rather than a voice, so boosting stops at 18dB. Those clips are named on the page. Naming them is the entire difference between a tool that matched what it could and a tool that quietly distorted a file to make a checkbox look effective.
Nothing is uploaded
Every clip is decoded with the browser’s own Web Audio API, joined as raw floating-point samples in this page, and encoded back on your machine. No server is involved at any point, which matters more for audio than for most file types — audio is usually a recording of a room with people in it who never agreed to a third party holding a copy.
The practical ceiling is memory, not any limit set here. Decoded audio is roughly 10MB per minute of stereo at 44.1kHz whatever the source weighed, and every clip is held at once so the order can be changed and the result re-estimated. A dozen songs is comfortable on a desktop and may not be on a phone.
Trim the clips first with MP3 Cutter, change the format afterwards with Audio Converter, or fix a clip that runs too fast or too slow using Audio Speed Changer.
Questions
Why is the merged file shorter than the clips added together?
Because a crossfade overlaps the clips rather than padding between them, and that is what a crossfade is. Five clips joined with a one-second crossfade have four joins, and each join consumes one second from the total, so the result is four seconds shorter than the five sources. Nothing has been dropped — the last second of each clip and the first second of the next are playing at the same time, one fading down as the other comes up. The result figure above the buttons already accounts for it, which is worth checking against other tools: a duration readout that shows the naive sum is a readout that has not actually thought about the join.
What sample rate does the merged file end up at?
The highest of any clip you loaded, never the first clip's. This matters more than it sounds. If the first clip decided, the whole file would change character when you dragged a row into a different position, which is indefensible. If the lowest decided, one 16kHz voice memo would drag a set of 48kHz recordings down with it and throw away detail that cannot be recovered. So the highest wins, everything slower is resampled up to meet it, and the page names the files it had to resample. Resampling up cannot add detail that was never recorded — a 16kHz clip in a 48kHz file still sounds like a 16kHz clip — but it does keep the good material intact, and being told which clip is the weak link is more useful than a silent decision either way.
What does matching the levels actually do?
It measures the RMS level of every clip, takes the median as the target, and applies one gain per clip to move it toward that target. RMS rather than peak, because peak matching is decided by whichever clip contains the single loudest transient — one door slam sets the level for an entire audiobook. The median rather than the mean or the loudest, because a mean is dragged around by one outlier and matching to the loudest forces every other clip up into the ceiling. Two caps then apply: no clip is raised past the point where its own peaks would exceed full scale, and nothing is boosted by more than 18dB. When a cap bites, the page names the clip instead of distorting it. This is level matching, not loudness normalisation to a broadcast standard — that needs an LUFS integrator and a much longer conversation.
Why does every join get a fade even when I ask for none?
Because audio is a moving voltage, and butting two clips together means the file steps from wherever the first one ended to wherever the second one began, in a single sample. That step is a click, and it is audible on a phone speaker. A 3ms ramp on each side of the seam removes it and is far too short to hear as a fade — 3ms is about a tenth of the shortest sound you can identify as having a length. In crossfade mode the ramps you asked for already cover the seams, so no extra fade is added there; only the outer two edges of the finished file get the floor.
Can it join files of different formats?
Yes, and that is the normal case. Every clip is decoded to raw samples before anything is joined, so an M4A from a phone, a WAV from a recorder and an MP3 from a download become the same kind of data and can sit next to each other. Different sample rates and different channel counts are reconciled as well — mixing mono and stereo produces a stereo file, with the mono clips duplicated to both sides rather than the whole file collapsing to mono. What the output cannot be is M4A or AAC, because no browser can encode them. WAV and MP3 are the two formats a browser can genuinely write, so those are the two offered.
Last updated