When you join audio files, the details that matter are file count (2 to 10), per-file size (up to 25 MiB), total size (up to 100 MiB), channel count (every file must match), and total decoded duration (up to 30 minutes) — because the browser checks all of them before it writes a single output sample. Add to those the rate ceiling of 192 kHz, the channel ceiling of eight, and the channel-sample ceiling of 30 million across all tracks, and the entire input contract is on the page. None of these limits are negotiable, and none of them are applied silently: a selection that breaks any one of them is rejected with a specific message, and no WAV is produced. The point of knowing these details up front is so you can stage a clean selection on the first try instead of fixing a rejected one after the fact. The same contract also describes the output behavior in plain terms: a freshly encoded, gap-free, uncompressed PCM16 WAV in the order you chose, with no fades, no crossfades, no normalization, and no source metadata carried over. Everything below unpacks what each detail controls, what the browser does with the decoded samples, why the output file is often much larger than the sources, and how to run the join step by step.

what details matter when i join audio
What Details Matter When You Join Audio Files

The Five Details That Decide Whether a Join Succeeds

When you join audio files locally, the browser checks the same five input details before it writes a single output sample. If any one of them is wrong, the join is refused with a specific message and no WAV is produced. Here is what each detail controls and why it matters at the moment of selection.

DetailLimit or ruleWhy it matters
File count per selection2 to 10 filesOne or zero files is not a join; eleven files exceeds the tested budget
Per-file encoded sizeUp to 25 MiB (26,214,400 bytes)Larger files are rejected to keep decoding responsive
Total encoded sizeUp to 100 MiB (104,857,600 bytes)The whole selection is checked, not each file in isolation
Total decoded durationUp to 30 minutes across all filesCombined decoded duration, not the duration shown in the source container
Decoded channel countAll files must match (1 to 8 channels)Mono and stereo mixtures are refused instead of being remixed or duplicated

Two extra technical details interact with the duration limit. Decoded audio may not exceed 192 kHz, and the total channel-sample count across all tracks is capped at 30 million samples. A high-rate or multichannel selection can reach the sample budget well before the 30-minute mark, which is why both checks run together rather than independently. Nothing is shortened, downmixed, downsampled, or omitted to fit a limit; the selection is rejected so you can adjust it yourself before trying again. Damaged, encrypted, incomplete, mislabeled, or unsupported files produce a clear error during decoding, and no codec library or server fallback is added to rescue them.

What the Browser Does With the Decoded Samples

After every file decodes, the joiner copies each decoded channel into one Float32Array at tested cumulative frame offsets. That phrasing matters because it explains the behavior the user actually hears. 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. There is no inserted silence, no overlap, no crossfade, no normalization, no transition, and no automatic trimming between the source files.

The matching-channels rule is enforced as a hard check. A mono file and a stereo file in the same selection are rejected rather than duplicated, dropped, averaged, or remapped into a new layout. Matching channels are retained in their decoded order and concatenated independently before WAV interleaving. The production joiner and isolated tests share the same channel-concatenation function and join plan, and golden stereo fixtures use different values in the left and right channels across two tracks, proving that track order and channel identity survive the join. If you specifically need gap-free concatenation with the same channel rule, the practical no-gaps behavior is documented in this guide.

Web Audio may resample source files to the context's working sample rate, so the rate displayed for the tracks and the result may differ from the rates stored in the original files. The output does not preserve independent source sample rates — every track in the WAV uses the single rate produced by the shared AudioContext. Every file in one selection is decoded through that same AudioContext, and the context is closed after decoding, on replacement, and during cleanup. Decode work carries a job identifier, and component cleanup invalidates older jobs so a slow read or decode cannot overwrite a newer selection.

Why the Output WAV Is Larger Than the Sources

Every download is a newly encoded RIFF/WAVE file with interleaved, little-endian, signed 16-bit PCM samples. The shared encoder writes the RIFF size, WAVE and fmt identifiers, PCM format tag, channel count, decoded sample rate, byte rate, block alignment, 16-bit depth, data identifier, and the exact data byte length. Tests inspect those header bytes and the complete stereo sample sequence. None of those values come from the source file's container — they are recomputed from the decoded samples inside the browser tab.

PCM WAV is uncompressed, so the file is usually much larger than the selected MP3, AAC, Opus, Vorbis, or FLAC sources. Float samples are clipped to the range from -1 through 1; negative full scale maps to -32768, positive full scale to 32767, and non-finite values are written as silence. The output also does not preserve the original codec, bitrate, encoder settings, tags, album art, chapters, cue points, loop points, loudness fields, timestamps, or any other container metadata. It is a new static PCM representation of the browser-decoded samples, not a repackaged version of the inputs.

For reference on what header fields a WAV must carry, the Microsoft RIFF/WAVE format reference documents the same RIFF/WAVE structure that the local encoder writes. Keep the source files and confirm the downloaded duration, order, joins, channel playback, and file size before deleting any original.

Join 2 to 10 Audio Files in Your Browser

  1. Open Audio Joiner in a browser tab and prepare the files you want to combine.
  2. Choose 2 to 10 files together using the file picker. The picker recognizes common MP3, WAV, M4A, AAC, Ogg, WebM, and FLAC names and MIME types, although a recognized extension does not guarantee that every codec variant decodes in your specific browser.
  3. Wait while the browser decodes each file through one shared AudioContext. Damaged, encrypted, incomplete, mislabeled, or unsupported files produce a clear error rather than a partial join.
  4. Preview each decoded track and use Move up or Move down to put the list in the required order. Reordering updates the decoded-buffer array and the visible list together, and clears any older WAV so a stale result cannot claim a previous order.
  5. Select Join in this order, then preview the resulting PCM16 WAV using the built-in player.
  6. Download the WAV and keep the source files until you have confirmed the duration, order, joins, channel playback, and file size.

The decoding step is the one most affected by your environment. Input decoding uses the Web Audio API and therefore depends on the codecs available in the current browser and operating system. No codec library or server fallback is added, so a file that opens in Chrome may not open in Safari, and vice versa. The MDN reference for BaseAudioContext decodeAudioData explains how the browser turns a file's bytes into an AudioBuffer, and the MDN AudioBuffer page describes the channel data and sample rate the joiner reads from. Selecting the same files again works because the file input is reset after every choice.

Verify the Output Before You Delete the Sources

Because the joiner does not preserve source metadata, the only way to confirm correctness is to listen to the preview and inspect the file you just downloaded. A short verification routine catches every category of mistake the joiner does not prevent on its own.

  • Duration check. Open the downloaded WAV in any player and confirm the total length equals the sum of the source files' decoded durations.
  • Order check. Listen for the first second of the first track, the first second of the second track, and so on, to confirm Move up and Move down produced the sequence you wanted.
  • Join-point check. Listen for clicks or pops at the boundaries. Any artifact at a join usually means the source files already contained a click at the cut point, not that the joiner added one.
  • Channel check. For stereo material, listen with headphones and confirm the left and right material is in the right ear. The joiner preserves channel identity across tracks, so a swapped channel is a source-file issue.
  • File size check. A 10-minute stereo WAV at 44.1 kHz is roughly 100 MB. If the downloaded file is dramatically smaller, the join was rejected and no WAV should have been written; if it is dramatically larger than expected, double-check that you downloaded a new file rather than an older cached one.

A more thorough verification routine lives in the practical join checklist, which goes through the same checks in a printable order. Reordering changes the decoded-buffer array and visible list together, and it clears any older WAV so a stale result cannot claim a previous order — that property is what makes the order check reliable rather than a re-test of a previous selection.

When You Need a Different Tool

Audio Joiner is built for one job: concatenating 2 to 10 same-channel browser-decodable files into a single PCM16 WAV, in the order you choose, with no silence, fade, or normalization added. Three categories of work fall outside that scope and need a different tool.

First, time-range editing. If you only need a portion of a file — the chorus of a song, a single phrase from a recording, the middle 30 seconds of a long interview — use Audio Cutter to cut an exact time range from a single browser-decodable audio file and download a local PCM16 WAV.

Second, any work that needs fades, loudness matching, channel conversion, compressed output, metadata preservation, or sample-level repair. The local joiner is explicit about not doing those things, and adding them silently would break the gap-free, deterministic join the tool is designed for. A dedicated audio editor is the correct choice for that scope.

Third, privacy-sensitive workflows. File reading, Web Audio decoding, channel concatenation, WAV encoding, preview, and download all happen in the current browser tab, and the AudioContext is closed after decoding, on replacement, and during cleanup. Selected files and the finished WAV use temporary local object URLs that are released when replaced or when the page closes. If the task only requires concatenation, that local path is exactly what you want.