What This Tool Does
Speech APIs, TTS services, and plenty of internal tools hand back audio as text — base64 inside a JSON response, most often — rather than as a downloadable file. This tool takes that text, works out what shape it's in, decodes it locally, and gives you back something you can actually play and save: a normal audio file. Paste the text (or click Try a sample to see it work with a placeholder clip first), and if it's recognized as audio you get a player, the detected format, duration, sample rate, and channel count, plus buttons to download it.
Nothing here is uploaded. Parsing and decoding both run in your browser tab.
What You Can Paste
The box accepts five shapes and figures out which one it's looking at — you never have to tell it:
- Plain base64 — just the encoded text on its own.
- A
data:URI —data:audio/mpeg;base64,...and similar. - A hex dump — a string of hex digit pairs, with or without
0xprefixes or separators. - A raw byte array — a JSON array of numbers, like
[80, 75, 3, 4, ...]. - A full JSON response, with any of the above nested inside it under any key name:
{ "audioContent": "SUQzBAAAAAAAI1RTU0UAAAAP…" }
That last case is the common one in practice — copy the entire response body from a speech-synthesis API and paste it as-is, without extracting the field yourself first.
There's also a fallback for messier pastes: if none of the above match cleanly, the tool scans the whole text for the longest run of at least 64 base64-looking characters and tries decoding that. That's what catches a payload copied along with a log line, a curl command's output, or a chunk of surrounding HTML.
Finding the Payload Inside JSON
When the pasted text parses as JSON, the tool walks every string and array value in it, wherever it's nested, and scores each one as a candidate. A key name that hints at audio — audioContent, speechAudio, voiceData, anything containing "audio", "speech", "voice", "content", "data", "b64", or "base64" — gets picked up even if the value is short. An unnamed field is still checked, but only if the string is long enough to be a real payload rather than a coincidence. If several candidates look plausible, each one gets test-decoded and the tool keeps whichever one actually resolves to a recognizable audio format.
result.audio.content path, say — you don't need to dig it out by hand. Paste the whole response.When the Text Isn't Audio
Not everything that decodes as bytes is audio. If the pasted text turns out to be a PNG, a JPEG, a ZIP, or even a video file (WebM or MP4) once decoded, the tool names what it found instead of showing a broken player — and for a video file, it points you to the video-to-MP3 tool, since that's a different job. If nothing in the text decodes to a recognizable format at all, you'll see a plain "no audio data found" message rather than a silent failure.
Download Original vs Convert
Download original unwraps whichever envelope the audio was in — base64, hex, a data URI, JSON — and writes the bytes underneath exactly as they were, with no audio decode or re-encode involved. If the API handed you an MP3 stream wrapped in base64, this gives you that same MP3 stream as a file: instant, lossless, and it works even if this browser can't decode the codec at all.
Convert and download goes a step further: it decodes the audio properly and re-encodes it to MP3, WAV, or OGG at a quality you choose — useful when you need a specific format rather than whatever the API originally produced.
Long or Large Payloads
Pasted text tops out at 32 million characters, which is already roughly a 24 MB payload — past that, the box asks you to save the text to a file and use the plain audio converter page instead. Somewhere above 2 million characters, typing in the box can start to feel laggy even though parsing still works; that's just the textarea handling a lot of text, not a sign anything is wrong. Once decoded, the usual audio warnings apply too — long (past ~30 minutes) or large (past ~500 MB) decoded audio shows a warning rather than blocking anything.
Nothing Ever Leaves Your Browser
Parsing the text, decoding the audio, and any re-encoding you ask for all happen locally, using your browser's own Web Audio engine and a WebAssembly encoder that loads on first use. There's no server in this path at all — which is the point, since what you're pasting here is often something you'd rather not hand to anyone else, like an API key embedded nearby in the same response or someone's actual voice.
If you're starting from a normal audio file instead of a base64 payload, the audio converter does the same decode-and-convert step without the paste box.