this repo has no description
1#ifndef AUDIOFILE_H
2#define AUDIOFILE_H
3
4#include <CoreServices/MacTypes.h>
5#include <CoreFoundation/CFURL.h>
6#include <CoreAudio/AudioHardware.h>
7
8#ifdef __cplusplus
9extern "C" {
10#endif
11
12typedef UInt32 AudioFileTypeID;
13enum {
14 kAudioFileAIFFType = 'AIFF',
15 kAudioFileAIFCType = 'AIFC',
16 kAudioFileWAVEType = 'WAVE',
17 kAudioFileRF64Type = 'RF64',
18 kAudioFileSoundDesigner2Type = 'Sd2f',
19 kAudioFileNextType = 'NeXT',
20 kAudioFileMP3Type = 'MPG3',
21 kAudioFileMP2Type = 'MPG2',
22 kAudioFileMP1Type = 'MPG1',
23 kAudioFileAC3Type = 'ac-3',
24 kAudioFileAAC_ADTSType = 'adts',
25 kAudioFileMPEG4Type = 'mp4f',
26 kAudioFileM4AType = 'm4af',
27 kAudioFileM4BType = 'm4bf',
28 kAudioFileCAFType = 'caff',
29 kAudioFile3GPType = '3gpp',
30 kAudioFile3GP2Type = '3gp2',
31 kAudioFileAMRType = 'amrf',
32 kAudioFileFLACType = 'flac'
33};
34enum {
35 kAudioFileUnspecifiedError = 'wht?',
36 kAudioFileUnsupportedFileTypeError = 'typ?',
37 kAudioFileUnsupportedDataFormatError = 'fmt?',
38 kAudioFileUnsupportedPropertyError = 'pty?',
39 kAudioFileBadPropertySizeError = '!siz',
40 kAudioFilePermissionsError = 'prm?',
41 kAudioFileNotOptimizedError = 'optm',
42
43 kAudioFileInvalidChunkError = 'chk?',
44 kAudioFileDoesNotAllow64BitDataSizeError = 'off?',
45 kAudioFileInvalidPacketOffsetError = 'pck?',
46 kAudioFileInvalidFileError = 'dta?',
47 kAudioFileOperationNotSupportedError = 0x6F703F3F,
48
49 kAudioFileNotOpenError = -38,
50 kAudioFileEndOfFileError = -39,
51 kAudioFilePositionError = -40,
52 kAudioFileFileNotFoundError = -43
53};
54typedef UInt32 AudioFileFlags; enum {
55 kAudioFileFlags_EraseFile = 1,
56 kAudioFileFlags_DontPageAlignAudioData = 2
57};
58
59typedef SInt8 AudioFilePermissions; enum {
60 kAudioFileReadPermission = 0x01,
61 kAudioFileWritePermission = 0x02,
62 kAudioFileReadWritePermission = 0x03
63};
64typedef struct OpaqueAudioFileID *AudioFileID;
65
66
67
68
69typedef UInt32 AudioFilePropertyID;
70enum {
71 kAudioFileLoopDirection_NoLooping = 0,
72 kAudioFileLoopDirection_Forward = 1,
73 kAudioFileLoopDirection_ForwardAndBackward = 2,
74 kAudioFileLoopDirection_Backward = 3
75};
76struct AudioFile_SMPTE_Time
77{
78 SInt8 mHours;
79 UInt8 mMinutes;
80 UInt8 mSeconds;
81 UInt8 mFrames;
82 UInt32 mSubFrameSampleOffset;
83};
84typedef struct AudioFile_SMPTE_Time AudioFile_SMPTE_Time;
85
86
87
88
89
90
91
92enum {
93 kAudioFileMarkerType_Generic = 0,
94};
95struct AudioFileMarker
96{
97 Float64 mFramePosition;
98
99 CFStringRef _Nullable mName;
100 SInt32 mMarkerID;
101
102 AudioFile_SMPTE_Time mSMPTETime;
103 UInt32 mType;
104 UInt16 mReserved;
105 UInt16 mChannel;
106};
107typedef struct AudioFileMarker AudioFileMarker;
108struct AudioFileMarkerList
109{
110 UInt32 mSMPTE_TimeType;
111 UInt32 mNumberMarkers;
112 AudioFileMarker mMarkers[1];
113};
114typedef struct AudioFileMarkerList AudioFileMarkerList;
115static __inline__ __attribute__((always_inline)) size_t NumBytesToNumAudioFileMarkers(size_t inNumBytes)
116{
117 return (inNumBytes<__builtin_offsetof(AudioFileMarkerList, mMarkers[0]) ? 0 : (inNumBytes - __builtin_offsetof(AudioFileMarkerList, mMarkers[0])) / sizeof(AudioFileMarker));
118}
119static __inline__ __attribute__((always_inline)) size_t NumAudioFileMarkersToNumBytes(size_t inNumMarkers)
120{
121 return (__builtin_offsetof(AudioFileMarkerList, mMarkers) + (inNumMarkers) * sizeof(AudioFileMarker));
122}
123typedef UInt32 AudioFileRegionFlags; enum {
124 kAudioFileRegionFlag_LoopEnable = 1,
125 kAudioFileRegionFlag_PlayForward = 2,
126 kAudioFileRegionFlag_PlayBackward = 4
127};
128struct AudioFileRegion
129{
130 UInt32 mRegionID;
131 CFStringRef mName;
132 AudioFileRegionFlags mFlags;
133 UInt32 mNumberMarkers;
134 AudioFileMarker mMarkers[1];
135};
136typedef struct AudioFileRegion AudioFileRegion;
137struct AudioFileRegionList
138{
139 UInt32 mSMPTE_TimeType;
140 UInt32 mNumberRegions;
141 AudioFileRegion mRegions[1];
142};
143typedef struct AudioFileRegionList AudioFileRegionList;
144static __inline__ __attribute__((always_inline)) AudioFileRegion *NextAudioFileRegion(const AudioFileRegion *inAFRegionPtr)
145{
146 return ((AudioFileRegion*)((char*)inAFRegionPtr + __builtin_offsetof(AudioFileRegion, mMarkers) + (inAFRegionPtr->mNumberMarkers)*sizeof(AudioFileMarker)));
147}
148struct AudioFramePacketTranslation
149{
150 SInt64 mFrame;
151 SInt64 mPacket;
152 UInt32 mFrameOffsetInPacket;
153};
154typedef struct AudioFramePacketTranslation AudioFramePacketTranslation;
155typedef UInt32 AudioBytePacketTranslationFlags; enum {
156 kBytePacketTranslationFlag_IsEstimate = 1
157};
158struct AudioBytePacketTranslation
159{
160 SInt64 mByte;
161 SInt64 mPacket;
162 UInt32 mByteOffsetInPacket;
163 AudioBytePacketTranslationFlags mFlags;
164};
165typedef struct AudioBytePacketTranslation AudioBytePacketTranslation;
166struct AudioFilePacketTableInfo
167{
168 SInt64 mNumberValidFrames;
169 SInt32 mPrimingFrames;
170 SInt32 mRemainderFrames;
171};
172typedef struct AudioFilePacketTableInfo AudioFilePacketTableInfo;
173extern OSStatus
174AudioFileCreateWithURL (CFURLRef inFileRef,
175 AudioFileTypeID inFileType,
176 const AudioStreamBasicDescription *inFormat,
177 AudioFileFlags inFlags,
178 AudioFileID _Nullable * _Nonnull outAudioFile);
179extern OSStatus
180AudioFileOpenURL ( CFURLRef inFileRef,
181 AudioFilePermissions inPermissions,
182 AudioFileTypeID inFileTypeHint,
183 AudioFileID _Nullable * _Nonnull outAudioFile);
184typedef OSStatus (*AudioFile_ReadProc)(
185 void * inClientData,
186 SInt64 inPosition,
187 UInt32 requestCount,
188 void * buffer,
189 UInt32 * actualCount);
190typedef OSStatus (*AudioFile_WriteProc)(
191 void * inClientData,
192 SInt64 inPosition,
193 UInt32 requestCount,
194 const void *buffer,
195 UInt32 * actualCount);
196typedef SInt64 (*AudioFile_GetSizeProc)(
197 void * inClientData);
198typedef OSStatus (*AudioFile_SetSizeProc)(
199 void * inClientData,
200 SInt64 inSize);
201extern OSStatus
202AudioFileInitializeWithCallbacks (
203 void * inClientData,
204 AudioFile_ReadProc inReadFunc,
205 AudioFile_WriteProc inWriteFunc,
206 AudioFile_GetSizeProc inGetSizeFunc,
207 AudioFile_SetSizeProc inSetSizeFunc,
208 AudioFileTypeID inFileType,
209 const AudioStreamBasicDescription *inFormat,
210 AudioFileFlags inFlags,
211 AudioFileID _Nullable * _Nonnull outAudioFile);
212extern OSStatus
213AudioFileOpenWithCallbacks (
214 void * inClientData,
215 AudioFile_ReadProc inReadFunc,
216 AudioFile_WriteProc _Nullable inWriteFunc,
217 AudioFile_GetSizeProc inGetSizeFunc,
218 AudioFile_SetSizeProc _Nullable inSetSizeFunc,
219 AudioFileTypeID inFileTypeHint,
220 AudioFileID _Nullable * _Nonnull outAudioFile);
221extern OSStatus
222AudioFileClose (AudioFileID inAudioFile);
223extern OSStatus
224AudioFileOptimize (AudioFileID inAudioFile);
225extern OSStatus
226AudioFileReadBytes ( AudioFileID inAudioFile,
227 Boolean inUseCache,
228 SInt64 inStartingByte,
229 UInt32 *ioNumBytes,
230 void *outBuffer);
231extern OSStatus
232AudioFileWriteBytes ( AudioFileID inAudioFile,
233 Boolean inUseCache,
234 SInt64 inStartingByte,
235 UInt32 *ioNumBytes,
236 const void *inBuffer);
237extern OSStatus
238AudioFileReadPacketData ( AudioFileID inAudioFile,
239 Boolean inUseCache,
240 UInt32 * ioNumBytes,
241 AudioStreamPacketDescription * _Nullable outPacketDescriptions,
242 SInt64 inStartingPacket,
243 UInt32 * ioNumPackets,
244 void * _Nullable outBuffer);
245extern OSStatus
246AudioFileReadPackets ( AudioFileID inAudioFile,
247 Boolean inUseCache,
248 UInt32 * outNumBytes,
249 AudioStreamPacketDescription * _Nullable outPacketDescriptions,
250 SInt64 inStartingPacket,
251 UInt32 * ioNumPackets,
252 void * _Nullable outBuffer);
253extern OSStatus
254AudioFileWritePackets ( AudioFileID inAudioFile,
255 Boolean inUseCache,
256 UInt32 inNumBytes,
257 const AudioStreamPacketDescription * _Nullable inPacketDescriptions,
258 SInt64 inStartingPacket,
259 UInt32 *ioNumPackets,
260 const void *inBuffer);
261extern OSStatus
262AudioFileCountUserData ( AudioFileID inAudioFile,
263 UInt32 inUserDataID,
264 UInt32 *outNumberItems);
265extern OSStatus
266AudioFileGetUserDataSize ( AudioFileID inAudioFile,
267 UInt32 inUserDataID,
268 UInt32 inIndex,
269 UInt32 *outUserDataSize);
270extern OSStatus
271AudioFileGetUserData ( AudioFileID inAudioFile,
272 UInt32 inUserDataID,
273 UInt32 inIndex,
274 UInt32 *ioUserDataSize,
275 void *outUserData);
276extern OSStatus
277AudioFileSetUserData ( AudioFileID inAudioFile,
278 UInt32 inUserDataID,
279 UInt32 inIndex,
280 UInt32 inUserDataSize,
281 const void *inUserData);
282extern OSStatus
283AudioFileRemoveUserData ( AudioFileID inAudioFile,
284 UInt32 inUserDataID,
285 UInt32 inIndex);
286enum
287{
288 kAudioFilePropertyFileFormat = 'ffmt',
289 kAudioFilePropertyDataFormat = 'dfmt',
290 kAudioFilePropertyIsOptimized = 'optm',
291 kAudioFilePropertyMagicCookieData = 'mgic',
292 kAudioFilePropertyAudioDataByteCount = 'bcnt',
293 kAudioFilePropertyAudioDataPacketCount = 'pcnt',
294 kAudioFilePropertyMaximumPacketSize = 'psze',
295 kAudioFilePropertyDataOffset = 'doff',
296 kAudioFilePropertyChannelLayout = 'cmap',
297 kAudioFilePropertyDeferSizeUpdates = 'dszu',
298 kAudioFilePropertyDataFormatName = 'fnme',
299 kAudioFilePropertyMarkerList = 'mkls',
300 kAudioFilePropertyRegionList = 'rgls',
301 kAudioFilePropertyPacketToFrame = 'pkfr',
302 kAudioFilePropertyFrameToPacket = 'frpk',
303 kAudioFilePropertyPacketToByte = 'pkby',
304 kAudioFilePropertyByteToPacket = 'bypk',
305 kAudioFilePropertyChunkIDs = 'chid',
306 kAudioFilePropertyInfoDictionary = 'info',
307 kAudioFilePropertyPacketTableInfo = 'pnfo',
308 kAudioFilePropertyFormatList = 'flst',
309 kAudioFilePropertyPacketSizeUpperBound = 'pkub',
310 kAudioFilePropertyReserveDuration = 'rsrv',
311 kAudioFilePropertyEstimatedDuration = 'edur',
312 kAudioFilePropertyBitRate = 'brat',
313 kAudioFilePropertyID3Tag = 'id3t',
314 kAudioFilePropertySourceBitDepth = 'sbtd',
315 kAudioFilePropertyAlbumArtwork = 'aart',
316 kAudioFilePropertyAudioTrackCount = 'atct',
317 kAudioFilePropertyUseAudioTrack = 'uatk'
318};
319extern OSStatus
320AudioFileGetPropertyInfo( AudioFileID inAudioFile,
321 AudioFilePropertyID inPropertyID,
322 UInt32 * _Nullable outDataSize,
323 UInt32 * _Nullable isWritable);
324extern OSStatus
325AudioFileGetProperty( AudioFileID inAudioFile,
326 AudioFilePropertyID inPropertyID,
327 UInt32 *ioDataSize,
328 void *outPropertyData);
329extern OSStatus
330AudioFileSetProperty( AudioFileID inAudioFile,
331 AudioFilePropertyID inPropertyID,
332 UInt32 inDataSize,
333 const void *inPropertyData);
334enum
335{
336 kAudioFileGlobalInfo_ReadableTypes = 'afrf',
337 kAudioFileGlobalInfo_WritableTypes = 'afwf',
338 kAudioFileGlobalInfo_FileTypeName = 'ftnm',
339 kAudioFileGlobalInfo_AvailableStreamDescriptionsForFormat = 'sdid',
340 kAudioFileGlobalInfo_AvailableFormatIDs = 'fmid',
341
342 kAudioFileGlobalInfo_AllExtensions = 'alxt',
343 kAudioFileGlobalInfo_AllHFSTypeCodes = 'ahfs',
344 kAudioFileGlobalInfo_AllUTIs = 'auti',
345 kAudioFileGlobalInfo_AllMIMETypes = 'amim',
346
347 kAudioFileGlobalInfo_ExtensionsForType = 'fext',
348 kAudioFileGlobalInfo_HFSTypeCodesForType = 'fhfs',
349 kAudioFileGlobalInfo_UTIsForType = 'futi',
350 kAudioFileGlobalInfo_MIMETypesForType = 'fmim',
351
352 kAudioFileGlobalInfo_TypesForMIMEType = 'tmim',
353 kAudioFileGlobalInfo_TypesForUTI = 'tuti',
354 kAudioFileGlobalInfo_TypesForHFSTypeCode = 'thfs',
355 kAudioFileGlobalInfo_TypesForExtension = 'text'
356};
357struct AudioFileTypeAndFormatID
358{
359 AudioFileTypeID mFileType;
360 UInt32 mFormatID;
361};
362typedef struct AudioFileTypeAndFormatID AudioFileTypeAndFormatID;
363extern OSStatus
364AudioFileGetGlobalInfoSize( AudioFilePropertyID inPropertyID,
365 UInt32 inSpecifierSize,
366 void * _Nullable inSpecifier,
367 UInt32 *outDataSize);
368extern OSStatus
369AudioFileGetGlobalInfo( AudioFilePropertyID inPropertyID,
370 UInt32 inSpecifierSize,
371 void * _Nullable inSpecifier,
372 UInt32 *ioDataSize,
373 void *outPropertyData);
374
375
376
377struct FSRef;
378extern OSStatus
379AudioFileCreate ( const struct FSRef *inParentRef,
380 CFStringRef inFileName,
381 AudioFileTypeID inFileType,
382 const AudioStreamBasicDescription *inFormat,
383 AudioFileFlags inFlags,
384 struct FSRef *outNewFileRef,
385 AudioFileID _Nullable * _Nonnull outAudioFile);
386extern OSStatus
387AudioFileInitialize ( const struct FSRef *inFileRef,
388 AudioFileTypeID inFileType,
389 const AudioStreamBasicDescription *inFormat,
390 AudioFileFlags inFlags,
391 AudioFileID _Nullable * _Nonnull outAudioFile);
392extern OSStatus
393AudioFileOpen ( const struct FSRef *inFileRef,
394 AudioFilePermissions inPermissions,
395 AudioFileTypeID inFileTypeHint,
396 AudioFileID _Nullable * _Nonnull outAudioFile);
397
398#define kAFInfoDictionary_Album "album"
399#define kAFInfoDictionary_ApproximateDurationInSeconds "approximate duration in seconds"
400#define kAFInfoDictionary_Artist "artist"
401#define kAFInfoDictionary_ChannelLayout "channel layout"
402#define kAFInfoDictionary_Comments "comments"
403#define kAFInfoDictionary_Composer "composer"
404#define kAFInfoDictionary_Copyright "copyright"
405#define kAFInfoDictionary_EncodingApplication "encoding application"
406#define kAFInfoDictionary_Genre "genre"
407#define kAFInfoDictionary_ISRC "ISRC" // International Standard Recording Code
408#define kAFInfoDictionary_KeySignature "key signature"
409#define kAFInfoDictionary_Lyricist "lyricist"
410#define kAFInfoDictionary_NominalBitRate "nominal bit rate"
411#define kAFInfoDictionary_RecordedDate "recorded date"
412#define kAFInfoDictionary_SourceBitDepth "source bit depth"
413#define kAFInfoDictionary_SourceEncoder "source encoder"
414#define kAFInfoDictionary_SubTitle "subtitle"
415#define kAFInfoDictionary_Tempo "tempo"
416#define kAFInfoDictionary_TimeSignature "time signature"
417#define kAFInfoDictionary_Title "title"
418#define kAFInfoDictionary_TrackNumber "track number"
419#define kAFInfoDictionary_Year "year"
420
421
422#ifdef __cplusplus
423}
424#endif
425
426#endif
427