int main_steve1(int argc, char *argv[]) { FILE *f; char buf[12]; foreign_metadata_t *fm; const char *fn, *error; size_t i; FLAC__uint32 size; if(argc != 2) { fprintf(stderr, "usage: %s { file.wav | file.aif }\n", argv[0]); return 1; } fn = argv[1]; if(0 == (f = fopen(fn, "rb")) || fread(buf, 1, 4, f) != 4) { fprintf(stderr, "ERROR opening %s for reading\n", fn); return 1; } fclose(f); if(0 == (fm = flac__foreign_metadata_new(memcmp(buf, "RIFF", 4)? FOREIGN_BLOCK_TYPE__AIFF : FOREIGN_BLOCK_TYPE__RIFF))) { fprintf(stderr, "ERROR: out of memory\n"); return 1; } if(fm->type == FOREIGN_BLOCK_TYPE__AIFF) { if(!flac__foreign_metadata_read_from_aiff(fm, fn, &error)) { fprintf(stderr, "ERROR reading chunks from %s: %s\n", fn, error); return 1; } } else { if(!flac__foreign_metadata_read_from_wave(fm, fn, &error)) { fprintf(stderr, "ERROR reading chunks from %s: %s\n", fn, error); return 1; } } if(0 == (f = fopen(fn, "rb"))) { fprintf(stderr, "ERROR opening %s for reading\n", fn); return 1; } for(i = 0; i < fm->num_blocks; i++) { if(fseeko(f, fm->blocks[i].offset, SEEK_SET) < 0) { fprintf(stderr, "ERROR seeking in %s\n", fn); return 1; } if(fread(buf, 1, 12, f) != 12) { fprintf(stderr, "ERROR reading %s\n", fn); return 1; } size = unpack32_((const FLAC__byte*)buf+4, fm->type); printf("block:[%c%c%c%c] size=%08x=(%10u)", buf[0], buf[1], buf[2], buf[3], size, size); if(i == 0) printf(" type:[%c%c%c%c]", buf[8], buf[9], buf[10], buf[11]); else if(fm->type == FOREIGN_BLOCK_TYPE__AIFF && i == fm->audio_block) printf(" offset size=%08x=(%10u)", fm->ssnd_offset_size, fm->ssnd_offset_size); printf("\n"); } fclose(f); flac__foreign_metadata_delete(fm); return 0; }
int main(int argc, char *argv[]) { FILE *f; char buf[36]; foreign_metadata_t *fm; const char *fn, *error; size_t i; FLAC__uint32 size; if(argc != 2) { fprintf(stderr, "usage: %s { file.wav | file.aif }\n", argv[0]); return 1; } fn = argv[1]; if(0 == (f = fopen(fn, "rb")) || fread(buf, 1, 4, f) != 4) { fprintf(stderr, "ERROR opening %s for reading\n", fn); return 1; } fclose(f); if(0 == (fm = flac__foreign_metadata_new(memcmp(buf, "RIFF", 4) && memcmp(buf, "RF64", 4)? FOREIGN_BLOCK_TYPE__AIFF : FOREIGN_BLOCK_TYPE__RIFF))) { fprintf(stderr, "ERROR: out of memory\n"); return 1; } if(fm->type == FOREIGN_BLOCK_TYPE__AIFF) { if(!flac__foreign_metadata_read_from_aiff(fm, fn, &error)) { fprintf(stderr, "ERROR reading chunks from %s: %s\n", fn, error); return 1; } } else { if(!flac__foreign_metadata_read_from_wave(fm, fn, &error)) { fprintf(stderr, "ERROR reading chunks from %s: %s\n", fn, error); return 1; } } if(0 == (f = fopen(fn, "rb"))) { fprintf(stderr, "ERROR opening %s for reading\n", fn); return 1; } for(i = 0; i < fm->num_blocks; i++) { if(fseeko(f, fm->blocks[i].offset, SEEK_SET) < 0) { fprintf(stderr, "ERROR seeking in %s\n", fn); return 1; } if(fread(buf, 1, i==0?12:8, f) != (i==0?12:8)) { fprintf(stderr, "ERROR reading %s\n", fn); return 1; } size = unpack32_((const FLAC__byte*)buf+4, fm->type); printf("block:[%c%c%c%c] size=%08x=(%10u)", buf[0], buf[1], buf[2], buf[3], size, size); if(i == 0) printf(" type:[%c%c%c%c]", buf[8], buf[9], buf[10], buf[11]); else if(fm->type == FOREIGN_BLOCK_TYPE__AIFF && i == fm->audio_block) printf(" offset size=%08x=(%10u)", fm->ssnd_offset_size, fm->ssnd_offset_size); else if(fm->type == FOREIGN_BLOCK_TYPE__RIFF && i == 1 && !memcmp(buf, "ds64", 4)) { if(fread(buf+8, 1, 36-8, f) != 36-8) { fprintf(stderr, "ERROR reading %s\n", fn); return 1; } #ifdef _MSC_VER printf(" RIFF size=%016I64x=(%I64u)", unpack64le_(buf+8), unpack64le_(buf+8)); printf(" data size=%016I64x=(%I64u)", unpack64le_(buf+16), unpack64le_(buf+16)); printf(" sample count=%016I64x=(%I64u)", unpack64le_(buf+24), unpack64le_(buf+24)); #else printf(" RIFF size=%016llx=(%llu)", unpack64le_(buf+8), unpack64le_(buf+8)); printf(" data size=%016llx=(%llu)", unpack64le_(buf+16), unpack64le_(buf+16)); printf(" sample count=%016llx=(%llu)", unpack64le_(buf+24), unpack64le_(buf+24)); #endif printf(" table size=%08x=(%u)", unpack32le_(buf+32), unpack32le_(buf+32)); } printf("\n"); } fclose(f); flac__foreign_metadata_delete(fm); return 0; }