void readMiscellaneous(const std::string &testFileName) { AFfilehandle file = afOpenFile(testFileName.c_str(), "r", NULL); ASSERT_TRUE(file); int count = afGetMiscIDs(file, NULL); EXPECT_EQ(count, kNumMiscellaneous); int miscIDs[kNumMiscellaneous]; afGetMiscIDs(file, miscIDs); for (int i=0; i<kNumMiscellaneous; i++) EXPECT_EQ(miscIDs[i], kMiscellaneous[i].id); for (int i=0; i<kNumMiscellaneous; i++) { int misctype = afGetMiscType(file, miscIDs[i]); EXPECT_EQ(misctype, kMiscellaneous[i].type); int datasize = afGetMiscSize(file, miscIDs[i]); EXPECT_EQ(datasize, strlen(kMiscellaneous[i].data)); char *data = new char[datasize]; EXPECT_EQ(datasize, afReadMisc(file, miscIDs[i], data, datasize)); EXPECT_TRUE(!memcmp(data, kMiscellaneous[i].data, datasize)); delete [] data; } ASSERT_EQ(0, afCloseFile(file)); }
static char *copyrightstring (AFfilehandle file) { char *copyright = NULL; int *miscids; int i, misccount; misccount = afGetMiscIDs(file, NULL); miscids = (int *) malloc(sizeof (int) * misccount); afGetMiscIDs(file, miscids); for (i=0; i<misccount; i++) { if (afGetMiscType(file, miscids[i]) != AF_MISC_COPY) continue; /* If this code executes, the miscellaneous chunk is a copyright chunk. */ int datasize = afGetMiscSize(file, miscids[i]); char *data = (char *) malloc(datasize); afReadMisc(file, miscids[i], data, datasize); copyright = data; break; } free(miscids); return copyright; }
int main (int argc, char **argv) { AFfilehandle file; int *miscids; int i, misccount; if (argc < 2) { fprintf(stderr, "usage: %s <audio file>\n", argv[0]); exit(EXIT_FAILURE); } file = afOpenFile(argv[1], "r", NULL); if (file == NULL) { fprintf(stderr, "could not open file %s for reading\n", argv[1]); exit(EXIT_FAILURE); } misccount = afGetMiscIDs(file, NULL); miscids = malloc(sizeof (int) * misccount); afGetMiscIDs(file, miscids); for (i=0; i<misccount; i++) { char *data; int datasize; datasize = afGetMiscSize(file, miscids[i]); printf("Miscellaneous %d, %d bytes:\n", afGetMiscType(file, miscids[i]), datasize); /* We know that the data in this test is a string, so make the buffer large enough for a null terminator. */ data = malloc(datasize+1); afReadMisc(file, miscids[i], data, datasize); data[datasize] = '\0'; puts(data); free(data); } afCloseFile(file); return 0; }