-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathtinywav.c
21 lines (21 loc) · 903 Bytes
/
tinywav.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Tiny WAV writer: original code by jon olick, public domain
// Floating point support + pure C version by rlyeh, public domain | wtrmrkrlyeh
#include <stdio.h>
static void tinywav(FILE *fp, short numChannels, short bitsPerSample, int sampleRateHz, const void *data, int size, int is_floating) {
short bpsamp;
int length, bpsec;
fwrite("RIFF", 1, 4, fp);
length = size + 44 - 8;
fwrite(&length, 1, 4, fp);
fwrite(is_floating ? "WAVEfmt \x10\x00\x00\x00\x03\x00" : "WAVEfmt \x10\x00\x00\x00\x01\x00", 1, 14, fp);
fwrite(&numChannels, 1, 2, fp);
fwrite(&sampleRateHz, 1, 4, fp);
bpsec = numChannels * sampleRateHz * bitsPerSample/8;
fwrite(&bpsec, 1, 4, fp);
bpsamp = numChannels * bitsPerSample/8;
fwrite(&bpsamp, 1, 2, fp);
fwrite(&bitsPerSample, 1, 2, fp);
fwrite("data", 1, 4, fp);
fwrite(&size, 1, 4, fp);
fwrite(data, 1, size, fp);
}