WAV → AAC
WAV to AAC converter
Uncompressed WAV audio is encoded to AAC-LC and written as a raw ADTS stream. This is a first-generation lossy encode — the best case for the codec.
…or drag files and folders here. Add as many as you like — everything is processed on this device.
.aif .aifc .aiff .caf .flac .wav .wave
In one paragraph
Encoding from WAV is where AAC actually shines. With a lossless source the encoder is not fighting another codec’s artefacts, so AAC’s efficiency advantage over MP3 is fully available: 128 kbps AAC from a WAV is comfortably better than 128 kbps MP3 from the same WAV.
This page writes a bare ADTS stream, which is what streaming and segmenting pipelines want. If you want a file for a music library with tags and artwork, use the M4A page instead — same codec, proper container.
Does this change the audio quality?
First-generation encoding from uncompressed audio. At 192 kbps stereo, AAC-LC is transparent for most material and most listeners.
- ADTS stores no metadata. Use M4A if you need title, artist or artwork.
- This build encodes AAC-LC, not HE-AAC, so quality falls away quickly below 96 kbps stereo.
- AAC supports up to 48 kHz here; higher-rate WAVs are resampled and the change is reported.
A worked example
Producing HLS-ready audio segments from studio bounces
- Drop the WAV bounces in.
- Set 128 kbps, 44100 Hz, Stereo — and use Apply to all so every segment matches the stream configuration.
- Convert all; the queue runs several files in parallel on desktop.
- Download individually into the encoder’s input folder.
128 kbps for streaming, 192–256 kbps for distribution
From a lossless source, 128 kbps AAC-LC is a solid streaming tier — that is roughly what a lot of commercial services use. Go to 192 kbps if the file is a download rather than a stream, and 256 kbps if it may be re-encoded downstream. Above 256 kbps you are close to the codec’s ceiling and FLAC becomes the better answer.
Supported formats, limits and browser notes
Sonic Batch decodes with the browser when it can (faster, no engine download) and falls back to the self-hosted WebAssembly engine when it cannot. Every combination below works in every listed browser; the column only tells you which decoder does the work.
| Input | What it is | Chrome | Firefox | Safari | iOS |
|---|---|---|---|---|---|
| WAV | Raw PCM samples with a small header. Perfect fidelity, roughly 10 MB per stereo minute. | Native | Native | Native | Native |
| AIFF | Apple’s uncompressed PCM format — the WAV equivalent for Logic and Pro Tools. | Partial | Partial | Native | Native |
| FLAC | Lossless compression, typically 50–60% of WAV size, bit-identical when decoded. | Native | Native | Native | Native |
| CAF | Apple container used by older iOS Voice Memos. Usually holds ALAC, IMA4 or raw PCM. | Engine | Engine | Partial | Partial |
| Output | Encoder | Bitrates / depth | Sample rates | Tags |
|---|---|---|---|---|
| AAC | aac | 32–320 kbps | 8–48 kHz | No |
- Max per file
- 400.0 MB
- Max per queue
- 4.00 GB
- Max duration
- 4:00:00
- Max archive
- 1.50 GB
These are enforced ceilings, checked before any decoding starts, not measured maximums — a file over the limit is rejected rather than allowed to exhaust the tab’s memory. Real-world capacity is lower on older phones, which is why the scheduler runs one file at a time on iOS and Safari.
Where your audio goes
Nowhere. Your file is read from disk into this browser tab with the File API, decoded and encoded by code running in that same tab, and handed back to you as a download. It is never transmitted.
That is a structural property of the application, not a policy promise: there are no API routes, no server actions and no third-party processing services in this project, so there is nothing capable of receiving a file. The page’s Content-Security-Policy also restricts connections to this origin, and the automated test suite includes a browser test that fails if any network request during import, preview, conversion or download carries media bytes.
The trade-off, stated plainly:results live in your tab’s memory until you download them. Closing or reloading the page discards them. There is nothing on a server to recover, because nothing was ever put there.
Troubleshooting
The output has no duration in my player.
ADTS has no duration field. That is inherent to the format; use M4A if a header duration matters.
Quality is poor at 64 kbps.
AAC-LC is not designed for that range. HE-AAC would handle it, but this build does not include it. Use Opus for genuinely low bitrates.
My 96 kHz WAV came out at 48 kHz.
The AAC profile in use tops out at 48 kHz. The resample is reported in the per-file warnings.
Frequently asked questions
Is AAC better than MP3 from a WAV source?
Yes, noticeably below 192 kbps. With a lossless source the codec’s efficiency advantage is fully realised.
Should I use .aac or .m4a?
.m4a for libraries and players; .aac for pipelines that stream or segment the audio.
Can I batch a whole album?
Yes. Set the encode parameters once with Apply to all — consistent settings matter a lot in streaming workflows.
Does the encoding happen locally?
Yes, entirely in your browser tab. No audio is uploaded at any point.