Samples as text. Firmware that plays a beep from flash, a notebook that wants a waveform as a column, a test that checks a codec against known values: each needs the numbers out of an audio file, or a file made from numbers. This page does both without a scripting step.
Audio to numbers
Load a file and pick a start and a length; the limit is a million values in one text file, since text that size is already 8 MB. Format chooses CSV, JSON or a C array. Values chooses the scale: float keeps the decoded samples as they are, between -1 and 1; 16-bit, signed 8-bit and unsigned 8-bit round them to the integer ranges those words hold. A stereo file can be written as one column or array per channel, or interleaved, left then right, which is how most audio hardware wants it.
Numbers to audio
Paste or type the numbers. CSV with a header, JSON from this tool, a C initialiser with its defines, or a bare column one value per line all read. Rows with the same count of values become channels. The scale is detected from the range unless set, the sample rate comes from the text when it names one, and the WAV writes at the chosen bit depth. Play it before downloading; the scope shows the first samples.
The C array
The output is a static const array with a define each for the sample rate, the channel count and the frame count, formatted 16 values per line. Float arrays carry the f suffix so they compile as single precision. Include the header, point a DAC or an audio callback at the array, and the defines carry the rate it was made at.
Limits
Text is the wrong container for long audio; the million-value cap exists so the page stays responsive. Precision of a float export is a setting, and 6 decimals holds a 16-bit sample exactly.