AAC → WAV
AAC to WAV converter
AAC audio — raw ADTS or the track from an M4A/MP4 — is decoded to uncompressed PCM and written as a WAV. The file grows about 8–10×.
…or drag files and folders here. Add as many as you like — everything is processed on this device.
.aac .m4a .m4r .m4v .mp4
In one paragraph
Raw .aac files are awkward: no container, no duration, no tags, and inconsistent support even among browsers. Analysis tools, DAWs and forensic software mostly refuse them outright, which makes a WAV conversion the practical first step in any workflow that starts with a stream capture.
Sonic Batch decodes ADTS with its self-hosted engine rather than the browser’s media stack, so the result is the same in Firefox as in Chrome, and writes standard RIFF PCM at the depth you choose.
Does this change the audio quality?
Lossless from the AAC stream onwards — every decoded sample is written exactly. AAC is lossy, so the WAV reproduces the AAC audio rather than an original master.
- ADTS has no duration header, so the duration shown before conversion is an estimate. The finished WAV has an exact one.
- Streams cut mid-frame can produce a brief click at the start of the WAV.
- HE-AAC (AAC+) sources are typically 32–64 kbps; a WAV of one is large and still sounds like a 48 kbps stream.
A worked example
Preparing a stream capture for analysis in Python
- Drop the .aac capture in. The panel reports the sample rate, channel count and estimated bitrate.
- Set 32-bit float if your analysis code works in float, or 16-bit for a compact file.
- Force mono if you only need one channel for the analysis.
- Convert and download the WAV, then read it with soundfile or scipy.io.wavfile.
Bit depth follows the destination, not the source
For numerical analysis, 32-bit float is convenient because the values arrive already normalised to ±1.0. For playback or archival, 16-bit is compact and adequate — an AAC decode has nowhere near 24 bits of real dynamic range. Keep the sample rate as the source has it so timestamps in your analysis match the stream.
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 |
|---|---|---|---|---|---|
| AAC | Bare AAC frames with no MP4 wrapper — used by broadcast streams and some hardware. | Native | Partial | Native | Native |
| M4A | Apple’s default AAC container. Better quality than MP3 at the same bitrate. | Native | Native | Native | Native |
| MP4 | The standard video container. Its audio track is almost always AAC. | Native | Partial | Native | Native |
| M4R | An M4A file with a .m4r extension. iOS only lists it as a ringtone if it is ≤ 40 seconds. | Partial | Partial | Native | Native |
| Output | Encoder | Bitrates / depth | Sample rates | Tags |
|---|---|---|---|---|
| WAV | pcm_s16le | 16, 24, 32-bit | 8–96 kHz | Yes |
- 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
Firefox will not play the source file.
Firefox’s raw ADTS support is unreliable. The conversion does not depend on it — the engine decodes AAC itself.
The duration is wrong before conversion.
It is an estimate from the file size and frame bitrate, because ADTS carries no duration. The WAV header is written from the exact decoded sample count.
The WAV is far larger than the AAC.
Uncompressed PCM is about 10 MB per stereo minute at 44.1 kHz/16-bit. That is expected for any lossy-to-PCM conversion.
Frequently asked questions
Does decoding AAC to WAV improve quality?
No. It removes the need for a decoder downstream; it does not restore discarded audio.
What is the difference between .aac and .m4a input?
Same codec. .m4a has an MP4 container with a duration and tags; .aac is bare frames. Both are accepted here.
Can I convert to FLAC instead to save space?
Yes, and it is a good idea if your tools accept it — FLAC is lossless and about half the size of WAV.
Is anything sent to a server?
No. Decoding happens in your browser tab with WebAssembly served from this domain.