You can repeat the exact same WAV result every time you join audio in your browser by using the Audio Joiner, which decodes each file once through one shared AudioContext, concatenates the decoded channel samples in the order shown in the list, and writes a fresh 44-byte little-endian RIFF/WAVE PCM16 file from a shared encoder. There is no fade, gap, crossfade, normalization, or resampling added between runs, so identical inputs in identical order produce a byte-identical output. The picker recognizes common MP3, WAV, M4A, AAC, Ogg, WebM, and FLAC names, and the Web Audio API decodes them all through the same context in every attempt. That determinism only holds for the exact selection that produced it; adding, removing, reordering, or replacing a track changes the result. To reproduce a result you must keep the same files, the same order, the same channel count, and stay inside the same per-file, total, duration, channel, and sample budgets.

What "Repeat the Same Result" Means When You Join Audio
When you join audio, "repeating the same result" means producing a WAV that is byte-identical: same duration, same order, same sample sequence, same channel layout, every time you re-run the join on the same selection. The Audio Joiner is built around that property. There is one shared decoder pass, one ordered concatenation step, and one shared encoder. Nothing about the output depends on the time of day, your network, or the order in which you click through the controls. The only thing that has to match between two attempts is the actual input set: the same files, the same order, the same channel count, and the same browser-decoded rates.
Reproducibility is also about scope. A successful WAV is reproducible for the exact selection that created it. Switch a track, drop one, or reorder two, and the next WAV is a different file even though the workflow is unchanged. Treat the repeatability claim as applying to the inputs that produced the file, not to a generic process you run later on different files.
Why the Join Is Deterministic in Your Browser
The Audio Joiner uses one shared AudioContext to decode every file in a single selection. Because every file goes through the same context, the working sample rate, the resampling rule, and the channel-count check are applied uniformly. According to the MDN reference for BaseAudioContext.decodeAudioData, decoding returns an AudioBuffer with fixed channel and length fields that any subsequent step can rely on. That buffer is the source of truth: reordering moves the buffer and the list entry together, and the older WAV is dropped so a previous result cannot be mistaken for the new one.
Concatenation happens in a tested channel-concatenation function. The production tool and the test suite share that function, so the order, the frame offset where each track begins, and the channel identity are the same in every run. Golden stereo fixtures use different values in the left and right channels across two tracks, which proves that track order and channel identity survive the join. Float samples are then clipped to signed PCM16, with negative full scale mapping to -32768, positive full scale to 32767, and non-finite values written as silence. A 44-byte little-endian RIFF/WAVE header is written with fixed field values: 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.
| Property | Behavior across repeated runs |
|---|---|
| Input decoding | Same shared AudioContext, same resampling rule |
| Order | List order drives the decoded-buffer array and the visible list together |
| Channel identity | Left and right channels are concatenated independently, then interleaved |
| Sample conversion | Floats are clipped to signed PCM16 with fixed range rules |
| Output header | 44-byte RIFF/WAVE header with fixed field values |
Get the Same Result Every Time in Your Browser
- Open the Audio Joiner and choose between 2 and 10 browser-decodable audio files in a single selection. Each file must be 25 MiB or smaller, and the total selection must be at most 100 MiB.
- Wait for the browser to decode every file. Each track shows a duration, a sample rate, and a channel count. If a track fails to decode, the selection is rejected with a specific message rather than silently dropped.
- Preview each decoded track and use Move up or Move down until the list reads in the order you want. Reordering clears any older WAV at the same time, so the result you download always matches the list you see.
- Select Join in this order. The tool concatenates the decoded channel samples directly, with no inserted silence, overlap, crossfade, normalization, or trimming.
- Preview the resulting PCM16 WAV, then download it. The download is a freshly encoded RIFF/WAVE file; the bit-for-bit output is reproducible from the same selection.
To reproduce a later result, repeat the same five steps with the same files in the same order. Keep the same filenames and the same source directory layout, and run the join in a browser that supports the same codecs as the first attempt. If anything in the selection changes, including the working sample rate of the shared AudioContext, treat the next WAV as a new result rather than a copy of the old one.
Verify a Repeated Result Before You Rely On It
Two downloads from the same selection should match byte-for-byte, but you still want to verify the join itself before deleting the originals. The practical verification guide for joined audio walks through the same checks. At minimum, confirm four things against the WAV you downloaded:
- Duration: open the WAV and check that the total length matches the sum of the decoded track durations shown in the list.
- Order: play the WAV end to end and listen for the boundaries. The last sample frame of one track should be followed immediately by the first sample frame of the next, with no silence gap.
- Channel playback: if any source was stereo, play it back on a stereo system and confirm the left and right channels land where you expect. A mono and stereo mixture is rejected rather than silently remixed, so a successful WAV has the same channel count as every source.
- File size: a PCM16 WAV is uncompressed, so the file will usually be larger than the sources combined. A surprisingly small file is a signal to investigate before relying on it.
Keep the source files until each of those four checks passes. If you reorder or replace a track in a later attempt, expect a new WAV that differs from the first by more than header fields.
Limits and Conditions That Break Repeatability
The joiner enforces limits with explicit messages rather than silently truncating or remixing. A repeated result requires that every selection still satisfies those limits, and that the inputs themselves are unchanged. The table below summarizes the caps that change whether a given selection can be joined at all.
| Limit | Cap | Effect on repeatability |
|---|---|---|
| Files per selection | 2 to 10 | Below 2 or above 10: rejected, no WAV produced |
| Per-file size | 25 MiB (26,214,400 bytes) | Over the cap: rejected |
| Total size | 100 MiB (104,857,600 bytes) | Over the cap: rejected |
| Decoded duration | 30 minutes total | Over the cap: rejected |
| Channel count | 8 channels maximum | Over the cap or mixed counts: rejected |
| Sample rate | 192 kHz maximum | Over the cap: rejected |
| Channel-samples | 30 million across all channels | Over the cap: rejected |
Two more conditions affect what "the same" actually means. Web Audio may resample source files to the working sample rate of the shared AudioContext, so the rate shown for the tracks and the WAV may differ from the rate stored in the originals. A high-rate or multichannel selection can reach the 30-million-sample budget before it reaches the 30-minute duration cap, so the same selection may be rejected in one browser and accepted in another if the working sample rate differs. The WAV also does not preserve independent source sample rates, the original codec, bitrate, encoder settings, tags, album art, chapters, cue points, loop points, loudness fields, timestamps, or other container metadata. It is a new static PCM representation of the browser-decoded samples, not a container that wraps your originals.
When a Different Tool Is the Right Choice
The Audio Joiner is built for one thing: deterministic, gap-free concatenation of 2 to 10 decoded tracks into a single PCM16 WAV. It deliberately does not add silence, overlap, crossfade, normalization, transition, or automatic trimming, and it does not preserve source metadata. If the next result you need is a time range rather than a full track, or you need fades, loudness matching, channel conversion, compressed output, metadata preservation, or sample-level repair, reach for the Audio Cutter or a dedicated editor instead. Those tools accept that the workflow is no longer the deterministic gap-free join the Audio Joiner is designed for, and they take responsibility for the additional processing themselves.
If you're weighing options, Repeat the Same Result When You Use an Audio Equalizer covers this in detail.