1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# 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 data
* `i16`: 16bit signed little-endian data
* `i32`: 32bit signed little-endian data
* `f32`: 32bit IEEE float data
* `nf32`: 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, default `i16`
* `<delimiter>`: Specify a single character to use as the delimiter within the CSV input, default `,`
|