status RawFile::readInit(AFfilesetup fileSetup) { if (!fileSetup) { _af_error(AF_BAD_FILESETUP, "a valid AFfilesetup is required for reading raw data"); return AF_FAIL; } if (initFromSetup(fileSetup) == AF_FAIL) return AF_FAIL; TrackSetup *trackSetup = fileSetup->getTrack(); if (!trackSetup) return AF_FAIL; Track *track = getTrack(); /* Set the track's data offset. */ if (trackSetup->dataOffsetSet) track->fpos_first_frame = trackSetup->dataOffset; else track->fpos_first_frame = 0; /* Set the track's frame count. */ if (trackSetup->frameCountSet) { track->totalfframes = trackSetup->frameCount; } else { AFfileoffset filesize = m_fh->length(); if (filesize == -1) track->totalfframes = -1; else { /* Ensure that the data offset is valid. */ if (track->fpos_first_frame > filesize) { _af_error(AF_BAD_FILESETUP, "data offset is larger than file size"); return AF_FAIL; } filesize -= track->fpos_first_frame; track->totalfframes = filesize / (int) _af_format_frame_size(&track->f, false); } track->data_size = filesize; } return AF_SUCCEED; }
status VOCFile::writeInit(AFfilesetup setup) { if (initFromSetup(setup) == AF_FAIL) return AF_FAIL; m_fh->write(kVOCMagic, kVOCMagicLength); uint16_t dataOffset = 0x001a; uint16_t version = 0x0114; uint16_t checksum = 0x1234 + ~version; writeU16(&dataOffset); writeU16(&version); writeU16(&checksum); return writeSoundData(); }
status NISTFile::writeInit(AFfilesetup setup) { if (initFromSetup(setup) == AF_FAIL) return AF_FAIL; Track *track = getTrack(); track->totalfframes = 0; track->fpos_first_frame = NIST_SPHERE_HEADER_LENGTH; track->nextfframe = 0; track->fpos_next_frame = track->fpos_first_frame; m_fh->seek(0, File::SeekFromBeginning); writeHeader(); return AF_SUCCEED; }
status IFFFile::writeInit(AFfilesetup setup) { if (initFromSetup(setup) == AF_FAIL) return AF_FAIL; uint32_t fileSize = 0; m_fh->write("FORM", 4); writeU32(&fileSize); m_fh->write("8SVX", 4); writeVHDR(); writeMiscellaneous(); writeBODY(); return AF_SUCCEED; }
status RawFile::writeInit(AFfilesetup setup) { if (initFromSetup(setup) == AF_FAIL) return AF_FAIL; TrackSetup *trackSetup = setup->getTrack(); if (!trackSetup) return AF_FAIL; Track *track = getTrack(); if (trackSetup->dataOffsetSet) track->fpos_first_frame = trackSetup->dataOffset; else track->fpos_first_frame = 0; return AF_SUCCEED; }
status CAFFile::writeInit(AFfilesetup setup) { if (initFromSetup(setup) == AF_FAIL) return AF_FAIL; initCompressionParams(); Tag caff("caff"); if (!writeTag(&caff)) return AF_FAIL; const uint8_t versionAndFlags[4] = { 0, 1, 0, 0 }; if (m_fh->write(versionAndFlags, 4) != 4) return AF_FAIL; if (writeDescription() == AF_FAIL) return AF_FAIL; if (writeData(false) == AF_FAIL) return AF_FAIL; return AF_SUCCEED; }
status SampleVisionFile::writeInit(AFfilesetup setup) { if (initFromSetup(setup) == AF_FAIL) return AF_FAIL; m_fh->write(kSMPMagic, kSMPMagicLength); m_fh->write(kSMPVersion, kSMPVersionLength); char name[kSMPNameLength + 1]; char comment[kSMPCommentLength + 1]; memset(name, ' ', kSMPNameLength); memset(comment, ' ', kSMPCommentLength); m_fh->write(name, kSMPNameLength); m_fh->write(comment, kSMPCommentLength); uint32_t frameCount = 0; m_frameCountOffset = m_fh->tell(); writeU32(&frameCount); Track *track = getTrack(); track->fpos_first_frame = m_fh->tell(); return AF_SUCCEED; }
status AVRFile::writeInit(AFfilesetup setup) { if (initFromSetup(setup) == AF_FAIL) return AF_FAIL; if (m_fh->seek(0, File::SeekFromBeginning) != 0) { _af_error(AF_BAD_LSEEK, "bad seek"); return AF_FAIL; } Track *track = getTrack(); char name[8]; uint16_t mono, resolution, sign, loop, midi; uint32_t rate, size, loopStart, loopEnd; char reserved[26]; char user[64]; m_fh->write("2BIT", 4); memset(name, 0, 8); if (m_fileName != NULL) strncpy(name, af_basename(m_fileName), 8); m_fh->write(name, 8); if (track->f.channelCount == 1) mono = 0x0; else mono = 0xffff; writeU16(&mono); resolution = track->f.sampleWidth; writeU16(&resolution); if (track->f.sampleFormat == AF_SAMPFMT_UNSIGNED) sign = 0x0; else sign = 0xffff; writeU16(&sign); /* We do not currently support loops. */ loop = 0; writeU16(&loop); midi = 0xffff; writeU16(&midi); rate = track->f.sampleRate; /* Set the high-order byte of rate to 0xff. */ rate |= 0xff000000; size = track->totalfframes; loopStart = 0; loopEnd = size; writeU32(&rate); writeU32(&size); writeU32(&loopStart); writeU32(&loopEnd); memset(reserved, 0, 26); m_fh->write(reserved, 26); memset(user, 0, 64); m_fh->write(user, 64); if (track->fpos_first_frame == 0) track->fpos_first_frame = m_fh->tell(); return AF_SUCCEED; }