Mercurial > repos > blastem
comparison wave.c @ 2288:efc75ea79164
Support WAVE files in CUE sheets
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 18 Jan 2023 23:31:44 -0800 |
parents | 6e9d1a8c1b08 |
children | 1fdf7acc5165 |
comparison
equal
deleted
inserted
replaced
2287:8a918eb95ba8 | 2288:efc75ea79164 |
---|---|
24 memcpy(header.data_header.id, "data", 4); | 24 memcpy(header.data_header.id, "data", 4); |
25 header.data_header.size = 0;//This will be filled in later; | 25 header.data_header.size = 0;//This will be filled in later; |
26 return fwrite(&header, 1, sizeof(header), f) == sizeof(header); | 26 return fwrite(&header, 1, sizeof(header), f) == sizeof(header); |
27 } | 27 } |
28 | 28 |
29 uint8_t wave_read_header(FILE *f, wave_header *header) | |
30 { | |
31 size_t initial_read = sizeof(*header) - sizeof(header->data_header); | |
32 if (fread(header, 1, initial_read, f) != initial_read) { | |
33 return 0; | |
34 } | |
35 if (memcmp(header->chunk.id, "RIFF", 4)) { | |
36 return 0; | |
37 } | |
38 if (memcmp(header->chunk.format, "WAVE", 4)) { | |
39 return 0; | |
40 } | |
41 if (header->chunk.size < sizeof(*header) - 8) { | |
42 return 0; | |
43 } | |
44 if (memcmp(header->format_header.id, "fmt ", 4)) { | |
45 return 0; | |
46 } | |
47 if (header->format_header.size < sizeof(*header) - sizeof(header->chunk) - sizeof(header->format_header) - sizeof(header->data_header)) { | |
48 return 0; | |
49 } | |
50 fseek(f, header->format_header.size + sizeof(header->chunk) + sizeof(header->format_header), SEEK_SET); | |
51 if (fread(&header->data_header, 1, sizeof(header->data_header), f) != sizeof(header->data_header)) { | |
52 return 0; | |
53 } | |
54 if (memcmp(header->data_header.id, "data", 4)) { | |
55 return 0; | |
56 } | |
57 return 1; | |
58 } | |
59 | |
29 int wave_finalize(FILE * f) | 60 int wave_finalize(FILE * f) |
30 { | 61 { |
31 uint32_t size = ftell(f); | 62 uint32_t size = ftell(f); |
32 fseek(f, offsetof(wave_header, chunk.size), SEEK_SET); | 63 fseek(f, offsetof(wave_header, chunk.size), SEEK_SET); |
33 size -= 8; | 64 size -= 8; |