Opus → WAV
Opus to WAV converter
Opus audio is decoded to uncompressed PCM at 48 kHz and written as a WAV. Opus is lossy, so the WAV reproduces the Opus audio exactly, not an original recording.
…or drag files and folders here. Add as many as you like — everything is processed on this device.
.caf .mkv .oga .ogg .opus .weba .webm
In one paragraph
Speech-to-text engines, forensic audio tools, DAWs and research pipelines want PCM. Messaging apps produce Opus. That gap is the reason this page exists, and it comes up most often with WhatsApp voice notes and Discord recordings that need transcribing or analysing.
One detail matters more here than in other conversions: Opus decodes natively at 48 kHz. If your downstream tool expects 16 kHz — as many speech models do — set that explicitly and let a proper resampler do the work rather than whatever the tool falls back to.
Does this change the audio quality?
Lossless from the Opus stream onwards. Opus at low bitrates applies a lowpass filter around 8–12 kHz, and that limitation is preserved in the WAV — no decoder can undo it.
- Opus is always 48 kHz internally. Any other output rate is a resample, which is reported per file.
- Voice notes are mono. Converting to stereo doubles the file for a duplicated channel.
- A 30-second voice note becomes about 2.7 MB of 16-bit mono WAV at 48 kHz — small, but hundreds of them add up.
A worked example
Preparing voice notes for a local speech-to-text model
- Drop the .opus files in — the queue handles dozens comfortably because they are small.
- Set Sample rate to 16000 and Channels to Mono, which is what most speech models expect.
- Set Bit depth 16.
- Convert all, download the ZIP, and feed the WAVs to the model.
16 kHz mono 16-bit for speech tooling
Nearly every open speech-recognition model expects 16 kHz mono PCM, and feeding it 48 kHz stereo just makes it resample internally with an unknown filter. Setting 16 kHz here means the resampling is done once, properly, and the resulting files are a third of the size. For anything you intend to listen to rather than analyse, keep 48 kHz.
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 |
|---|---|---|---|---|---|
| Opus | The best-sounding lossy codec below 128 kbps. Used by WhatsApp, Discord and YouTube. | Native | Native | Partial | Partial |
| OGG | Royalty-free lossy codec. Standard in game engines, Godot, Unity and Wikimedia. | Native | Native | Engine | Engine |
| WebM | Open container used by browser recorders and YouTube downloads. Audio is Opus or Vorbis. | Native | Native | Partial | Partial |
| 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 |
|---|---|---|---|---|
| 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
Safari cannot preview the file.
Safari’s Opus support depends on the container and is inconsistent for Ogg. The engine decodes it regardless, so conversion works.
The exported file from WhatsApp has no extension.
Container detection uses magic bytes, so extension-less files are still recognised as Ogg/Opus.
The WAV sounds muffled.
That is the Opus encoder’s lowpass, applied when the voice note was recorded at a low bitrate. It is in the source; the WAV is an accurate copy.
Frequently asked questions
Why is the WAV so much bigger?
Opus at 24 kbps is extremely efficient. PCM at 48 kHz mono 16-bit is 768 kbps — about 30× the bitrate — because it stores every sample explicitly.
Can I get better quality by decoding to 24-bit?
No. A low-bitrate Opus decode has nothing close to 24 bits of real dynamic range. 16-bit is sufficient.
Do WhatsApp voice notes work?
Yes. Export them from the app to a folder and drop them in; they are Ogg-Opus and are detected automatically.
Is the recording uploaded for transcription?
Nothing is uploaded by this page — it only converts. Whatever you do with the WAV afterwards is your choice, and worth checking if privacy is the reason you came here.