Joining 2 to 10 browser-decodable audio files into one PCM16 WAV file is a three-step local process: pick your files, reorder the list, and click Join. Audio Joiner follows this exact sequence without installing software, without uploading anything to a server, and without inserting gaps, fades, or normalization between tracks. Every file in one selection is decoded through one AudioContext in the current browser tab; the decoded channels are then concatenated in list order; and the result is encoded as a fresh RIFF/WAVE file with interleaved, little-endian, signed 16-bit PCM samples that downloads directly to your device. Because there is no transcoding pipeline, codec conversion, or loudness adjustment to configure, the workflow collapses to picking, ordering, and joining, which is the simplest version of the task the tool is built to do.

Why a Simpler Process Matters
Most audio joining tasks accumulate friction from sources that have nothing to do with the joining itself. Installing a desktop editor means choosing a version, granting permissions, learning the project model, and accepting automatic updates. Uploading to a server-based service means waiting for transfers, trusting a third party with your source files (the privacy side is covered in Are Audio Files Uploaded When You Join Audio Locally?), and accepting whatever output format the service returns. Both paths also tend to default to convenience behaviors that change the result: a fade-in to mask an edit, a crossfade to hide a sample mismatch, a normalization pass that boosts quiet sections, or a re-encode that swaps the original codec for a smaller one. None of those decisions are required by the actual task of concatenating audio, which is why a simpler workflow removes them entirely.
A local browser-based joiner removes the installation, the upload, and the silent processing in one move. The browser you already have open reads the files, decodes them, and writes a new file. There is no codec conversion step, no automatic normalization, no loudness matching, no inserted silence, and no crossfade. 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. When the result surprises you, the cause is usually a wrong order or a wrong source file rather than a hidden processing stage you forgot to disable.
Three Steps to Join Audio Locally
The whole job collapses to three controls. Keep the source files within the stated budgets and the rest is just ordering.
- Pick 2 to 10 audio files that your browser can decode, staying within the 25 MiB per-file and 100 MiB total byte budgets.
- Preview each decoded track, then use Move up or Move down until the visible order matches the sequence you want in the final WAV.
- Select Join in this order, preview the resulting PCM16 WAV, and download it to your device.
After the first step, the page lists each track with its decoded duration, channel count, and the working sample rate set by the shared AudioContext. After the second step, every reordering moves both the visible entry and the underlying decoded buffer, and any previously built WAV is invalidated so a stale result cannot claim a different order. After the third step, the preview plays the joined file from a temporary local object URL and the download delivers a brand-new RIFF/WAVE file encoded for that specific join.
What Actually Happens When You Click Join
The three-step interface hides a small, predictable pipeline. After you pick files, the browser reads each one and runs it through decodeAudioData (see MDN's decodeAudioData reference) on one shared AudioContext. That shared context can resample sources to its own working sample rate, which is why the rate shown next to the result may differ from the rates stored in the original files. Decoded tracks must share a channel count, and a mono file alongside a stereo file in the same selection is rejected rather than silently downmixed or remixed. Each AudioBuffer holds the per-channel Float32Arrays that the joiner reads in order.
The join copies each decoded channel into one Float32Array at tested cumulative frame offsets, clips each float sample to the signed 16-bit range with negative full scale mapping to -32768, positive full scale to 32767, and non-finite values written as silence. Channels are interleaved in frame order, and a 44-byte little-endian RIFF/WAVE header is written with the correct RIFF size, WAVE and fmt identifiers, PCM format tag, channel count, decoded sample rate, byte rate, block alignment, 16-bit depth, data identifier, and exact data byte length. The download is a brand-new file: tags, album art, chapters, cue points, and loop points from the source files are not preserved, and the original container is unchanged on disk.
Limits to Plan Around Before You Start
The tool enforces explicit limits rather than truncating silently. Each encoded file may be no larger than 25 MiB (26,214,400 bytes), and the sum of selected files may not exceed 100 MiB (104,857,600 bytes). On the decoded side, total audio may not exceed 30 minutes, eight channels, 192 kHz, or 30 million samples counted across all channels. A high-rate or multichannel selection can reach the sample budget before the time limit, in which case the selection is rejected with a specific reason rather than shortened. Files that are damaged, encrypted, incomplete, or mislabeled also produce a clear error, because a recognized extension does not guarantee that every codec variant can be decoded by your current browser and operating system.
Two interacting limits shape whether a job succeeds. The per-file and total byte budgets guard the read step, which here is just the browser reading local files. The decoded sample budget guards the in-memory work: 30 million channel-samples at the working sample rate is the wall the joiner checks after decoding. If your selection fails, the error names the limit that was reached, and the practical response is usually to shorten a track with Audio Cutter or to convert a high-rate source to a more modest rate in your own software. Limits are reported rather than silently absorbed so the original files stay intact and the decision to adjust them stays with you.
Choosing a Joining Approach That Fits the Task
The right tool depends on what you actually need from the result. A simpler process removes choices; a fuller process adds them. The table below compares the three common paths on the points that change whether your join looks and sounds the way you expect.
| Concern | Local browser joiner | Installed audio editor | Online service that uploads |
|---|---|---|---|
| Installation | Not required | Required | Not required |
| Upload of source files | None | None | Required |
| Inserted silence, fades, or crossfades | None | Optional, configurable | Varies by service |
| Output format | PCM16 WAV only | Configurable, including compressed | Varies by service |
| Channel-count handling | All files must match; mismatches rejected | Manual channel remixing possible | Varies by service |
| Codec and metadata preservation | Not preserved; sources unchanged | Preserved unless re-exported | Varies by service |
| Learning curve | Three controls: pick, move, join | Project model and export configuration | Per-service interface |
Because the local browser joiner accepts only PCM16 WAV output and applies no automatic processing, it is the right choice when you want a deterministic concatenation that is easy to verify, and a poor choice when you need fades, loudness matching, sample-level repair, compressed output, or metadata preservation. For those tasks, an installed editor is the right tool. For a clean concatenation of two or more full tracks, fewer moving parts is a real benefit and a smaller list of things that can quietly change your result.
Verifying the Result Before You Delete the Sources
After downloading, open the WAV in any player and listen to the join points. Because the join is silent at the sample level, a wrong order usually shows up as content in the wrong place rather than as a click or pop. Confirm the duration matches the sum of the source durations at the working sample rate, confirm left and right channels play back correctly (a stereo fixture with different left and right values per track proves channel identity survives the join), and confirm the file size is consistent with uncompressed 16-bit audio, which will be noticeably larger than compressed sources. Only after the downloaded duration, order, joins, and channel playback look correct should you remove the source files from the working directory.
Related reading: Common Mistakes When You Join Audio Files.