Cider Isn't Darwin Emulation, Really
Something went wrong. Try again.
16 kB · 427 lines
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428#ifndef AUDIOFILE_H#define AUDIOFILE_H
#include <CoreServices/MacTypes.h>#include <CoreFoundation/CFURL.h>#include <CoreAudio/AudioHardware.h>
#ifdef __cplusplusextern "C" {#endif
typedef UInt32 AudioFileTypeID;enum { kAudioFileAIFFType = 'AIFF', kAudioFileAIFCType = 'AIFC', kAudioFileWAVEType = 'WAVE', kAudioFileRF64Type = 'RF64', kAudioFileSoundDesigner2Type = 'Sd2f', kAudioFileNextType = 'NeXT', kAudioFileMP3Type = 'MPG3', kAudioFileMP2Type = 'MPG2', kAudioFileMP1Type = 'MPG1', kAudioFileAC3Type = 'ac-3', kAudioFileAAC_ADTSType = 'adts', kAudioFileMPEG4Type = 'mp4f', kAudioFileM4AType = 'm4af', kAudioFileM4BType = 'm4bf', kAudioFileCAFType = 'caff', kAudioFile3GPType = '3gpp', kAudioFile3GP2Type = '3gp2', kAudioFileAMRType = 'amrf', kAudioFileFLACType = 'flac'};enum { kAudioFileUnspecifiedError = 'wht?', kAudioFileUnsupportedFileTypeError = 'typ?', kAudioFileUnsupportedDataFormatError = 'fmt?', kAudioFileUnsupportedPropertyError = 'pty?', kAudioFileBadPropertySizeError = '!siz', kAudioFilePermissionsError = 'prm?', kAudioFileNotOptimizedError = 'optm',
kAudioFileInvalidChunkError = 'chk?', kAudioFileDoesNotAllow64BitDataSizeError = 'off?', kAudioFileInvalidPacketOffsetError = 'pck?', kAudioFileInvalidFileError = 'dta?', kAudioFileOperationNotSupportedError = 0x6F703F3F,
kAudioFileNotOpenError = -38, kAudioFileEndOfFileError = -39, kAudioFilePositionError = -40, kAudioFileFileNotFoundError = -43};typedef UInt32 AudioFileFlags; enum { kAudioFileFlags_EraseFile = 1, kAudioFileFlags_DontPageAlignAudioData = 2};
typedef SInt8 AudioFilePermissions; enum { kAudioFileReadPermission = 0x01, kAudioFileWritePermission = 0x02, kAudioFileReadWritePermission = 0x03};typedef struct OpaqueAudioFileID *AudioFileID;
typedef UInt32 AudioFilePropertyID;enum { kAudioFileLoopDirection_NoLooping = 0, kAudioFileLoopDirection_Forward = 1, kAudioFileLoopDirection_ForwardAndBackward = 2, kAudioFileLoopDirection_Backward = 3};struct AudioFile_SMPTE_Time{ SInt8 mHours; UInt8 mMinutes; UInt8 mSeconds; UInt8 mFrames; UInt32 mSubFrameSampleOffset;};typedef struct AudioFile_SMPTE_Time AudioFile_SMPTE_Time;
enum { kAudioFileMarkerType_Generic = 0,};struct AudioFileMarker{ Float64 mFramePosition;
CFStringRef _Nullable mName; SInt32 mMarkerID;
AudioFile_SMPTE_Time mSMPTETime; UInt32 mType; UInt16 mReserved; UInt16 mChannel;};typedef struct AudioFileMarker AudioFileMarker;struct AudioFileMarkerList{ UInt32 mSMPTE_TimeType; UInt32 mNumberMarkers; AudioFileMarker mMarkers[1];};typedef struct AudioFileMarkerList AudioFileMarkerList;static __inline__ __attribute__((always_inline)) size_t NumBytesToNumAudioFileMarkers(size_t inNumBytes){ return (inNumBytes<__builtin_offsetof(AudioFileMarkerList, mMarkers[0]) ? 0 : (inNumBytes - __builtin_offsetof(AudioFileMarkerList, mMarkers[0])) / sizeof(AudioFileMarker));}static __inline__ __attribute__((always_inline)) size_t NumAudioFileMarkersToNumBytes(size_t inNumMarkers){ return (__builtin_offsetof(AudioFileMarkerList, mMarkers) + (inNumMarkers) * sizeof(AudioFileMarker));}typedef UInt32 AudioFileRegionFlags; enum { kAudioFileRegionFlag_LoopEnable = 1, kAudioFileRegionFlag_PlayForward = 2, kAudioFileRegionFlag_PlayBackward = 4};struct AudioFileRegion{ UInt32 mRegionID; CFStringRef mName; AudioFileRegionFlags mFlags; UInt32 mNumberMarkers; AudioFileMarker mMarkers[1];};typedef struct AudioFileRegion AudioFileRegion;struct AudioFileRegionList{ UInt32 mSMPTE_TimeType; UInt32 mNumberRegions; AudioFileRegion mRegions[1];};typedef struct AudioFileRegionList AudioFileRegionList;static __inline__ __attribute__((always_inline)) AudioFileRegion *NextAudioFileRegion(const AudioFileRegion *inAFRegionPtr){ return ((AudioFileRegion*)((char*)inAFRegionPtr + __builtin_offsetof(AudioFileRegion, mMarkers) + (inAFRegionPtr->mNumberMarkers)*sizeof(AudioFileMarker)));}struct AudioFramePacketTranslation{ SInt64 mFrame; SInt64 mPacket; UInt32 mFrameOffsetInPacket;};typedef struct AudioFramePacketTranslation AudioFramePacketTranslation;typedef UInt32 AudioBytePacketTranslationFlags; enum { kBytePacketTranslationFlag_IsEstimate = 1};struct AudioBytePacketTranslation{ SInt64 mByte; SInt64 mPacket; UInt32 mByteOffsetInPacket; AudioBytePacketTranslationFlags mFlags;};typedef struct AudioBytePacketTranslation AudioBytePacketTranslation;struct AudioFilePacketTableInfo{ SInt64 mNumberValidFrames; SInt32 mPrimingFrames; SInt32 mRemainderFrames;};typedef struct AudioFilePacketTableInfo AudioFilePacketTableInfo;extern OSStatusAudioFileCreateWithURL (CFURLRef inFileRef, AudioFileTypeID inFileType, const AudioStreamBasicDescription *inFormat, AudioFileFlags inFlags, AudioFileID _Nullable * _Nonnull outAudioFile);extern OSStatusAudioFileOpenURL ( CFURLRef inFileRef, AudioFilePermissions inPermissions, AudioFileTypeID inFileTypeHint, AudioFileID _Nullable * _Nonnull outAudioFile);typedef OSStatus (*AudioFile_ReadProc)( void * inClientData, SInt64 inPosition, UInt32 requestCount, void * buffer, UInt32 * actualCount);typedef OSStatus (*AudioFile_WriteProc)( void * inClientData, SInt64 inPosition, UInt32 requestCount, const void *buffer, UInt32 * actualCount);typedef SInt64 (*AudioFile_GetSizeProc)( void * inClientData);typedef OSStatus (*AudioFile_SetSizeProc)( void * inClientData, SInt64 inSize);extern OSStatusAudioFileInitializeWithCallbacks ( void * inClientData, AudioFile_ReadProc inReadFunc, AudioFile_WriteProc inWriteFunc, AudioFile_GetSizeProc inGetSizeFunc, AudioFile_SetSizeProc inSetSizeFunc, AudioFileTypeID inFileType, const AudioStreamBasicDescription *inFormat, AudioFileFlags inFlags, AudioFileID _Nullable * _Nonnull outAudioFile);extern OSStatusAudioFileOpenWithCallbacks ( void * inClientData, AudioFile_ReadProc inReadFunc, AudioFile_WriteProc _Nullable inWriteFunc, AudioFile_GetSizeProc inGetSizeFunc, AudioFile_SetSizeProc _Nullable inSetSizeFunc, AudioFileTypeID inFileTypeHint, AudioFileID _Nullable * _Nonnull outAudioFile);extern OSStatusAudioFileClose (AudioFileID inAudioFile);extern OSStatusAudioFileOptimize (AudioFileID inAudioFile);extern OSStatusAudioFileReadBytes ( AudioFileID inAudioFile, Boolean inUseCache, SInt64 inStartingByte, UInt32 *ioNumBytes, void *outBuffer);extern OSStatusAudioFileWriteBytes ( AudioFileID inAudioFile, Boolean inUseCache, SInt64 inStartingByte, UInt32 *ioNumBytes, const void *inBuffer);extern OSStatusAudioFileReadPacketData ( AudioFileID inAudioFile, Boolean inUseCache, UInt32 * ioNumBytes, AudioStreamPacketDescription * _Nullable outPacketDescriptions, SInt64 inStartingPacket, UInt32 * ioNumPackets, void * _Nullable outBuffer);extern OSStatusAudioFileReadPackets ( AudioFileID inAudioFile, Boolean inUseCache, UInt32 * outNumBytes, AudioStreamPacketDescription * _Nullable outPacketDescriptions, SInt64 inStartingPacket, UInt32 * ioNumPackets, void * _Nullable outBuffer);extern OSStatusAudioFileWritePackets ( AudioFileID inAudioFile, Boolean inUseCache, UInt32 inNumBytes, const AudioStreamPacketDescription * _Nullable inPacketDescriptions, SInt64 inStartingPacket, UInt32 *ioNumPackets, const void *inBuffer);extern OSStatusAudioFileCountUserData ( AudioFileID inAudioFile, UInt32 inUserDataID, UInt32 *outNumberItems);extern OSStatusAudioFileGetUserDataSize ( AudioFileID inAudioFile, UInt32 inUserDataID, UInt32 inIndex, UInt32 *outUserDataSize);extern OSStatusAudioFileGetUserData ( AudioFileID inAudioFile, UInt32 inUserDataID, UInt32 inIndex, UInt32 *ioUserDataSize, void *outUserData);extern OSStatusAudioFileSetUserData ( AudioFileID inAudioFile, UInt32 inUserDataID, UInt32 inIndex, UInt32 inUserDataSize, const void *inUserData);extern OSStatusAudioFileRemoveUserData ( AudioFileID inAudioFile, UInt32 inUserDataID, UInt32 inIndex);enum{ kAudioFilePropertyFileFormat = 'ffmt', kAudioFilePropertyDataFormat = 'dfmt', kAudioFilePropertyIsOptimized = 'optm', kAudioFilePropertyMagicCookieData = 'mgic', kAudioFilePropertyAudioDataByteCount = 'bcnt', kAudioFilePropertyAudioDataPacketCount = 'pcnt', kAudioFilePropertyMaximumPacketSize = 'psze', kAudioFilePropertyDataOffset = 'doff', kAudioFilePropertyChannelLayout = 'cmap', kAudioFilePropertyDeferSizeUpdates = 'dszu', kAudioFilePropertyDataFormatName = 'fnme', kAudioFilePropertyMarkerList = 'mkls', kAudioFilePropertyRegionList = 'rgls', kAudioFilePropertyPacketToFrame = 'pkfr', kAudioFilePropertyFrameToPacket = 'frpk', kAudioFilePropertyPacketToByte = 'pkby', kAudioFilePropertyByteToPacket = 'bypk', kAudioFilePropertyChunkIDs = 'chid', kAudioFilePropertyInfoDictionary = 'info', kAudioFilePropertyPacketTableInfo = 'pnfo', kAudioFilePropertyFormatList = 'flst', kAudioFilePropertyPacketSizeUpperBound = 'pkub', kAudioFilePropertyReserveDuration = 'rsrv', kAudioFilePropertyEstimatedDuration = 'edur', kAudioFilePropertyBitRate = 'brat', kAudioFilePropertyID3Tag = 'id3t', kAudioFilePropertySourceBitDepth = 'sbtd', kAudioFilePropertyAlbumArtwork = 'aart', kAudioFilePropertyAudioTrackCount = 'atct', kAudioFilePropertyUseAudioTrack = 'uatk'};extern OSStatusAudioFileGetPropertyInfo( AudioFileID inAudioFile, AudioFilePropertyID inPropertyID, UInt32 * _Nullable outDataSize, UInt32 * _Nullable isWritable);extern OSStatusAudioFileGetProperty( AudioFileID inAudioFile, AudioFilePropertyID inPropertyID, UInt32 *ioDataSize, void *outPropertyData);extern OSStatusAudioFileSetProperty( AudioFileID inAudioFile, AudioFilePropertyID inPropertyID, UInt32 inDataSize, const void *inPropertyData);enum{ kAudioFileGlobalInfo_ReadableTypes = 'afrf', kAudioFileGlobalInfo_WritableTypes = 'afwf', kAudioFileGlobalInfo_FileTypeName = 'ftnm', kAudioFileGlobalInfo_AvailableStreamDescriptionsForFormat = 'sdid', kAudioFileGlobalInfo_AvailableFormatIDs = 'fmid',
kAudioFileGlobalInfo_AllExtensions = 'alxt', kAudioFileGlobalInfo_AllHFSTypeCodes = 'ahfs', kAudioFileGlobalInfo_AllUTIs = 'auti', kAudioFileGlobalInfo_AllMIMETypes = 'amim',
kAudioFileGlobalInfo_ExtensionsForType = 'fext', kAudioFileGlobalInfo_HFSTypeCodesForType = 'fhfs', kAudioFileGlobalInfo_UTIsForType = 'futi', kAudioFileGlobalInfo_MIMETypesForType = 'fmim',
kAudioFileGlobalInfo_TypesForMIMEType = 'tmim', kAudioFileGlobalInfo_TypesForUTI = 'tuti', kAudioFileGlobalInfo_TypesForHFSTypeCode = 'thfs', kAudioFileGlobalInfo_TypesForExtension = 'text'};struct AudioFileTypeAndFormatID{ AudioFileTypeID mFileType; UInt32 mFormatID;};typedef struct AudioFileTypeAndFormatID AudioFileTypeAndFormatID;extern OSStatusAudioFileGetGlobalInfoSize( AudioFilePropertyID inPropertyID, UInt32 inSpecifierSize, void * _Nullable inSpecifier, UInt32 *outDataSize);extern OSStatusAudioFileGetGlobalInfo( AudioFilePropertyID inPropertyID, UInt32 inSpecifierSize, void * _Nullable inSpecifier, UInt32 *ioDataSize, void *outPropertyData);
struct FSRef;extern OSStatusAudioFileCreate ( const struct FSRef *inParentRef, CFStringRef inFileName, AudioFileTypeID inFileType, const AudioStreamBasicDescription *inFormat, AudioFileFlags inFlags, struct FSRef *outNewFileRef, AudioFileID _Nullable * _Nonnull outAudioFile);extern OSStatusAudioFileInitialize ( const struct FSRef *inFileRef, AudioFileTypeID inFileType, const AudioStreamBasicDescription *inFormat, AudioFileFlags inFlags, AudioFileID _Nullable * _Nonnull outAudioFile);extern OSStatusAudioFileOpen ( const struct FSRef *inFileRef, AudioFilePermissions inPermissions, AudioFileTypeID inFileTypeHint, AudioFileID _Nullable * _Nonnull outAudioFile);
#define kAFInfoDictionary_Album "album"#define kAFInfoDictionary_ApproximateDurationInSeconds "approximate duration in seconds"#define kAFInfoDictionary_Artist "artist"#define kAFInfoDictionary_ChannelLayout "channel layout"#define kAFInfoDictionary_Comments "comments"#define kAFInfoDictionary_Composer "composer"#define kAFInfoDictionary_Copyright "copyright"#define kAFInfoDictionary_EncodingApplication "encoding application"#define kAFInfoDictionary_Genre "genre"#define kAFInfoDictionary_ISRC "ISRC" // International Standard Recording Code#define kAFInfoDictionary_KeySignature "key signature"#define kAFInfoDictionary_Lyricist "lyricist"#define kAFInfoDictionary_NominalBitRate "nominal bit rate"#define kAFInfoDictionary_RecordedDate "recorded date"#define kAFInfoDictionary_SourceBitDepth "source bit depth"#define kAFInfoDictionary_SourceEncoder "source encoder"#define kAFInfoDictionary_SubTitle "subtitle"#define kAFInfoDictionary_Tempo "tempo"#define kAFInfoDictionary_TimeSignature "time signature"#define kAFInfoDictionary_Title "title"#define kAFInfoDictionary_TrackNumber "track number"#define kAFInfoDictionary_Year "year"
#ifdef __cplusplus}#endif
#endif