Joining audio means concatenating two or more decoded audio tracks end-to-end into a single output file, and the main difference between approaches is whether concatenation happens by re-encoding to a compressed format, by timeline editing with optional fades, or by sample-level channel concatenation that preserves the original decoded PCM data without inserting silence. Audio Joiner takes the third route: it decodes each file in your browser with the Web Audio API, validates that every track shares the same channel count, and writes each decoded channel into one shared Float32Array at tested cumulative frame offsets before a local encoder produces a new RIFF/WAVE file with interleaved, little-endian, signed 16-bit PCM samples. No server receives the audio, no codec library is bundled as a fallback, and the join is gap-free by design — the last sample frame of one decoded track is followed immediately by the first sample frame of the next. Inputs are validated up front against 25 MiB per file, 100 MiB total, 30 minutes of decoded audio, 8 channels, 192 kHz, and a 30 million channel-sample budget, with explicit errors rather than silent trims when a limit is crossed.

People rarely pick a joiner by name first. They usually start with a folder of clips — interview segments, voice notes, podcast chapters, music stems — and then compare what each tool actually does to that folder. Four approaches show up most often: a desktop timeline editor such as Audacity or Ocenaudio, a command-line converter such as ffmpeg or SoX, an online merger that uploads files to a remote server, and a local browser tool such as Audio Joiner. The trade-offs between them are concrete: where the work runs, whether the source files leave your machine, whether the output is re-encoded, and whether the join is sample-accurate or interrupted by inserted silence, overlap, or normalization.

how do i compare approaches to join audio
Compare Approaches to Join Audio and What Sets Them Apart

The four approaches people compare side by side

The table below compares the approaches on properties that actually change the result. It does not compute sample counts or durations — those come from your own files, and the tool reports them once you select audio.

Property Desktop timeline editor Command-line converter Online merger (server) Local browser joiner
Where audio is processed Your computer Your computer Remote server Your browser tab
Files leave your machine No No Yes No
Output format Many (WAV, MP3, FLAC, OGG) Many (any codec you build) Usually MP3 or M4A PCM16 WAV only
Re-encoded by default Often yes, with optional lossless export Yes (codec conversion is the point) Yes No — samples are concatenated, then a fresh WAV is encoded
Crossfade, gap, or fade-in available Yes (user-controlled) Possible via filters Sometimes No — by design, the join is gap-free
Channel-count mixing (mono + stereo) Possible with manual remap Possible via filters Sometimes automatic Rejected — all files must match
Needs install Yes Yes (binary plus codecs) No No
Metadata, tags, chapters preserved Often yes Optional via flags Rarely No — output is a fresh PCM file with no original metadata

Reading the table, the property that most often decides the choice is where the work runs and what the work does to the audio. Timeline editors keep files local and give precise control, but they ask you to install software and usually re-encode to a lossy codec unless you explicitly export WAV. Command-line converters are flexible and scriptable, but every step is a re-encode through whatever codec you name, which means the output is not bit-identical to the source. Online mergers are fast and require no install, but they upload every file to a third-party server, which is a hard constraint for anything confidential. A local browser joiner keeps files local, runs in the existing tab, and produces one WAV — at the cost of a fixed output format and a deliberately minimal feature set.

What sets the browser-based approach apart

The browser-based approach relies on two web platform primitives: the Web Audio API for decoding and the Blob/object URL stack for preview and download. When you select files, Audio Joiner asks the browser to read each one into memory, creates a temporary local object URL so the file can be played back, and then calls decodeAudioData on a shared AudioContext. Decoding is governed by the codecs the current browser and operating system can handle, so a recognized file extension does not guarantee that every codec variant will decode — the picker recognizes common MP3, WAV, M4A, AAC, Ogg, WebM, and FLAC names and MIME types, but damaged, encrypted, incomplete, mislabeled, or unsupported files produce a clear error. For a deeper look at how the browser exposes decoded audio data, the MDN reference for AudioBuffer documents the sample-rate, channel-count, and length fields the joiner reads.

Once every file is decoded, the joiner runs an incremental plan that rejects mismatched channel counts, sample rates above 192 kHz, more than eight channels, total durations above 30 minutes, or selections that exceed 30 million channel-samples. Rejected selections surface as a specific message rather than a silent remap or trim, which is why you may see "all files must decode to the same channel count" if you mix a mono voice memo with a stereo music stem. The shared AudioContext may also resample sources to its working sample rate, so the rate displayed for each track can differ from the rate stored in the original container — the WAV that comes out runs at the working rate, not at the original per-file rates.

The concatenation itself is a sample-level copy: each decoded channel is written into one shared Float32Array at a tested cumulative frame offset, then a small encoder clips float samples to the [-1, 1] range, maps negative full scale to -32768 and positive full scale to 32767, and writes a 44-byte little-endian RIFF/WAVE header that names the channel count, decoded sample rate, byte rate, block alignment, and 16-bit depth before interleaving the PCM samples channel by channel. Tests verify the channel identity, the byte-exact header, and the stereo sample sequence across the join, which is why track order and channel order survive reordering. Reordering the list in the UI updates the decoded-buffer array and the visible list together, and clears any older WAV so a stale result cannot claim the previous order.

Join 2–10 audio files with Audio Joiner

The three steps below are the verified operating flow. They assume you already have the source files ready and that your browser can decode them.

  1. Choose 2–10 browser-decodable audio files. Pick them together so the tool can validate the selection against the per-file (25 MiB, or 26,214,400 bytes) and total (100 MiB, or 104,857,600 bytes) limits. Files that fail to decode — because they are damaged, encrypted, mislabeled, or use a codec the current browser cannot handle — produce a clear error rather than a silent skip. The file input is reset after every choice, so reselecting the same files works on the next pass.
  2. Preview the decoded tracks and set the order. Each track plays from a temporary local object URL. Use the Move up and Move down controls until the list matches the sequence you want. Because reordering updates both the decoded-buffer array and the visible list, the order shown in the UI is exactly the order the encoder will write.
  3. Select Join in this order, preview, and download. The joiner writes one PCM16 WAV that you can preview before saving. The download is a newly encoded RIFF/WAVE file with no original codec, bitrate, tags, or container metadata — only the samples that the browser decoded from your sources.

If you want a more detailed walkthrough of the browser flow, see how to join audio files in your browser step by step.

Limits that decide whether the join runs

The tool publishes its limits up front and rejects a selection when any of them is crossed, instead of silently trimming or downsampling. Keep these in mind before you queue a long compilation.

  • Track count: between 2 and 10 files per join. A single file cannot be joined, and an eleventh file is refused.
  • Per-file size: each encoded file may be no larger than 25 MiB (26,214,400 bytes).
  • Total selection size: the combined selection may not exceed 100 MiB (104,857,600 bytes).
  • Decoded duration: the decoded audio across all tracks may not exceed 30 minutes.
  • Channel count: at most eight channels, and all files in one selection must decode to the same channel count. Mono and stereo mixtures are rejected rather than silently duplicated, dropped, averaged, or remapped.
  • Sample rate and sample budget: the working rate must stay at or below 192 kHz, and the total sample count across all channels may not exceed 30 million. A high-rate or multichannel selection can hit the sample budget before the duration cap does.

When a selection is rejected, the message names the limit that was crossed. Nothing is shortened, downmixed, downsampled, or omitted to make a selection fit; the work does not start until the inputs validate.

When a different approach fits better

Audio Joiner is built around one operation — concatenate decoded channels in the listed order — and it deliberately skips effects that other tools handle well. Reach for something else when any of the following apply:

  • You need a time range, not a full track. For cutting the middle out of a recording or trimming head and tail, use Audio Cutter, which downloads the selected range as a local PCM16 WAV.
  • You need fades, loudness matching, or channel conversion. A timeline editor is the right tool when you want crossfades, normalization, mono-to-stereo upmix, or sample-level repair. Audio Joiner adds none of these on purpose; the join is gap-free and unchanged.
  • You need a compressed output format. The output is PCM16 WAV, which is uncompressed and can be much larger than the MP3, AAC, Opus, Vorbis, or FLAC sources. Re-encode the result with your preferred tool if you need a smaller file.
  • You need metadata preserved. The new WAV does not carry the original tags, album art, chapters, cue points, loop points, loudness fields, or timestamps. Keep the source files until you have confirmed the downloaded duration, order, joins, channel playback, and file size.

If you are unsure whether the joiner is the right tool for a specific problem, the article on how to check the result after you join audio walks through the post-join verification steps in detail.