Convert AAC to WAV

Converting AAC to WAV turns a raw ADTS stream, which describes nothing about itself, into a file whose first 44 bytes state the sample rate, the channel count and the exact length. The audio is not improved — AAC threw detail away permanently and WAV stores what is left at five to ten times the size — but it becomes readable by tools that have no decoder and no patience.

  • Where it runs In your browser. The file is never uploaded.
  • Lossy Some detail is traded for size. WAV cannot hold everything an AAC can.
  • File size limit Up to 100 MB per file, free, without an account.
  • Worth knowing The file gets much larger without getting better. What the original compression removed is gone; a lossless format can only preserve what is left.

Up to 100 files at once. Mixed formats are fine.

A WAV header is the thing you are actually converting for

The RIFF WAVE specification dates from 1991 and its virtue is dullness. The first chunk of the file states the format tag, the number of channels, the sample rate, the byte rate, the block alignment and the bits per sample; the next states how many bytes of audio follow. Everything a reader needs is there before a single sample is touched, and no decoder is required — the data chunk is the samples.

That is why the Python standard library ships a `wave` module and does not ship an AAC module, why `libsndfile` is the default dependency in half of scientific audio, and why an embedded device with 64 kilobytes of RAM can play a WAV off a card. The conversion on this page is not really about audio quality at all. It is about turning a stream into a file that announces its own shape.

What a raw ADTS stream refuses to tell you

AAC as standardised in ISO/IEC 13818-7 is a codec, and a bare `.aac` file is normally ADTS — a continuous run of frames, each with a seven-byte header describing that frame and nothing beyond it. The design target was broadcast, where a receiver may join a transmission halfway through and must be able to start decoding from wherever it lands. There is therefore no file-level header on purpose.

On a disk that becomes three separate problems. The duration is unknown, so software estimates it from the file size and the first frame's bitrate and is wrong whenever the encoder varied. There is no index, so seeking means hunting for a frame boundary. And there is no declared channel layout for the file as a whole, only per frame. A WAV replaces all three with fixed fields.

Where these captures come from

IP cameras and dashcams write ADTS because it can be cut at any point without a rewrite. DVRs and broadcast loggers do the same. HLS delivers audio as `.aac` segments, so anything that recorded a stream leaves a pile of them. Telephony and IVR platforms produce it. So do a number of Android recording libraries and command-line pipelines whose defaults nobody revisited.

The common thread is that a machine made the file for another machine, which is why the eventual reader is usually a script rather than a listener. That also means the audio is often not what a music file would be: mono is normal, 8,000 or 16,000 Hz is normal for speech systems, and 32,000 Hz appears in broadcast. All of it converts and all of it is preserved as it was.

Signed 16-bit PCM, and why that is the right default

The output is signed 16-bit little-endian PCM at the source sample rate and channel count. Sixteen bits is CD depth and is what every default assumes: `wave.open` returns it without configuration, `scipy.io.wavfile.read` returns an `int16` array, and hardware DACs are built around it.

Higher depths exist and would be pointless here. AAC decodes to floating-point samples internally, but the information content is fixed by what the encoder kept — writing 24 or 32 bits would enlarge the file by half or double without adding a single bit of real signal. If a later processing stage wants floats, it will convert on load, where it costs nothing on disk.

Sizes, and the 4 GB wall in the RIFF format

Sixteen-bit stereo at 44,100 Hz is 10.1 MB per minute. Mono halves it; a lower sample rate scales it proportionally, so an hour of 16,000 Hz mono speech is around 115 MB against 600 MB for the same hour at CD stereo. There is no quality setting, because WAV does not compress.

There is a hard limit worth knowing before you plan a pipeline around this. RIFF chunk sizes are 32-bit, which caps a WAV at 4 GB — roughly six and a half hours of stereo CD-rate audio, or about thirty-seven hours of 16 kHz mono. Long continuous captures exceed it, and the fix is to segment before converting rather than to discover the ceiling at the end of a batch.

Metadata is mostly gone, and here that is fine

If the ADTS file carried an ID3v2 block at the front — some recorders add one — the title, artist, album, track number, genre, date and comment map into the WAV's RIFF INFO chunk. Cover art, album artist, disc number, description and lyrics have no INFO equivalent and are dropped, and INFO values are limited to ISO 8859-1, so anything outside Latin-1 is left out rather than corrupted.

For this audience that is almost always irrelevant, and occasionally it is the point: a capture headed for analysis is better off carrying no descriptive metadata at all. Where the provenance matters, record it alongside the file in whatever your pipeline uses for manifests rather than relying on a chunk that half the tools will ignore.

Truncated captures and files that are not really ADTS

Stream recorders get stopped mid-frame, and the resulting file ends in the middle of a packet. The conversion reads up to the damage and stops there, which normally gives a usable WAV a fraction of a second shorter than the source — a better outcome than refusing the file, and one worth knowing so that a slightly short duration does not look like a bug.

A different failure is a file that is not ADTS at all. Anything named `.aac` that is really an MP4 fragment, or an M4A renamed by hand, will not parse as a frame stream, and the conversion reports that the file could not be read rather than guessing at it. If that happens, try it as an M4A — an MP4 demuxer will open it, and you will have identified what you actually have.

What happens to a multichannel or unusual-rate source

AAC allows up to 48 channels and WAV up to 18, so ordinary surround material passes through as a multichannel WAV rather than being folded down. Sample rates are preserved exactly, including the unusual ones — 8,000, 11,025, 16,000, 22,050 and 32,000 all survive, which matters when the downstream model or DSP was trained or tuned at a specific rate.

The exception is a layout no path will accept, where the conversion falls back to two channels at 48,000 Hz rather than failing. That is a deliberate trade in favour of getting a file, and it is worth checking the header of the first output in a new batch — a script that assumed 16,000 Hz mono and received 48,000 Hz stereo will produce results that look plausible and are wrong.

No encoder, no server, no dependency

This conversion downloads nothing extra. The AAC decoder is the one your device already contains, and writing a WAV is assembling a header and copying samples — the only target in the audio set that needs no encoder at all, which is why it is the fastest of them.

It also means nothing is uploaded, and for machine-generated audio that is less abstract than it sounds. Camera and telephony captures carry other people's voices, recorded in places with rules about where those recordings may be stored. A converter that keeps the file inside the tab does not create a copy on somebody else's infrastructure, and the network tab of your developer tools is the acceptance test rather than a promise on a page.

How to convert an AAC capture into a WAV file

  1. Drop the .aac capture onto this page, or click to choose one.
  2. The ADTS frames are decoded on your own device and written as signed 16-bit PCM.
  3. Download the WAV. Its header states the rate, the channels and the exact length.

AAC beside WAV: a codec stream against a self-describing file

AAC compared with WAV
AACWAV
Full nameAdvanced Audio CodingWaveform Audio
File extension.aac.wav, .wave
Media typeaudio/aacaudio/wav
CompressionLossy — file size is bought with qualityUncompressed
First published19971991
Published byMPEGMicrosoft
SpecificationISO/IEC 13818-7RIFF WAVE
LicensingOpen standardPublished, not standardised
Standing todayCurrentCurrent
Bit depth32
Audio channelsup to 48up to 65,535
Opens in a browserEvery browserEvery browser
Considered insteadMP3, OPUSFLAC, AIFF

What the target format adds

WAV is a working format and AAC is a finished one. What comes back is editable text and objects rather than a picture of a page, which is usually the reason for the conversion and also where its limits are.

Opening the result

WAV is a container rather than a single format. What actually plays is the codec inside it — usually PCM — which is why two files with the same extension can behave differently on the same device.

The usual programs do not overlap: AAC opens in VLC, FFmpeg and iTunes, WAV in Audacity, Adobe Audition and Reaper — so whoever receives the result needs something from the second list.

File size and quality

The result is larger than the original and no better. AAC has already discarded detail, and WAV stores what is left without discarding more — it prevents further loss rather than undoing the first one.

What each format is for

The two are aimed at different work: AAC at handing a finished file over, streaming and phones, WAV at editing and archiving. That is worth weighing before converting, because the reason one exists is usually the reason the other is awkward.

AAC is MPEG's format, published in 1997. The specification is ISO/IEC 13818-7, and it is worth reading if the file has to outlive the tool that wrote it.

WAV comes from Microsoft and dates from 1991, specified as RIFF WAVE. Audacity, Adobe Audition and Reaper all read it.

AAC to WAV: questions from pipelines and devices

Why does my tool refuse a .aac file but accept a WAV?

Because a WAV declares itself and a raw AAC file does not. The first 44 bytes of a WAV state the sample rate, the bit depth, the channel count and the length of the data that follows, so a program can allocate a buffer and start reading without any codec at all. A bare `.aac` file is ADTS: a run of frames with no file-level header, no duration and no index. Reading it requires a decoder and a scan, which is precisely the dependency a small tool is trying to avoid.

What exactly do I get out?

A RIFF WAVE file containing signed 16-bit little-endian PCM at the sample rate and channel count of the source. That is the format `wave` in the Python standard library, `libsndfile`, `scipy.io.wavfile` and almost every embedded audio path assume by default, so it loads with no arguments and no surprises.

Does converting AAC to WAV improve the audio?

No. AAC discarded parts of the recording permanently, and the WAV stores what survived at roughly five to ten times the size. It is the same audio with more bytes around it. That is not a criticism of the conversion — for the reasons people do it here, size is a cost worth paying and quality was never the point.

How big will the file be?

About 10.1 MB per minute for 16-bit stereo at 44,100 Hz, and about half that for mono, which most camera and telephony audio is. A one-hour mono capture at 16,000 Hz lands near 115 MB; the same hour as stereo CD-rate audio is around 600 MB. WAV also carries a hard structural ceiling at 4 GB, since RIFF sizes are 32-bit — about six and a half hours of stereo CD audio.

Will the duration finally be correct?

Yes, and that is often the real reason people convert. A raw ADTS stream has no duration field, so players and analysis tools estimate the length from the file size and the first frame header — which is wrong whenever the bitrate varies. The WAV's header states the exact number of sample frames, so every tool that opens it agrees on how long the audio is.

Is the capture uploaded anywhere?

No. The ADTS stream is parsed and decoded on your own device and the WAV is assembled from the resulting samples in the tab — there is no encoder involved and no server. Camera audio, call recordings and site captures frequently carry other people's voices, and the right handling for those is that they never leave the machine. Open the network tab during a conversion and you will see nothing carrying the file.

More about these formats