gizmobench

Audio Joiner

Search for an audio joiner and page one is sites that upload your files to a server and mail back a link, which for a podcast draft or a voice memo is both slower than doing it here and a data question nobody wanted to answer. This one decodes every file in this browser tab, so the moment a clip is added you can see its real decoded length, its channel count and its sample rate, and the total updates as you reorder the list. Clips play in the order on the left, moved with buttons rather than a drag you cannot do on a phone, and the crossfade is a number of seconds: 0 joins them end to end, and anything larger overlaps each pair and fades one into the other in a straight line, which is why three clips of 1, 2 and 3 seconds with a 0.25 second crossfade come to 5.5 seconds rather than 6. Files of different sample rates and channel counts are resampled and mixed to one setting you choose, 22,050, 44,100 or 48,000 Hz in mono or stereo, and every clip that gets converted says so on its own line instead of having it done silently. The join is rendered with the browser's own offline audio engine and written as uncompressed 16-bit PCM WAV, which you can play on the page before you download it. Nothing is uploaded and no audio is written to this browser's storage: only the three settings are remembered, and Start over at the top of the page forgets them.

Clips, in ordernone yet

Add the recordings you want joined. They stay on this device: the browser decodes each one here, and the order on this list is the order they play in.

The joinmono · 44.100 kHz

0:00.00

The total is the sum of the clips, less one crossfade for every join between them.

Sample rate
Channels
Crossfade
Total
0:00.00

Ready. Add two or more audio files, put them in the order you want, then join.

  • Two clips, one overlap1 s and 2 s with a 0.25 s crossfade
    2.75 seconds, which is 0:02.75
  • Three clips, two overlapsn clips overlap n-1 times
    1 + 2 + 3 less two crossfades is 5.5 seconds
  • This joinmono at 44.100 kHz, 16-bit PCM
    Add files to size the WAV.

Clips play in the order on the left, so move one up or down to change where it lands. A crossfade of 0 is a straight join; anything larger overlaps each pair by that many seconds and fades one into the other in a straight line, which is why the total is shorter than the sum. Sample rate and channels are what the finished WAV is written at, and every clip that has to be converted says so on its own line. One tab holds up to 86,400,000 samples of joined audio, which is 15 minutes of stereo at 48 kHz and a little over an hour of mono at 22.05 kHz.

The length is arithmetic, and the audio never leaves this tab. Joins and exports at the sample rate you choose, decoding every file on your own device. The total length is exact arithmetic on the decoded durations less any crossfade. Re-encoding audio that was already compressed cannot restore detail the first encoder discarded.

Common questions

Which audio files can I join?
Whatever this browser can already decode, which is the honest answer because the decoding is the browser's own. In practice that means MP3, WAV, M4A and AAC, OGG and Opus, and FLAC in current versions of Chrome, Firefox, Safari and Edge, with the exact list differing a little between them. There is no separate list of supported formats maintained here and nothing to keep up to date: each file is handed to the browser's decoder as it is added. A file that comes back undecodable is named in the message and left out, and the rest of the list still joins, so one bad export in a folder of takes does not stop the job. A proprietary or DRM-protected file has to be exported as a WAV or an MP3 first.
Are my files uploaded anywhere?
No. They are never uploaded. Each file is read by the decoder built into this browser, the clips are placed and faded by the browser's offline audio engine in this tab, and the finished WAV is written by JavaScript here and handed to the browser's download. There is no queue, no account and no request of any kind, so no part of your audio reaches a server, an analytics call or an error report. The only things kept between visits are the three settings, which are the sample rate, the channel choice and the crossfade, stored in this browser under one key. No audio is ever written to storage: the decoded clips sit in this tab's memory and go when you close or reload the page. The Start over button at the top of the page forgets the settings.
Why is the download a WAV, and how big is it?
Because browsers decode many formats and encode almost none. The platform has no MP3 or AAC encoder in it, so a joiner that runs entirely in the page either ships a large encoder of its own or writes the one format the platform can write, which is uncompressed 16-bit PCM in a RIFF container. This tool writes the WAV. That works out at about 10.6 MB a minute for stereo at 44,100 Hz, or a quarter of that for mono at 22,050 Hz, and the page prints the size of the finished file before you download anything. What you get in exchange is that the audio is not put through a second lossy encode on the way out. Two honest details sit beside that: whatever the original compression already removed is gone before this tool ever sees the file, and the WAV is written at 16 bits, so samples are rounded to the nearest 16-bit value and anything past full scale is clamped rather than allowed to wrap.
What does the crossfade do, and when should I use one?
It overlaps each pair of neighbouring clips by the number of seconds you set and fades the outgoing clip down while the incoming one comes up, in a straight line. That is why the total gets shorter as the crossfade grows: n clips have n-1 joins between them, so 1 second plus 2 seconds with a 0.25 second crossfade is 2.75 seconds, not 3. A quarter of a second is usually enough to take the click off a join between spoken takes; a second or two suits music, where an abrupt cut is more obvious. Leave it at 0 for a straight join, which is what you want when the clips are already trimmed to where they should meet. A crossfade as long as the shorter of two neighbouring clips is refused with that clip named, because the overlap would consume the whole of it. One more thing worth knowing: two loud passages summed in the overlap can reach full scale, and samples past it are clamped.
What happens when the files have different sample rates or channel counts?
They are brought to one setting you choose, and the page says what it did to each clip. The sample rate is 22,050, 44,100 or 48,000 Hz, and every clip is resampled to it by the browser's own offline audio engine as the join is rendered. For channels there are three choices: mono, stereo, or match the sources, which takes the widest source so a single stereo clip among mono ones keeps the join in stereo. A stereo clip going to mono has its two channels averaged, a mono clip going to stereo is copied to both channels, and a clip with more than two channels is folded to the target by the browser's channel mixing. Each of those is printed as its own line beside the total, one for every clip, so nothing is converted quietly.
How long a join can this page make, and is there a file size limit?
There is no file size limit, because nothing is uploaded and there is nothing to charge for. What is finite is the memory of one browser tab, so the ceiling is on the joined audio rather than on the files: 86,400,000 samples, which is 15 minutes of stereo at 48,000 Hz, about 32 minutes of mono at 44,100 Hz, or a little over an hour of mono at 22,050 Hz. The join is held as 32-bit floats while it renders and written again as 16-bit PCM, so it exists twice over before a byte reaches your disk, which is what that number is really measuring. Past the ceiling you get a message with the actual sample count, the limit and the three ways down: remove a clip, choose a lower sample rate, or join in mono.
Can I reorder the clips without dragging them?
Yes, and that is the only way the tool offers, deliberately. Each clip in the list has an up button, a down button and a remove button, all of them ordinary buttons you can reach with the Tab key and press with the keyboard, and each one is labelled with the name of the file it moves. A drag-and-drop list is awkward on a phone and unusable with a keyboard or a screen reader, so the order is set by moving one clip at a time and the number in front of each name tells you where it sits. The total and the conversion lines update as soon as the order changes.
Can I hear the join before downloading it?
Yes. Press Join and the page renders the whole thing at your chosen settings, then puts it in an ordinary audio player on the right, under the total length in that pane. The size in kB is printed outside that pane: the status line under the stage reports the joined length, the channels, the sample rate and the kB as soon as the render finishes, and the This join row of the worked cases carries the same length and kB. Play it in the player, and download only if it is right. If you change the order, the crossfade, the sample rate or the channels after that, the preview is discarded and Join renders it again at the new settings, because a rendered file belongs to one exact set of clips and settings and a player that lagged behind the page would be offering a file the page is no longer describing.

Joins and exports at the sample rate you choose, decoding every file on your own device. The total length is exact arithmetic on the decoded durations less any crossfade. Re-encoding audio that was already compressed cannot restore detail the first encoder discarded.