WAV to CSV Samples
Paste an uncompressed WAV clip as base64 or hex and export its decoded PCM samples to CSV — one column per channel, optionally with a time (seconds) or sample-index column. Pick normalized float, raw integer, or dBFS values, the delimiter, and a frame window. Runs entirely in your browser; the audio is never uploaded.
About this tool
Paste an uncompressed WAV clip as base64 or hex and this tool decodes its PCM samples and writes them to CSV — one column per audio channel, optionally preceded by a time (seconds) or sample-index column. It is the online equivalent of a "sample data export": turn the raw waveform into a numeric table you can open in a spreadsheet, load into pandas/NumPy, or feed to a signal-processing or machine-learning pipeline.
You choose how each sample value is written:
- float (default) — the normalized amplitude in
[-1, 1], independent of the source bit depth. - int — the raw PCM integer at the source bit depth (a 16-bit source emits
values in
-32768..32767); float-WAV sources map to the 32-bit integer range. - db — the dBFS magnitude, where
0is full scale and silence reports a-120floor instead of negative infinity.
You also control the decimal precision, the delimiter (comma for CSV, semicolon,
or tab for TSV), whether to write a header row, and a start_frame / max_frames
window so a long recording exports only the slice you want. Everything runs
locally in your browser using WebAssembly — the audio bytes are never uploaded.
Worked example
The base64 above is a 16 kHz, mono, 16-bit WAV whose first three sample frames are
the raw integers 16384, -8192, 0. With the defaults (time index, float values,
comma delimiter, header on) it exports:
time_s,channel_1
0.000000,0.500000
0.000063,-0.250000
0.000125,0.000000
Switch Sample value scale to int and Index column(s) to sample and the
same clip becomes:
sample,channel_1
0,16384
1,-8192
2,0
Which WAV variants are decoded
RIFF/WAVE PCM at 8, 16, 24, or 32-bit integer and IEEE float at 32 or
64-bit are decoded. Compressed or companded audio — MP3, AAC/M4A, Ogg (Vorbis/
Opus), FLAC, and A-law / mu-law WAV — is rejected with a message naming the format
it detected, rather than producing garbage. Convert those to uncompressed WAV
first (for example ffmpeg -i clip.mp3 clip.wav).
Limits and edge cases
- Input is a base64 or hex string, not a file upload. To export a
.wavfile, base64-encode it first (for examplebase64 clip.wav) and paste the text. Base64 text is about 33% larger than the binary it encodes. - Stereo and multichannel clips get one column per channel (
channel_1,channel_2, …); the samples are de-interleaved for you. - Export is capped at
max_framessample frames (default 100000, max 500000) so a long clip can't blow the in-browser memory budget — usestart_frameto page through it in windows.
FAQ
How do I turn my .wav file into base64 to paste here?
There is no file upload — the tool takes a base64 or hex string. On macOS or
Linux run base64 clip.wav (or xxd -p clip.wav for hex) and paste the output.
On Windows PowerShell, use
[Convert]::ToBase64String([IO.File]::ReadAllBytes("clip.wav")). Then set Input
encoding to match what you pasted.
Which WAV formats are supported?
Uncompressed RIFF/WAVE only: PCM at 8, 16, 24, or 32-bit integer and IEEE
float at 32 or 64-bit. Compressed containers and codecs (MP3, AAC/M4A, Ogg,
FLAC) and companded A-law / mu-law WAV are rejected with a clear message naming
the detected format — convert them to plain WAV first, e.g. ffmpeg -i clip.mp3 clip.wav.
What is the difference between the float, int, and dB value scales?
float writes the normalized amplitude in [-1, 1], so the numbers are
comparable across clips regardless of bit depth. int writes the raw PCM
integer at the source bit depth (a 16-bit file gives -32768..32767), which is
handy when you need the exact stored samples. db writes the dBFS magnitude,
where 0 dB is full scale and true silence reports a -120 floor instead of
negative infinity.
How do I export just part of a long recording?
Use Start frame and Max frames. One frame is one sample per channel, so at
44.1 kHz, frame 44100 is one second in. Set Start frame to where you want to
begin and Max frames to how many frames to write (up to 500000). The export
covers start_frame … start_frame + max_frames, clamped to the clip length.
Is my audio uploaded anywhere?
No. The decoder is compiled to WebAssembly and runs entirely in your browser tab. The WAV bytes you paste never leave your device, and there is no sign-up or server request.
Developer & Automation Access
Run it from the terminal
Same engine as this page, headless — via the gizza CLI:
gizza tool wav-to-csv-samples "UklGRi4AAABXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YQYAAAAAQADgAAA="New to the CLI? Get gizza →
Open it by URL
Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:
https://gizza.ai/tools/wav-to-csv-samples/?input=UklGRi4AAABXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YQYAAAAAQADgAAA%3D&input_format=base64&value_scale=float&precision=6&index_column=time&delimiter=comma&header=true&start_frame=0&max_frames=100000Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.
