1 /* 2 Audio File Library 3 Copyright (C) 1998-2000, Michael Pruett <michael@68k.org> 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Library General Public 7 License as published by the Free Software Foundation; either 8 version 2 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Library General Public License for more details. 14 15 You should have received a copy of the GNU Library General Public 16 License along with this library; if not, write to the 17 Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 Boston, MA 02111-1307 USA. 19 */ 20 21 /* 22 audiofile.h 23 24 This file contains the public interfaces to the Audio File Library. 25 */ 26 27 #ifndef AUDIOFILE_H 28 #define AUDIOFILE_H 29 30 #include <sys/types.h> 31 #include <aupvlist.h> 32 33 #define LIBAUDIOFILE_MAJOR_VERSION 0 34 #define LIBAUDIOFILE_MINOR_VERSION 2 35 #define LIBAUDIOFILE_MICRO_VERSION 4 36 37 #ifdef __cplusplus 38 extern "C" 39 { 40 #endif /* __cplusplus */ 41 42 typedef struct _AFvirtualfile AFvirtualfile; 43 44 typedef struct _AFfilesetup *AFfilesetup; 45 typedef struct _AFfilehandle *AFfilehandle; 46 typedef void (*AFerrfunc)(long, const char *); 47 48 typedef off_t AFframecount; 49 typedef off_t AFfileoffset; 50 51 #define AF_NULL_FILESETUP ((struct _AFfilesetup *) 0) 52 #define AF_NULL_FILEHANDLE ((struct _AFfilehandle *) 0) 53 54 #define AF_ERR_BASE 3000 55 56 enum 57 { 58 AF_DEFAULT_TRACK = 1001 59 }; 60 61 enum 62 { 63 AF_DEFAULT_INST = 2001 64 }; 65 66 enum 67 { 68 AF_NUM_UNLIMITED = 99999 69 }; 70 71 enum 72 { 73 AF_BYTEORDER_BIGENDIAN = 501, 74 AF_BYTEORDER_LITTLEENDIAN = 502 75 }; 76 77 enum 78 { 79 AF_FILE_UNKNOWN = -1, 80 AF_FILE_RAWDATA = 0, 81 AF_FILE_AIFFC = 1, 82 AF_FILE_AIFF = 2, 83 AF_FILE_NEXTSND = 3, 84 AF_FILE_WAVE = 4, 85 AF_FILE_BICSF = 5, 86 AF_FILE_IRCAM = AF_FILE_BICSF, 87 AF_FILE_MPEG1BITSTREAM = 6, /* not implemented */ 88 AF_FILE_SOUNDDESIGNER1 = 7, /* not implemented */ 89 AF_FILE_SOUNDDESIGNER2 = 8, /* not implemented */ 90 AF_FILE_AVR = 9, 91 AF_FILE_IFF_8SVX = 10, 92 AF_FILE_SAMPLEVISION = 11, /* not implemented */ 93 AF_FILE_VOC = 12, /* not implemented */ 94 AF_FILE_NIST_SPHERE = 13, 95 AF_FILE_SOUNDFONT2 = 14 /* not implemented */ 96 }; 97 98 enum 99 { 100 AF_LOOP_MODE_NOLOOP = 0, 101 AF_LOOP_MODE_FORW = 1, 102 AF_LOOP_MODE_FORWBAKW = 2 103 }; 104 105 enum 106 { 107 AF_SAMPFMT_TWOSCOMP = 401, /* linear two's complement */ 108 AF_SAMPFMT_UNSIGNED = 402, /* unsigned integer */ 109 AF_SAMPFMT_FLOAT = 403, /* 32-bit IEEE floating-point */ 110 AF_SAMPFMT_DOUBLE = 404 /* 64-bit IEEE double-precision floating-point */ 111 }; 112 113 enum 114 { 115 AF_INST_LOOP_OFF = 0, /* no looping */ 116 AF_INST_LOOP_CONTINUOUS = 1, /* loop continuously through decay */ 117 AF_INST_LOOP_SUSTAIN = 3 /* loop during sustain, then continue */ 118 }; 119 120 enum 121 { 122 AF_INST_MIDI_BASENOTE = 301, 123 AF_INST_NUMCENTS_DETUNE = 302, 124 AF_INST_MIDI_LONOTE = 303, 125 AF_INST_MIDI_HINOTE = 304, 126 AF_INST_MIDI_LOVELOCITY = 305, 127 AF_INST_MIDI_HIVELOCITY = 306, 128 AF_INST_NUMDBS_GAIN = 307, 129 AF_INST_SUSLOOPID = 308, /* loop id for AIFF sustain loop */ 130 AF_INST_RELLOOPID = 309, /* loop id for AIFF release loop */ 131 AF_INST_SAMP_STARTFRAME = 310, /* start sample for this inst */ 132 AF_INST_SAMP_ENDFRAME = 311, /* end sample for this inst */ 133 AF_INST_SAMP_MODE = 312, /* looping mode for this inst */ 134 AF_INST_TRACKID = 313, 135 AF_INST_NAME = 314, /* name of this inst */ 136 AF_INST_SAMP_RATE = 315, /* sample rate of this inst's sample */ 137 AF_INST_PRESETID = 316, /* ID of preset containing this inst */ 138 AF_INST_PRESET_NAME = 317 /* name of preset containing this inst */ 139 }; 140 141 enum 142 { 143 AF_MISC_UNRECOGNIZED = 0, /* unrecognized data chunk */ 144 AF_MISC_COPY = 201, /* copyright string */ 145 AF_MISC_AUTH = 202, /* author string */ 146 AF_MISC_NAME = 203, /* name string */ 147 AF_MISC_ANNO = 204, /* annotation string */ 148 AF_MISC_APPL = 205, /* application-specific data */ 149 AF_MISC_MIDI = 206, /* MIDI exclusive data */ 150 AF_MISC_PCMMAP = 207, /* PCM mapping information (future use) */ 151 AF_MISC_NeXT = 208, /* misc binary data appended to NeXT header */ 152 AF_MISC_IRCAM_PEAKAMP = 209, /* peak amplitude information */ 153 AF_MISC_IRCAM_COMMENT = 210, /* BICSF text comment */ 154 AF_MISC_COMMENT = 210, /* general text comment */ 155 156 AF_MISC_ICMT = AF_MISC_COMMENT, /* comments chunk (WAVE format) */ 157 AF_MISC_ICRD = 211, /* creation date (WAVE format) */ 158 AF_MISC_ISFT = 212 /* software name (WAVE format) */ 159 }; 160 161 enum 162 { 163 /* supported compression schemes */ 164 AF_COMPRESSION_UNKNOWN = -1, 165 AF_COMPRESSION_NONE = 0, 166 AF_COMPRESSION_G722 = 501, 167 AF_COMPRESSION_G711_ULAW = 502, 168 AF_COMPRESSION_G711_ALAW = 503, 169 170 /* Apple proprietary AIFF-C compression schemes (not supported) */ 171 AF_COMPRESSION_APPLE_ACE2 = 504, 172 AF_COMPRESSION_APPLE_ACE8 = 505, 173 AF_COMPRESSION_APPLE_MAC3 = 506, 174 AF_COMPRESSION_APPLE_MAC6 = 507, 175 176 AF_COMPRESSION_G726 = 517, 177 AF_COMPRESSION_G728 = 518, 178 AF_COMPRESSION_DVI_AUDIO = 519, 179 AF_COMPRESSION_IMA = AF_COMPRESSION_DVI_AUDIO, 180 AF_COMPRESSION_GSM = 520, 181 AF_COMPRESSION_FS1016 = 521, 182 AF_COMPRESSION_DV = 522, 183 AF_COMPRESSION_MS_ADPCM = 523 184 }; 185 186 /* tokens for afQuery() -- see the man page for instructions */ 187 /* level 1 selectors */ 188 enum 189 { 190 AF_QUERYTYPE_INSTPARAM = 500, 191 AF_QUERYTYPE_FILEFMT = 501, 192 AF_QUERYTYPE_COMPRESSION = 502, 193 AF_QUERYTYPE_COMPRESSIONPARAM = 503, 194 AF_QUERYTYPE_MISC = 504, 195 AF_QUERYTYPE_INST = 505, 196 AF_QUERYTYPE_MARK = 506, 197 AF_QUERYTYPE_LOOP = 507 198 }; 199 200 /* level 2 selectors */ 201 enum 202 { 203 AF_QUERY_NAME = 600, /* get name (1-3 words) */ 204 AF_QUERY_DESC = 601, /* get description */ 205 AF_QUERY_LABEL = 602, /* get 4- or 5-char label */ 206 AF_QUERY_TYPE = 603, /* get type token */ 207 AF_QUERY_DEFAULT = 604, /* dflt. value for param */ 208 AF_QUERY_ID_COUNT = 605, /* get number of ids avail. */ 209 AF_QUERY_IDS = 606, /* get array of id tokens */ 210 AF_QUERY_IMPLEMENTED = 613, /* boolean */ 211 AF_QUERY_TYPE_COUNT = 607, /* get number of types av. */ 212 AF_QUERY_TYPES = 608, /* get array of types */ 213 AF_QUERY_NATIVE_SAMPFMT = 609, /* for compression */ 214 AF_QUERY_NATIVE_SAMPWIDTH = 610, 215 AF_QUERY_SQUISHFAC = 611, /* 1.0 means variable */ 216 AF_QUERY_MAX_NUMBER = 612, /* max allowed in file */ 217 AF_QUERY_SUPPORTED = 613 /* insts, loops, etc., supported? */ 218 }; 219 220 /* level 2 selectors which have sub-selectors */ 221 enum 222 { 223 AF_QUERY_TRACKS = 620, 224 AF_QUERY_CHANNELS = 621, 225 AF_QUERY_SAMPLE_SIZES = 622, 226 AF_QUERY_SAMPLE_FORMATS = 623, 227 AF_QUERY_COMPRESSION_TYPES = 624 228 }; 229 230 /* level 3 sub-selectors */ 231 enum 232 { 233 AF_QUERY_VALUE_COUNT = 650, /* number of values of the above */ 234 AF_QUERY_VALUES = 651 /* array of those values */ 235 }; 236 237 238 /* 239 Old Audio File Library error codes. These are still returned by the 240 AFerrorhandler calls, but are not used by the new digital media library 241 error reporting routines. See the bottom of this file for the new error 242 tokens. 243 */ 244 245 enum 246 { 247 AF_BAD_NOT_IMPLEMENTED = 0, /* not implemented yet */ 248 AF_BAD_FILEHANDLE = 1, /* tried to use invalid filehandle */ 249 AF_BAD_OPEN = 3, /* unix open failed */ 250 AF_BAD_CLOSE = 4, /* unix close failed */ 251 AF_BAD_READ = 5, /* unix read failed */ 252 AF_BAD_WRITE = 6, /* unix write failed */ 253 AF_BAD_LSEEK = 7, /* unix lseek failed */ 254 AF_BAD_NO_FILEHANDLE = 8, /* failed to allocate a filehandle struct */ 255 AF_BAD_ACCMODE = 10, /* unrecognized audio file access mode */ 256 AF_BAD_NOWRITEACC = 11, /* file not open for writing */ 257 AF_BAD_NOREADACC = 12, /* file not open for reading */ 258 AF_BAD_FILEFMT = 13, /* unrecognized audio file format */ 259 AF_BAD_RATE = 14, /* invalid sample rate */ 260 AF_BAD_CHANNELS = 15, /* invalid number of channels*/ 261 AF_BAD_SAMPCNT = 16, /* invalid sample count */ 262 AF_BAD_WIDTH = 17, /* invalid sample width */ 263 AF_BAD_SEEKMODE = 18, /* invalid seek mode */ 264 AF_BAD_NO_LOOPDATA = 19, /* failed to allocate loop struct */ 265 AF_BAD_MALLOC = 20, /* malloc failed somewhere */ 266 AF_BAD_LOOPID = 21, 267 AF_BAD_SAMPFMT = 22, /* bad sample format */ 268 AF_BAD_FILESETUP = 23, /* bad file setup structure*/ 269 AF_BAD_TRACKID = 24, /* no track corresponding to id */ 270 AF_BAD_NUMTRACKS = 25, /* wrong number of tracks for file format */ 271 AF_BAD_NO_FILESETUP = 26, /* failed to allocate a filesetup struct*/ 272 AF_BAD_LOOPMODE = 27, /* unrecognized loop mode value */ 273 AF_BAD_INSTID = 28, /* invalid instrument id */ 274 AF_BAD_NUMLOOPS = 29, /* bad number of loops */ 275 AF_BAD_NUMMARKS = 30, /* bad number of markers */ 276 AF_BAD_MARKID = 31, /* bad marker id */ 277 AF_BAD_MARKPOS = 32, /* invalid marker position value */ 278 AF_BAD_NUMINSTS = 33, /* invalid number of instruments */ 279 AF_BAD_NOAESDATA = 34, 280 AF_BAD_MISCID = 35, 281 AF_BAD_NUMMISC = 36, 282 AF_BAD_MISCSIZE = 37, 283 AF_BAD_MISCTYPE = 38, 284 AF_BAD_MISCSEEK = 39, 285 AF_BAD_STRLEN = 40, /* invalid string length */ 286 AF_BAD_RATECONV = 45, 287 AF_BAD_SYNCFILE = 46, 288 AF_BAD_CODEC_CONFIG = 47, /* improperly configured codec */ 289 AF_BAD_CODEC_STATE = 48, /* invalid codec state: can't recover */ 290 AF_BAD_CODEC_LICENSE = 49, /* no license available for codec */ 291 AF_BAD_CODEC_TYPE = 50, /* unsupported codec type */ 292 AF_BAD_COMPRESSION = AF_BAD_CODEC_CONFIG, /* for back compat */ 293 AF_BAD_COMPTYPE = AF_BAD_CODEC_TYPE, /* for back compat */ 294 295 AF_BAD_INSTPTYPE = 51, /* invalid instrument parameter type */ 296 AF_BAD_INSTPID = 52, /* invalid instrument parameter id */ 297 AF_BAD_BYTEORDER = 53, 298 AF_BAD_FILEFMT_PARAM = 54, /* unrecognized file format parameter */ 299 AF_BAD_COMP_PARAM = 55, /* unrecognized compression parameter */ 300 AF_BAD_DATAOFFSET = 56, /* bad data offset */ 301 AF_BAD_FRAMECNT = 57, /* bad frame count */ 302 AF_BAD_QUERYTYPE = 58, /* bad query type */ 303 AF_BAD_QUERY = 59, /* bad argument to afQuery() */ 304 AF_WARNING_CODEC_RATE = 60, /* using 8k instead of codec rate 8012 */ 305 AF_WARNING_RATECVT = 61, /* warning about rate conversion used */ 306 307 AF_BAD_HEADER = 62, /* failed to parse header */ 308 AF_BAD_FRAME = 63, /* bad frame number */ 309 AF_BAD_LOOPCOUNT = 64, /* bad loop count */ 310 AF_BAD_DMEDIA_CALL = 65, /* error in dmedia subsystem call */ 311 312 /* AIFF/AIFF-C specific errors when parsing file header */ 313 AF_BAD_AIFF_HEADER = 108, /* failed to parse chunk header */ 314 AF_BAD_AIFF_FORM = 109, /* failed to parse FORM chunk */ 315 AF_BAD_AIFF_SSND = 110, /* failed to parse SSND chunk */ 316 AF_BAD_AIFF_CHUNKID = 111, /* unrecognized AIFF/AIFF-C chunk id */ 317 AF_BAD_AIFF_COMM = 112, /* failed to parse COMM chunk */ 318 AF_BAD_AIFF_INST = 113, /* failed to parse INST chunk */ 319 AF_BAD_AIFF_MARK = 114, /* failed to parse MARK chunk */ 320 AF_BAD_AIFF_SKIP = 115, /* failed to skip unsupported chunk */ 321 AF_BAD_AIFF_LOOPMODE = 116 /* unrecognized loop mode (forw, etc)*/ 322 }; 323 324 /* new error codes which may be retrieved via dmGetError() */ 325 /* The old error tokens continue to be retrievable via the AFerrorhandler */ 326 /* AF_ERR_BASE is #defined in dmedia/dmedia.h */ 327 328 enum 329 { 330 AF_ERR_NOT_IMPLEMENTED = 0+AF_ERR_BASE, /* not implemented yet */ 331 AF_ERR_BAD_FILEHANDLE = 1+AF_ERR_BASE, /* invalid filehandle */ 332 AF_ERR_BAD_READ = 5+AF_ERR_BASE, /* unix read failed */ 333 AF_ERR_BAD_WRITE = 6+AF_ERR_BASE, /* unix write failed */ 334 AF_ERR_BAD_LSEEK = 7+AF_ERR_BASE, /* unix lseek failed */ 335 AF_ERR_BAD_ACCMODE = 10+AF_ERR_BASE, /* unrecognized audio file access mode */ 336 AF_ERR_NO_WRITEACC = 11+AF_ERR_BASE, /* file not open for writing */ 337 AF_ERR_NO_READACC = 12+AF_ERR_BASE, /* file not open for reading */ 338 AF_ERR_BAD_FILEFMT = 13+AF_ERR_BASE, /* unrecognized audio file format */ 339 AF_ERR_BAD_RATE = 14+AF_ERR_BASE, /* invalid sample rate */ 340 AF_ERR_BAD_CHANNELS = 15+AF_ERR_BASE, /* invalid # channels*/ 341 AF_ERR_BAD_SAMPCNT = 16+AF_ERR_BASE, /* invalid sample count */ 342 AF_ERR_BAD_WIDTH = 17+AF_ERR_BASE, /* invalid sample width */ 343 AF_ERR_BAD_SEEKMODE = 18+AF_ERR_BASE, /* invalid seek mode */ 344 AF_ERR_BAD_LOOPID = 21+AF_ERR_BASE, /* invalid loop id */ 345 AF_ERR_BAD_SAMPFMT = 22+AF_ERR_BASE, /* bad sample format */ 346 AF_ERR_BAD_FILESETUP = 23+AF_ERR_BASE, /* bad file setup structure*/ 347 AF_ERR_BAD_TRACKID = 24+AF_ERR_BASE, /* no track corresponding to id */ 348 AF_ERR_BAD_NUMTRACKS = 25+AF_ERR_BASE, /* wrong number of tracks for file format */ 349 AF_ERR_BAD_LOOPMODE = 27+AF_ERR_BASE, /* unrecognized loop mode symbol */ 350 AF_ERR_BAD_INSTID = 28+AF_ERR_BASE, /* invalid instrument id */ 351 AF_ERR_BAD_NUMLOOPS = 29+AF_ERR_BASE, /* bad number of loops */ 352 AF_ERR_BAD_NUMMARKS = 30+AF_ERR_BASE, /* bad number of markers */ 353 AF_ERR_BAD_MARKID = 31+AF_ERR_BASE, /* bad marker id */ 354 AF_ERR_BAD_MARKPOS = 32+AF_ERR_BASE, /* invalid marker position value */ 355 AF_ERR_BAD_NUMINSTS = 33+AF_ERR_BASE, /* invalid number of instruments */ 356 AF_ERR_BAD_NOAESDATA = 34+AF_ERR_BASE, 357 AF_ERR_BAD_MISCID = 35+AF_ERR_BASE, 358 AF_ERR_BAD_NUMMISC = 36+AF_ERR_BASE, 359 AF_ERR_BAD_MISCSIZE = 37+AF_ERR_BASE, 360 AF_ERR_BAD_MISCTYPE = 38+AF_ERR_BASE, 361 AF_ERR_BAD_MISCSEEK = 39+AF_ERR_BASE, 362 AF_ERR_BAD_STRLEN = 40+AF_ERR_BASE, /* invalid string length */ 363 AF_ERR_BAD_RATECONV = 45+AF_ERR_BASE, 364 AF_ERR_BAD_SYNCFILE = 46+AF_ERR_BASE, 365 AF_ERR_BAD_CODEC_CONFIG = 47+AF_ERR_BASE, /* improperly configured codec */ 366 AF_ERR_BAD_CODEC_TYPE = 50+AF_ERR_BASE, /* unsupported codec type */ 367 AF_ERR_BAD_INSTPTYPE = 51+AF_ERR_BASE, /* invalid instrument parameter type */ 368 AF_ERR_BAD_INSTPID = 52+AF_ERR_BASE, /* invalid instrument parameter id */ 369 370 AF_ERR_BAD_BYTEORDER = 53+AF_ERR_BASE, 371 AF_ERR_BAD_FILEFMT_PARAM = 54+AF_ERR_BASE, /* unrecognized file format parameter */ 372 AF_ERR_BAD_COMP_PARAM = 55+AF_ERR_BASE, /* unrecognized compression parameter */ 373 AF_ERR_BAD_DATAOFFSET = 56+AF_ERR_BASE, /* bad data offset */ 374 AF_ERR_BAD_FRAMECNT = 57+AF_ERR_BASE, /* bad frame count */ 375 376 AF_ERR_BAD_QUERYTYPE = 58+AF_ERR_BASE, /* bad query type */ 377 AF_ERR_BAD_QUERY = 59+AF_ERR_BASE, /* bad argument to afQuery() */ 378 AF_ERR_BAD_HEADER = 62+AF_ERR_BASE, /* failed to parse header */ 379 AF_ERR_BAD_FRAME = 63+AF_ERR_BASE, /* bad frame number */ 380 AF_ERR_BAD_LOOPCOUNT = 64+AF_ERR_BASE, /* bad loop count */ 381 382 /* AIFF/AIFF-C specific errors when parsing file header */ 383 384 AF_ERR_BAD_AIFF_HEADER = 66+AF_ERR_BASE, /* failed to parse chunk header */ 385 AF_ERR_BAD_AIFF_FORM = 67+AF_ERR_BASE, /* failed to parse FORM chunk */ 386 AF_ERR_BAD_AIFF_SSND = 68+AF_ERR_BASE, /* failed to parse SSND chunk */ 387 AF_ERR_BAD_AIFF_CHUNKID = 69+AF_ERR_BASE, /* unrecognized AIFF/AIFF-C chunk id */ 388 AF_ERR_BAD_AIFF_COMM = 70+AF_ERR_BASE, /* failed to parse COMM chunk */ 389 AF_ERR_BAD_AIFF_INST = 71+AF_ERR_BASE, /* failed to parse INST chunk */ 390 AF_ERR_BAD_AIFF_MARK = 72+AF_ERR_BASE, /* failed to parse MARK chunk */ 391 AF_ERR_BAD_AIFF_SKIP = 73+AF_ERR_BASE, /* failed to skip unsupported chunk */ 392 AF_ERR_BAD_AIFF_LOOPMODE = 74+AF_ERR_BASE /* unrecognized loop mode (forw, etc) */ 393 }; 394 395 396 /* global routines */ 397 AFerrfunc afSetErrorHandler (AFerrfunc efunc); 398 399 /* query routines */ 400 AUpvlist afQuery (int querytype, int arg1, int arg2, int arg3, int arg4); 401 long afQueryLong (int querytype, int arg1, int arg2, int arg3, int arg4); 402 double afQueryDouble (int querytype, int arg1, int arg2, int arg3, int arg4); 403 void *afQueryPointer (int querytype, int arg1, int arg2, int arg3, int arg4); 404 405 /* basic operations on file handles and file setups */ 406 AFfilesetup afNewFileSetup (void); 407 void afFreeFileSetup (AFfilesetup); 408 int afIdentifyFD (int); 409 int afIdentifyNamedFD (int, const char *filename, int *implemented); 410 411 AFfilehandle afOpenFile (const char *filename, const char *mode, 412 AFfilesetup setup); 413 AFfilehandle afOpenVirtualFile (AFvirtualfile *vfile, const char *mode, 414 AFfilesetup setup); 415 AFfilehandle afOpenFD (int fd, const char *mode, AFfilesetup setup); 416 AFfilehandle afOpenNamedFD (int fd, const char *mode, AFfilesetup setup, 417 const char *filename); 418 419 void afSaveFilePosition (AFfilehandle file); 420 void afRestoreFilePosition (AFfilehandle file); 421 int afSyncFile (AFfilehandle file); 422 int afCloseFile (AFfilehandle file); 423 424 void afInitFileFormat (AFfilesetup, int format); 425 int afGetFileFormat (AFfilehandle, int *version); 426 427 /* track */ 428 void afInitTrackIDs (AFfilesetup, int *trackids, int trackCount); 429 int afGetTrackIDs (AFfilehandle, int *trackids); 430 431 /* track data: reading, writng, seeking, sizing frames */ 432 int afReadFrames (AFfilehandle, int track, void *buffer, int frameCount); 433 int afWriteFrames (AFfilehandle, int track, const void *buffer, int frameCount); 434 AFframecount afSeekFrame (AFfilehandle, int track, AFframecount frameoffset); 435 AFframecount afTellFrame (AFfilehandle, int track); 436 AFfileoffset afGetTrackBytes (AFfilehandle, int track); 437 float afGetFrameSize (AFfilehandle, int track, int expand3to4); 438 float afGetVirtualFrameSize (AFfilehandle, int track, int expand3to4); 439 440 /* track data: AES data */ 441 /* afInitAESChannelData is obsolete -- use afInitAESChannelDataTo() */ 442 void afInitAESChannelData (AFfilesetup, int track); /* obsolete */ 443 void afInitAESChannelDataTo (AFfilesetup, int track, int willBeData); 444 int afGetAESChannelData (AFfilehandle, int track, unsigned char buf[24]); 445 void afSetAESChannelData (AFfilehandle, int track, unsigned char buf[24]); 446 447 #if 0 448 /* track setup format initialized via DMparams */ 449 /* track format retrieved via DMparams */ 450 DMstatus afInitFormatParams (AFfilesetup, int track, DMparams *params); 451 /* virtual format set via DMparams */ 452 DMstatus afGetFormatParams (AFfilehandle, int track, DMparams *params); 453 /* virtual format retrieved via DMparams */ 454 DMstatus afSetVirtualFormatParams (AFfilehandle, int track, DMparams *params); 455 DMstatus afGetVirtualFormatParams (AFfilehandle, int track, DMparams *params); 456 /* conversion/compression params set via DMparams */ 457 DMstatus afSetConversionParams (AFfilehandle, int track, DMparams *params); 458 /* conversion/compression params retrieved via DMparams */ 459 DMstatus afGetConversionParams (AFfilehandle, int track, DMparams *params); 460 #endif 461 462 /* track data: byte order */ 463 void afInitByteOrder (AFfilesetup, int track, int byteOrder); 464 int afGetByteOrder (AFfilehandle, int track); 465 int afSetVirtualByteOrder (AFfilehandle, int track, int byteOrder); 466 int afGetVirtualByteOrder (AFfilehandle, int track); 467 468 /* track data: number of channels */ 469 void afInitChannels (AFfilesetup, int track, int nchannels); 470 int afGetChannels (AFfilehandle, int track); 471 int afSetVirtualChannels (AFfilehandle, int track, int channelCount); 472 int afGetVirtualChannels (AFfilehandle, int track); 473 void afSetChannelMatrix (AFfilehandle, int track, double *matrix); 474 475 /* track data: sample format and sample width */ 476 void afInitSampleFormat (AFfilesetup, int track, int sampleFormat, 477 int sampleWidth); 478 void afGetSampleFormat (AFfilehandle file, int track, int *sampfmt, 479 int *sampwidth); 480 void afGetVirtualSampleFormat (AFfilehandle file, int track, int *sampfmt, 481 int *sampwidth); 482 int afSetVirtualSampleFormat (AFfilehandle, int track, 483 int sampleFormat, int sampleWidth); 484 void afGetVirtualSampleFormat (AFfilehandle, int track, 485 int *sampleFormat, int *sampleWidth); 486 487 /* track data: sampling rate */ 488 void afInitRate (AFfilesetup, int track, double rate); 489 double afGetRate (AFfilehandle, int track); 490 491 #if 0 492 int afSetVirtualRate (AFfilehandle, int track, double rate); 493 double afGetVirtualRate (AFfilehandle, int track); 494 #endif 495 496 /* track data: compression */ 497 void afInitCompression (AFfilesetup, int track, int compression); 498 #if 0 499 void afInitCompressionParams (AFfilesetup, int track, int compression 500 AUpvlist params, int parameterCount); 501 #endif 502 503 int afGetCompression (AFfilehandle, int track); 504 #if 0 505 void afGetCompressionParams (AFfilehandle, int track, int *compression, 506 AUpvlist params, int parameterCount); 507 508 int afSetVirtualCompression (AFfilesetup, int track, int compression); 509 void afSetVirtualCompressionParams (AFfilehandle, int track, int compression, 510 AUpvlist params, int parameterCount); 511 512 int afGetVirtualCompression (AFfilesetup, int track, int compression); 513 void afGetVirtualCompressionParams (AFfilehandle, int track, int *compression, 514 AUpvlist params, int parameterCount); 515 #endif 516 517 /* track data: pcm mapping */ 518 void afInitPCMMapping (AFfilesetup filesetup, int track, 519 double slope, double intercept, double minClip, double maxClip); 520 void afGetPCMMapping (AFfilehandle file, int track, 521 double *slope, double *intercept, double *minClip, double *maxClip); 522 /* NOTE: afSetTrackPCMMapping() is special--it does not set the virtual */ 523 /* format; it changes what the AF thinks the track format is! Be careful. */ 524 int afSetTrackPCMMapping (AFfilehandle file, int track, 525 double slope, double intercept, double minClip, double maxClip); 526 /* NOTE: afSetVirtualPCMMapping() is different from afSetTrackPCMMapping(): */ 527 /* see comment for afSetTrackPCMMapping(). */ 528 int afSetVirtualPCMMapping (AFfilehandle file, int track, 529 double slope, double intercept, double minClip, double maxClip); 530 void afGetVirtualPCMMapping (AFfilehandle file, int track, 531 double *slope, double *intercept, double *minClip, double *maxClip); 532 533 /* track data: data offset within the file */ 534 /* initialize for raw reading only */ 535 void afInitDataOffset(AFfilesetup, int track, AFfileoffset offset); 536 AFfileoffset afGetDataOffset (AFfilehandle, int track); 537 538 /* track data: count of frames in file */ 539 void afInitFrameCount (AFfilesetup, int track, AFframecount frameCount); 540 AFframecount afGetFrameCount (AFfilehandle file, int track); 541 542 /* loop operations */ 543 void afInitLoopIDs (AFfilesetup, int instid, int ids[], int nids); 544 int afGetLoopIDs (AFfilehandle, int instid, int loopids[]); 545 void afSetLoopMode (AFfilehandle, int instid, int loop, int mode); 546 int afGetLoopMode (AFfilehandle, int instid, int loopid); 547 int afSetLoopCount (AFfilehandle, int instid, int loop, int count); 548 int afGetLoopCount (AFfilehandle, int instid, int loopid); 549 void afSetLoopStart (AFfilehandle, int instid, int loopid, int markerid); 550 int afGetLoopStart (AFfilehandle, int instid, int loopid); 551 void afSetLoopEnd (AFfilehandle, int instid, int loopid, int markerid); 552 int afGetLoopEnd (AFfilehandle, int instid, int loopid); 553 554 int afSetLoopStartFrame (AFfilehandle, int instid, int loop, 555 AFframecount startFrame); 556 AFframecount afGetLoopStartFrame (AFfilehandle, int instid, int loop); 557 int afSetLoopEndFrame (AFfilehandle, int instid, int loop, 558 AFframecount startFrame); 559 AFframecount afGetLoopEndFrame (AFfilehandle, int instid, int loop); 560 561 void afSetLoopTrack (AFfilehandle, int instid, int loopid, int trackid); 562 int afGetLoopTrack (AFfilehandle, int instid, int loopid); 563 564 /* marker operations */ 565 void afInitMarkIDs (AFfilesetup, int trackid, int *ids, int nids); 566 int afGetMarkIDs (AFfilehandle file, int trackid, int markids[]); 567 void afSetMarkPosition (AFfilehandle file, int trackid, int markid, 568 AFframecount markpos); 569 AFframecount afGetMarkPosition (AFfilehandle file, int trackid, int markid); 570 void afInitMarkName (AFfilesetup, int trackid, int marker, const char *name); 571 void afInitMarkComment (AFfilesetup, int trackid, int marker, 572 const char *comment); 573 char *afGetMarkName (AFfilehandle file, int trackid, int markid); 574 char *afGetMarkComment (AFfilehandle file, int trackid, int markid); 575 576 /* instrument operations */ 577 void afInitInstIDs (AFfilesetup, int *ids, int nids); 578 int afGetInstIDs (AFfilehandle file, int *instids); 579 void afGetInstParams (AFfilehandle file, int instid, AUpvlist pvlist, 580 int nparams); 581 void afSetInstParams (AFfilehandle file, int instid, AUpvlist pvlist, 582 int nparams); 583 long afGetInstParamLong (AFfilehandle file, int instid, int param); 584 void afSetInstParamLong (AFfilehandle file, int instid, int param, long value); 585 586 /* miscellaneous data operations */ 587 void afInitMiscIDs (AFfilesetup, int *ids, int nids); 588 int afGetMiscIDs (AFfilehandle, int *ids); 589 void afInitMiscType (AFfilesetup, int miscellaneousid, int type); 590 int afGetMiscType (AFfilehandle, int miscellaneousid); 591 void afInitMiscSize (AFfilesetup, int miscellaneousid, int size); 592 int afGetMiscSize (AFfilehandle, int miscellaneousid); 593 int afWriteMisc (AFfilehandle, int miscellaneousid, void *buf, int bytes); 594 int afReadMisc (AFfilehandle, int miscellaneousid, void *buf, int bytes); 595 int afSeekMisc (AFfilehandle, int miscellaneousid, int offset); 596 597 #ifdef __cplusplus 598 } 599 #endif /* __cplusplus */ 600 601 #endif /* AUDIOFILE_H */ 602