Joiner · No upload
Join MP3 and M4A audio into one MP3 on your device
Join MP3 and M4A tracks or voice memos in the order you choose and download one MP3.
Drag a row to move it, or use its ↑ and ↓ buttons, which also work from the keyboard. Join follows the list order.
Output is one newly encoded MP3. Lossy sources can lose a little more quality, and metadata (titles, dates, album art and chapters) is not copied. Keep your originals.
Refused by name: a file after 50 usable files are queued, input past 60 minutes, not an audio file this tool accepts, or one your browser cannot decode; refusal cutoffs, not completion promises. Mid-join failure makes no new output. Results count remixed files and list each shortened seam; crossfades can pass full scale and are clipped without a note. Takes .mp3, .m4a, .aac, .wav, .ogg, .oga, .opus, .flac and .weba.
How this joiner works
When you add a file, your browser reads it and its audio engine decodes it once to measure it. The row shows the duration and channel count, and the decoded audio is not kept. Pressing Join decodes the files again, one at a time in list order, and feeds the audio to lamejs, a JavaScript port of the LAME encoder (LGPL), so the page does not build one decoded buffer for the whole join; at a common 44.1 kHz rate, an hour of stereo Float32 audio alone exceeds a gigabyte. One encoder writes the whole join as a single MPEG stream, so each seam sits inside one stream. The bitrate in the readout and result rows is your request, and at low PCM input rates the encoder can use a lower bitrate.
Leave the crossfade field empty for a straight join: the last sample of one file is followed by the first sample of the next. Enter a duration to overlap the tracks on an equal-power fade curve, which keeps perceived loudness roughly steady through the join. A crossfade is capped at 10 s and at 45% of the shorter adjoining track, and any clamp is reported below the result. Mixed inputs are normalised to one PCM sample rate and channel count before encoding. The readout shows the planned PCM rate and channel count, and the result row reports the format supplied to the encoder. Neither is measured from finished MP3 headers.
The output is a new, lossy MP3, and tags, dates, album art and chapters are not carried across. There is no loudness matching between tracks. Only the extensions listed under the readout are accepted: AIFF is refused before decoding, even in a browser that could read it. Chrome’s decoder reports a file holding no audio as undecodable, so that file gets an error row and is not joined as an empty track. When memory, a browser limit or processor speed stops a join, the page reports the failure; it does not save a shortened file.