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
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;