Joining audio means placing two or more decoded audio tracks end-to-end in a chosen order and exporting the result as one combined file, and Audio Joiner does exactly that in your browser by stitching the last sample frame of one track directly to the first sample frame of the next. Nothing is uploaded, no account is created, and the combined output is a freshly encoded RIFF/WAVE file with interleaved little-endian signed 16-bit PCM samples at the decoded sample rate of the shared AudioContext. The whole flow — file reading, decoding through the Web Audio API, channel concatenation, preview, and download — runs locally in the current tab using temporary object URLs that are released when replaced or when the page closes. Track order is the order you see in the list, and that list is the only thing that decides what goes first, second, third, and so on in the result.
From a beginner's perspective, the practical job usually looks like one of these: merging a few intro and outro clips into one file, stitching lecture segments recorded separately, combining a backing track with a voice memo, or building a demo reel from short takes. Each of those jobs maps to the same three actions: choose the files, set the order, and download. The interesting decisions happen before you click Join, because every limit the tool publishes — file count, per-file size, total size, duration, channel count, sample rate, and the global channel-sample budget — is enforced up front rather than fixed quietly behind the scenes. Reading those limits once saves you a second selection pass later.

What Counts as "Joining" Here
Joining in this tool is a strict definition: concatenation of decoded channel samples in list order, with no inserted silence, no overlap, no crossfade, no normalization, no transition, and no automatic trimming. The last sample frame of one decoded track is followed immediately by the first sample frame of the next track in the output channel arrays. That means the only way to control what happens at the seams between clips is to edit the source files themselves; the join itself does not smooth anything. Producing a fade, a gap, or a loudness match has to happen inside the source before joining, or you need a different tool afterward.
The output is a single downloadable WAV. It is not a re-encoded copy of any input file, and it does not carry forward the original codec, bitrate, tags, album art, chapters, cue points, loop points, loudness fields, timestamps, or other container metadata. It is a new static PCM representation of the samples the browser produced, nothing more. Because PCM16 WAV is uncompressed, the result is often noticeably larger on disk than the compressed sources (MP3, AAC, Opus, Vorbis, FLAC), which is normal and not a quality problem.
The Limits That Decide Whether Your Selection Works
Every limit the tool enforces is explicit, and a violation produces a specific rejection message instead of a silently mangled result. The full set lives in the table below; these are the numbers compared against the decoded buffers after the browser finishes its work.
| Limit | Allowed range | What it controls |
|---|---|---|
| File count | 2 to 10 | Number of files in one selection |
| Per-file size | Up to 25 MiB (26,214,400 bytes) | Each encoded file separately |
| Total selection size | Up to 100 MiB (104,857,600 bytes) | Sum of every file picked |
| Total decoded duration | Up to 30 minutes | Across all tracks combined |
| Channel count | Up to 8 channels | Must match across every track |
| Sample rate | Up to 192 kHz | Decoded working rate from the AudioContext |
| Channel-sample budget | Up to 30,000,000 samples | Counted across every channel |
A high-rate or multichannel selection can fill the 30 million sample budget before the 30-minute duration limit — long recordings can get rejected even when the duration alone looks fine. Every decoded track must also share the same channel count, so a mix of one mono file and one stereo file is rejected rather than silently duplicating, dropping, averaging, or remapping channels. Mono means every channel plays through one speaker; stereo means the left and right channels stay separate from input to output.
The picker recognizes common MP3, WAV, M4A, AAC, Ogg, WebM, and FLAC names and MIME types, but a recognized extension is not a guarantee that every codec variant can be decoded by the browser you happen to be using. Damaged, encrypted, incomplete, mislabeled, or unsupported files surface a clear error from the same decodeAudioData step that every selection passes through.
Joining Audio Files in Your Browser
The actual workflow is short and lives entirely on one page. Treat the three steps below as the moving parts you need to control; everything else is presentation.
- Open Audio Joiner and choose 2 to 10 browser-decodable audio files in a single selection, staying inside the per-file 25 MiB and total 100 MiB input limits.
- Wait for the browser to decode every file through the shared AudioContext. Preview each decoded track, then use the Move up and Move down controls to set the exact sequence you want in the output.
- Select Join in this order, preview the resulting PCM16 WAV, then download it. The download is one newly encoded RIFF/WAVE file written from interleaved little-endian signed 16-bit PCM samples at the decoded sample rate.
Reordering is not cosmetic: it changes the decoded-buffer array and the visible list together, and it clears any older WAV so a stale preview cannot claim a previous order. The file input is reset after every choice, so picking the same files again to start over is fine. If a selection is rejected, the specific message names the limit that was crossed, and the older decoded buffers are invalidated by job identifier so a slow decode cannot overwrite a newer selection.
Why Your Output Rate Can Differ from the Source
Web Audio decoding uses one AudioContext per selection, and that context has a single working sample rate. The browser may resample source files to that working rate, so the rate you see displayed for the tracks and the result may not match the rate stored in the original files. None of the source sample rates survive into the output individually; the output carries one rate, the working rate of the context. Likewise, the channel layout you end up with is the decoded layout shared by every track — if every input decoded as stereo, your WAV will be stereo, with the left and right channels concatenated independently before WAV interleaving. That same channel-concatenation function is what makes stereo-fixture testing meaningful: golden stereo fixtures with different values in the left and right channels across two tracks prove that track order and channel identity survive the join.
Checking the Result Before You Delete the Originals
PCM16 WAV cannot be reversed back into the original compressed files, and the join is the last step you control before that loss happens. Play the output once and confirm the duration, the order of the seams, and the channel routing (a headphone check, left versus right) before deleting any source. As described in the result-check walkthrough, the simplest tests are: total duration roughly equals the sum of input durations, the waveform window shows no unexpected silence or pop at the seams, and the file size is reasonable for uncompressed audio at the displayed rate. A quick sanity formula is bytes ≈ seconds × channels × 2 × sample_rate, because every frame writes two bytes per channel at 16-bit depth. Float samples from the decoder are clipped to the range from -1 through 1; negative full scale maps to -32768, positive full scale to 32767, and any non-finite values are written as silence instead of garbled bytes.
When Audio Joiner Is the Wrong Tool
Audio Joiner is built for full-track concatenation in a chosen order with strict limits. Reach for Audio Cutter when you need a precise time range rather than every frame of a track. Reach for a dedicated editor when you want fades, loudness matching, channel conversion, compressed output, metadata preservation, or sample-level repair — none of those are features of this joiner. The right rule of thumb: use it when the job is really "place these files end-to-end in this order and give me a WAV," and use something else when the job is any flavor of "make these files sound better together."
If you're weighing options, Apply Audio Effects Online Locally and Download a WAV covers this in detail.