Adding Multiple Files and Individual Saving
This tool allows you to add multiple audio files and convert them sequentially into either WAV or WebM format. Files can be added to the list by clicking inside the dashed border to select them or by dragging and dropping them into the designated area.
While the file input accepts audio/*, the format check does not rely solely on filename extensions; subsequent steps confirm whether the browser can genuinely decode the data as audio.
After files are added, each item is analyzed asynchronously to display its original file size, playback duration, decoded sample rate, and channel count in its respective row.
Audio is indicated as monaural for 1 channel, stereo for 2 channels, or as a numerical channel count such as 6ch for 3 or more channels.
Files being analyzed cannot be converted immediately, returning to a ready state once decoding completes. Corrupted files or unsupported formats display an error, helping users determine whether to test a different input format.
The output options consist of two choices: WAV (PCM 16-bit) and WebM (Compressed). Individual convert buttons process a single row, whereas Batch Convert Selected Files targets rows that are currently waiting, errored, or already converted to a format different from the currently selected one.
Although named batch conversion, files are processed sequentially one by one using await rather than in parallel. In particular, WebM encoding requires a waiting period close to real-time playback, meaning total processing time increases when multiple long files are added.
Successfully converted rows display the resulting format, generated file size, percentage change relative to original size, preview audio player, and a save button.
Converted files are downloaded individually per row; there is no feature to bundle multiple outputs into a ZIP archive. The downloaded filename strips the final extension from the input name and appends the actual generated extension, .wav or .webm.
Switching the format selection afterward does not save old Blob data under a new extension, allowing files to be reconverted to the currently active selection instead.
Input Compatibility Determined by Browser Decoding
Audio loading relies on AudioContext.decodeAudioData() from the Web Audio API. The entire file is read into an ArrayBuffer, and if the format is supported by the browser, it is decoded into linear PCM within an AudioBuffer.
Format names shown on screen such as MP3, WAV, M4A, OGG, and FLAC are input examples rather than an exhaustive guarantee of compatibility across every browser and operating system.
Even with identical extensions, decoding results vary based on internal codecs, file corruption, and browser implementation details.
The sample rate shown in the analysis row is not extracted directly from the original file container header; it reflects AudioBuffer.sampleRate after decodeAudioData() has executed.
In the Web Audio API, if the input sample rate differs from that of the AudioContext, the decoded audio may be resampled, meaning the displayed rate and the generated WAV sample rate might not match the original file native sample rate.
This page provides no setting to pick custom rates such as 44.1 kHz, 48 kHz, or 96 kHz.
The channel count is likewise obtained from AudioBuffer.numberOfChannels. The tool does not perform mono-to-stereo upmixing, stereo-to-mono downmixing, or left-right channel swapping; it passes the decoded channels directly to the output encoder.
Furthermore, while the code imposes no fixed caps on file count, byte size, or duration, the entire file and its uncompressed PCM samples reside in client device memory, meaning memory exhaustion and processing failures can occur with long recordings or numerous large files.
If decoding fails, an error message stating Failed to decode audio. is displayed and the associated AudioContext is closed. Renaming a file extension does not alter its internal encoding; if decoding fails, try using a compatible browser or convert the file to a standard format using another application.
Detailed technical specifications can be referenced in the W3C Web Audio API specification.
Constructing 16-bit PCM WAV Files
When WAV is selected, a RIFF/WAVE file is constructed directly in JavaScript from the decoded AudioBuffer. The output is fixed to uncompressed 16-bit signed PCM, with no configuration options for bit depth, compression algorithm, or quality levels.
The required total byte length is calculated as 44-byte header + sample frames × channel count × 2 bytes. Consequently, output size increases directly with duration, sample rate, and channel count.
The initial 44-byte header contains the RIFF, WAVE, fmt, and data chunk identifiers, format code 1 for PCM, channel count, AudioBuffer sample rate, byte rate, block align, and 16-bit depth values.
The audio payload interleaves Float32 samples from each channel on a per-frame basis. Values are clamped between -1 and 1, quantized to 16-bit integers using 32768 for negative values and 32767 for non-negative values, and stored in little-endian byte order.
Because this process does not play back audio in real time to capture it, it does not require waiting for the full audio duration like WebM encoding does.
However, instantaneous completion is not guaranteed, and required processing time varies depending on file duration, channel count, and client CPU and memory performance.
When converting compressed MP3 or M4A files, uncompressed PCM WAV files will generally be significantly larger than original inputs.
Even when the input is already a WAV file, the output size may differ if bit depths or decoded sample rates do not match.
AudioBuffer provides no metadata pathway to transfer track titles, artist names, album titles, lyrics, or cover art, and the WAV generation routine does not write these tags.
As a result, converted files contain only raw audio samples and a standard WAV header, making this tool unsuitable for music library migrations that require preserving embedded tags.
Real-Time WebM Generation with MediaRecorder
WebM output is produced by playing the decoded AudioBuffer through an AudioBufferSourceNode, routing the stream into a MediaStreamAudioDestinationNode, and capturing the stream via MediaRecorder.
Before processing begins, the tool verifies the presence of MediaRecorder and browser support for audio/webm; if unsupported, it does not masquerade as another format and instead displays an error prompting the user to select WAV.
Once recording starts, Blob chunks emitted by dataavailable events are gathered into an array. When the source node finishes playback, recording stops and the chunks are assembled into a single Blob.
Because of this architecture, processing duration corresponds roughly to the actual playback length of the audio track. Background tab throttling, power-saving profiles, device load, and browser recording quirks can affect processing; keep the page open and active to verify completion for long audio files.
The code specifies only the audio/webm container without enforcing specific codecs like Opus, constant or variable bitrates, or bits per second.
The browser decides the underlying codec and bandwidth allocation. Even if isTypeSupported() returns true, recording may fail due to runtime resource constraints.
This behavior operates strictly within the scope of W3C MediaStream Recording.
Although WebM provides compressed output, the generated file is not guaranteed to be smaller than the input, especially when the source is already heavily compressed or depending on browser-selected encoding parameters.
Similar to WAV export, input metadata tags are not carried over, and users cannot manually configure output sample rates or channel topologies.
Preview, Size Comparison, and Format Switching
The preview playback button plays the original input file prior to conversion and switches to the generated output Blob once conversion succeeds.
Each playback request generates a temporary Object URL from the targeted Blob, and references to the URL are revoked when stopping, reaching track end, playing a different file, deleting a row, clearing all files, or starting a reconversion.
If an input file is previewed before conversion, the play button correctly updates to reference the new output upon completion.
The percentage displayed beside the converted file size is calculated as (converted size - original size) / original size × 100.
A positive value indicates file growth, while a negative value indicates a size reduction. This metric is not a score of acoustic quality or a guaranteed compression ratio.
For example, converting a short MP3 to WAV illustrates the expansion of uncompressed PCM, whereas switching to WebM and reconverting allows comparing uncompressed audio against browser-managed compression.
Inspect actual files to verify size outcomes.
Switching to WebM after converting to WAV re-enables both the batch conversion button and individual row conversion buttons. When reconversion begins, previous converted Blobs and size figures are cleared and replaced with the new results.
The download file extension is determined by the actual convertedFormat recorded upon successful conversion rather than the dropdown currently selected on screen, preventing mismatches between file content and extensions caused by selecting another format.
File Lifecycle and Unsupported Capabilities
This audio converter manages selected File objects, decoded buffers, generated Blobs, and UI states as in-memory React state and references during the page session.
It issues no requests to upload audio files to external conversion servers, and downloads are initiated directly from local browser Object URLs.
Clicking Clear All or removing individual rows discards UI references, and reloading the page resets the list, though the exact timing of memory garbage collection depends on browser runtime management.
This notice applies strictly to the client-side audio conversion component. The host page communicates separately for website analytics and advertising, and this does not serve as an absolute guarantee that no external network traffic occurs across browser extensions or local environments.
For sensitive audio materials, avoid shared devices and manage storage destinations and browser environments under your own supervision.
Unsupported features include exporting to MP3, M4A, OGG, or FLAC, custom sample rates, bitrates, or bit depths, volume normalization, metadata tagging, noise reduction, trimming, pitch and speed adjustments, channel editing, parallel conversions, percentage progress bars, and bundled ZIP archiving.
Use the audio cutter to trim segments, the audio pitch and speed editor to adjust tempo and pitch, or the stereo/mono editor to modify channel assignments.
This page is dedicated exclusively to converting browser-decodable audio into 16-bit PCM WAV or browser-supported WebM.