Bladeren bron

Fix format error: header chunkSize can be 16, 18, or 40

dds
zirafa 7 jaren geleden
bovenliggende
commit
33f3df4555
1 gewijzigde bestanden met toevoegingen van 9 en 2 verwijderingen
  1. +9
    -2
      extras/wav2sketch/wav2sketch.c

+ 9
- 2
extras/wav2sketch/wav2sketch.c Bestand weergeven

@@ -42,7 +42,7 @@ uint32_t read_uint32(FILE *in);
void die(const char *format, ...) __attribute__ ((format (printf, 1, 2)));

// WAV file format:
// https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
// http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

const char *filename="";
char samplename[64];
@@ -56,14 +56,16 @@ void wav2c(FILE *in, FILE *out, FILE *outh)
int16_t format, channels, bits;
uint32_t rate;
uint32_t i, length, padlength=0, arraylen;
uint32_t chunkSize;
int32_t audio=0;

// read the WAV file's header
for (i=0; i<5; i++) {
header[i] = read_uint32(in);
}
chunkSize = header[4];
if (header[0] != 0x46464952 || header[2] != 0x45564157
|| header[3] != 0x20746D66 || header[4] != 0x00000010) {
|| header[3] != 0x20746D66 || !(chunkSize == 16 || chunkSize == 18 || chunkSize == 40)) {
die("error in format of file %s", filename);
}

@@ -85,6 +87,11 @@ void wav2c(FILE *in, FILE *out, FILE *outh)
if (bits != 16)
die("file %s has %d bit format, but only 16 is supported", filename, bits);

// skip past any extra data on the WAVE header (hopefully it doesn't matter?)
for (chunkSize -= 16; chunkSize > 0; chunkSize--) {
read_uint8(in);
}

// read the data header, skip non-audio data
while (1) {
header[0] = read_uint32(in);

Laden…
Annuleren
Opslaan