cswave
cswave
is a small, cross-platform utility to convert CSV sample data to WAVE files. This can be used to do further analysis or processing on the
data using audio tooling.
Any column of the input file can be used as sample data for a resulting monophonic wave file, in one of the supported formats
i8
: 8 bit unsigned integer datai16
: 16bit signed little-endian datai32
: 32bit signed little-endian dataf32
: 32bit IEEE float datanf32
: 32bit IEEE float data, but without the normalization step
Note that the integer output data formats only use the integer part of the input data, ie. when using the i32
output format, the input sample
value 1.23
is truncated to the output sample value 1
.
When using the integer output data formats, the exact sample value is preserved (as long as it fits the storage size). For the f32
format, the
specification requires that the samples be normalized to the range -1.0
to 1.0
, thus the sample values will not be preserved. Use the nf32
sample format when your input data is already normalized and you want to preserve the exact sample values.
Quoted text embedding the separation character within CSV columns will confuse the CSV parser. Don't do that.
Building
To build cswave
, running make
within the project directory on a machine with a working C compiler should work.
To build the windows executable cswave.exe
, the mingw-w64
crosscompiler is required. Use make cswave.exe
to build it.
Usage
Call the tool using the invocation
./cswave <file.csv> <file.wav> <column> <samplerate> [<format>] [<delimiter>]
<file.csv>
: CSV input file<file.wav>
: Output file, will be overwritten without question if it already exists<column>
: Zero-based column index within the CSV (e.g.,0
)<samplerate>
: Integer sample rate of the resulting output file (e.g.,44100
)<format>
: Output file sample format as listed above, defaulti16
<delimiter>
: Specify a single character to use as the delimiter within the CSV input, default,