/* Set loop end frame. */ int afSetLoopEndFrame (AFfilehandle file, int instid, int loopid, AFframecount endFrame) { int trackid, endMarker; _Loop *loop = getLoop(file, instid, loopid, true); if (loop == NULL) return -1; if (endFrame < 0) { _af_error(AF_BAD_FRAME, "loop end frame must not be negative"); return AF_FAIL; } trackid = loop->trackid; endMarker = loop->endMarker; afSetMarkPosition(file, trackid, endMarker, endFrame); return AF_SUCCEED; }
/* Set loop start frame in the file structure. */ int afSetLoopStartFrame (AFfilehandle file, int instid, int loopid, AFframecount startFrame) { int trackid, beginMarker; _Loop *loop = getLoop(file, instid, loopid, true); if (loop == NULL) return -1; if (startFrame < 0) { _af_error(AF_BAD_FRAME, "loop start frame must not be negative"); return AF_FAIL; } trackid = loop->trackid; beginMarker = loop->beginMarker; afSetMarkPosition(file, trackid, beginMarker, startFrame); return AF_SUCCEED; }
int testmarkers (int fileformat) { AFfilehandle file; AFfilesetup setup; int markids[] = {1, 2, 3, 4}; AFframecount markpositions[] = {14, 54, 23, 101}; const char *marknames[] = {"one", "two", "three", "four"}; short frames[FRAME_COUNT * 2] = {0}; int readmarkcount; int readmarkids[4]; AFframecount frameswritten; setup = afNewFileSetup(); ensure(setup != AF_NULL_FILESETUP, "Could not create file setup"); afInitFileFormat(setup, fileformat); afInitChannels(setup, AF_DEFAULT_TRACK, 2); afInitMarkIDs(setup, AF_DEFAULT_TRACK, markids, 4); afInitMarkName(setup, AF_DEFAULT_TRACK, markids[0], marknames[0]); afInitMarkName(setup, AF_DEFAULT_TRACK, markids[1], marknames[1]); afInitMarkName(setup, AF_DEFAULT_TRACK, markids[2], marknames[2]); afInitMarkName(setup, AF_DEFAULT_TRACK, markids[3], marknames[3]); file = afOpenFile(sTestFileName, "w", setup); ensure(file != AF_NULL_FILEHANDLE, "Could not open file for writing"); afFreeFileSetup(setup); frameswritten = afWriteFrames(file, AF_DEFAULT_TRACK, frames, FRAME_COUNT); ensure(frameswritten == FRAME_COUNT, "Error writing audio data"); afSetMarkPosition(file, AF_DEFAULT_TRACK, markids[0], markpositions[0]); afSetMarkPosition(file, AF_DEFAULT_TRACK, markids[1], markpositions[1]); afSetMarkPosition(file, AF_DEFAULT_TRACK, markids[2], markpositions[2]); afSetMarkPosition(file, AF_DEFAULT_TRACK, markids[3], markpositions[3]); afCloseFile(file); file = afOpenFile(sTestFileName, "r", NULL); ensure(file != AF_NULL_FILEHANDLE, "Could not open file for reading"); readmarkcount = afGetMarkIDs(file, AF_DEFAULT_TRACK, NULL); ensure(readmarkcount == 4, "Number of markers is not correct"); afGetMarkIDs(file, AF_DEFAULT_TRACK, readmarkids); for (int i=0; i<readmarkcount; i++) ensure(readmarkids[i] = markids[i], "Marker identification numbers do not match"); for (int i=0; i<readmarkcount; i++) { AFframecount readmarkposition; const char *readmarkname; readmarkposition = afGetMarkPosition(file, AF_DEFAULT_TRACK, readmarkids[i]); readmarkname = afGetMarkName(file, AF_DEFAULT_TRACK, readmarkids[i]); ensure(readmarkposition == markpositions[i], "Marker positions do not match"); ensure(strcmp(readmarkname, marknames[i]) == 0, "Marker names do not match"); } afCloseFile(file); return EXIT_SUCCESS; }