AIFF.pas 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. {
  2. File: AIFF.p
  3. Contains: Definition of AIFF file format components.
  4. Version: Technology: System 8.5
  5. Release: Universal Interfaces 3.4.2
  6. Copyright: © 1989-2002 by Apple Computer, Inc., all rights reserved.
  7. Bugs?: For bug reports, consult the following page on
  8. the World Wide Web:
  9. http://www.freepascal.org/bugs.html
  10. }
  11. {
  12. Modified for use with Free Pascal
  13. Version 200
  14. Please report any bugs to <[email protected]>
  15. }
  16. {$mode macpas}
  17. {$packenum 1}
  18. {$macro on}
  19. {$inline on}
  20. {$CALLING MWPASCAL}
  21. unit AIFF;
  22. interface
  23. {$setc UNIVERSAL_INTERFACES_VERSION := $0342}
  24. {$setc GAP_INTERFACES_VERSION := $0200}
  25. {$ifc not defined USE_CFSTR_CONSTANT_MACROS}
  26. {$setc USE_CFSTR_CONSTANT_MACROS := TRUE}
  27. {$endc}
  28. {$ifc defined CPUPOWERPC and defined CPUI386}
  29. {$error Conflicting initial definitions for CPUPOWERPC and CPUI386}
  30. {$endc}
  31. {$ifc defined FPC_BIG_ENDIAN and defined FPC_LITTLE_ENDIAN}
  32. {$error Conflicting initial definitions for FPC_BIG_ENDIAN and FPC_LITTLE_ENDIAN}
  33. {$endc}
  34. {$ifc not defined __ppc__ and defined CPUPOWERPC}
  35. {$setc __ppc__ := 1}
  36. {$elsec}
  37. {$setc __ppc__ := 0}
  38. {$endc}
  39. {$ifc not defined __i386__ and defined CPUI386}
  40. {$setc __i386__ := 1}
  41. {$elsec}
  42. {$setc __i386__ := 0}
  43. {$endc}
  44. {$ifc defined __ppc__ and __ppc__ and defined __i386__ and __i386__}
  45. {$error Conflicting definitions for __ppc__ and __i386__}
  46. {$endc}
  47. {$ifc defined __ppc__ and __ppc__}
  48. {$setc TARGET_CPU_PPC := TRUE}
  49. {$setc TARGET_CPU_X86 := FALSE}
  50. {$elifc defined __i386__ and __i386__}
  51. {$setc TARGET_CPU_PPC := FALSE}
  52. {$setc TARGET_CPU_X86 := TRUE}
  53. {$elsec}
  54. {$error Neither __ppc__ nor __i386__ is defined.}
  55. {$endc}
  56. {$setc TARGET_CPU_PPC_64 := FALSE}
  57. {$ifc defined FPC_BIG_ENDIAN}
  58. {$setc TARGET_RT_BIG_ENDIAN := TRUE}
  59. {$setc TARGET_RT_LITTLE_ENDIAN := FALSE}
  60. {$elifc defined FPC_LITTLE_ENDIAN}
  61. {$setc TARGET_RT_BIG_ENDIAN := FALSE}
  62. {$setc TARGET_RT_LITTLE_ENDIAN := TRUE}
  63. {$elsec}
  64. {$error Neither FPC_BIG_ENDIAN nor FPC_LITTLE_ENDIAN are defined.}
  65. {$endc}
  66. {$setc ACCESSOR_CALLS_ARE_FUNCTIONS := TRUE}
  67. {$setc CALL_NOT_IN_CARBON := FALSE}
  68. {$setc OLDROUTINENAMES := FALSE}
  69. {$setc OPAQUE_TOOLBOX_STRUCTS := TRUE}
  70. {$setc OPAQUE_UPP_TYPES := TRUE}
  71. {$setc OTCARBONAPPLICATION := TRUE}
  72. {$setc OTKERNEL := FALSE}
  73. {$setc PM_USE_SESSION_APIS := TRUE}
  74. {$setc TARGET_API_MAC_CARBON := TRUE}
  75. {$setc TARGET_API_MAC_OS8 := FALSE}
  76. {$setc TARGET_API_MAC_OSX := TRUE}
  77. {$setc TARGET_CARBON := TRUE}
  78. {$setc TARGET_CPU_68K := FALSE}
  79. {$setc TARGET_CPU_MIPS := FALSE}
  80. {$setc TARGET_CPU_SPARC := FALSE}
  81. {$setc TARGET_OS_MAC := TRUE}
  82. {$setc TARGET_OS_UNIX := FALSE}
  83. {$setc TARGET_OS_WIN32 := FALSE}
  84. {$setc TARGET_RT_MAC_68881 := FALSE}
  85. {$setc TARGET_RT_MAC_CFM := FALSE}
  86. {$setc TARGET_RT_MAC_MACHO := TRUE}
  87. {$setc TYPED_FUNCTION_POINTERS := TRUE}
  88. {$setc TYPE_BOOL := FALSE}
  89. {$setc TYPE_EXTENDED := FALSE}
  90. {$setc TYPE_LONGLONG := TRUE}
  91. uses MacTypes;
  92. {$ALIGN MAC68K}
  93. const
  94. AIFFID = $41494646 (* 'AIFF' *);
  95. AIFCID = $41494643 (* 'AIFC' *);
  96. FormatVersionID = $46564552 (* 'FVER' *);
  97. CommonID = $434F4D4D (* 'COMM' *);
  98. FORMID = $464F524D (* 'FORM' *);
  99. SoundDataID = $53534E44 (* 'SSND' *);
  100. MarkerID = $4D41524B (* 'MARK' *);
  101. InstrumentID = $494E5354 (* 'INST' *);
  102. MIDIDataID = $4D494449 (* 'MIDI' *);
  103. AudioRecordingID = $41455344 (* 'AESD' *);
  104. ApplicationSpecificID = $4150504C (* 'APPL' *);
  105. CommentID = $434F4D54 (* 'COMT' *);
  106. NameID = $4E414D45 (* 'NAME' *);
  107. AuthorID = $41555448 (* 'AUTH' *);
  108. CopyrightID = $28632920 (* '(c) ' *);
  109. AnnotationID = $414E4E4F (* 'ANNO' *);
  110. NoLooping = 0;
  111. ForwardLooping = 1;
  112. ForwardBackwardLooping = 2;
  113. { AIFF-C Versions }
  114. AIFCVersion1 = $A2805140;
  115. { Compression Names }
  116. NoneName = 'not compressed';
  117. ACE2to1Name = 'ACE 2-to-1';
  118. ACE8to3Name = 'ACE 8-to-3';
  119. MACE3to1Name = 'MACE 3-to-1';
  120. MACE6to1Name = 'MACE 6-to-1';
  121. { Compression Types }
  122. NoneType = $4E4F4E45 (* 'NONE' *);
  123. ACE2Type = $41434532 (* 'ACE2' *);
  124. ACE8Type = $41434538 (* 'ACE8' *);
  125. MACE3Type = $4D414333 (* 'MAC3' *);
  126. MACE6Type = $4D414336 (* 'MAC6' *);
  127. type
  128. ID = UInt32;
  129. MarkerIdType = SInt16;
  130. ChunkHeaderPtr = ^ChunkHeader;
  131. ChunkHeader = record
  132. ckID: ID;
  133. ckSize: SInt32;
  134. end;
  135. ContainerChunkPtr = ^ContainerChunk;
  136. ContainerChunk = record
  137. ckID: ID;
  138. ckSize: SInt32;
  139. formType: ID;
  140. end;
  141. FormatVersionChunkPtr = ^FormatVersionChunk;
  142. FormatVersionChunk = record
  143. ckID: ID;
  144. ckSize: SInt32;
  145. timestamp: UInt32;
  146. end;
  147. CommonChunkPtr = ^CommonChunk;
  148. CommonChunk = record
  149. ckID: ID;
  150. ckSize: SInt32;
  151. numChannels: SInt16;
  152. numSampleFrames: UInt32;
  153. sampleSize: SInt16;
  154. sampleRate: extended80;
  155. end;
  156. ExtCommonChunkPtr = ^ExtCommonChunk;
  157. ExtCommonChunk = record
  158. ckID: ID;
  159. ckSize: SInt32;
  160. numChannels: SInt16;
  161. numSampleFrames: UInt32;
  162. sampleSize: SInt16;
  163. sampleRate: extended80;
  164. compressionType: ID;
  165. compressionName: SInt8; { variable length array, Pascal string }
  166. end;
  167. SoundDataChunkPtr = ^SoundDataChunk;
  168. SoundDataChunk = record
  169. ckID: ID;
  170. ckSize: SInt32;
  171. offset: UInt32;
  172. blockSize: UInt32;
  173. end;
  174. MarkerPtr = ^Marker;
  175. Marker = record
  176. id: MarkerIdType;
  177. position: UInt32;
  178. markerName: Str255;
  179. end;
  180. MarkerChunkPtr = ^MarkerChunk;
  181. MarkerChunk = record
  182. ckID: ID;
  183. ckSize: SInt32;
  184. numMarkers: UInt16;
  185. Markers: array [0..0] of Marker; { variable length array }
  186. end;
  187. AIFFLoopPtr = ^AIFFLoop;
  188. AIFFLoop = record
  189. playMode: SInt16;
  190. beginLoop: MarkerIdType;
  191. endLoop: MarkerIdType;
  192. end;
  193. InstrumentChunkPtr = ^InstrumentChunk;
  194. InstrumentChunk = packed record
  195. ckID: ID;
  196. ckSize: SInt32;
  197. baseFrequency: UInt8;
  198. detune: UInt8;
  199. lowFrequency: UInt8;
  200. highFrequency: UInt8;
  201. lowVelocity: UInt8;
  202. highVelocity: UInt8;
  203. gain: SInt16;
  204. sustainLoop: AIFFLoop;
  205. releaseLoop: AIFFLoop;
  206. end;
  207. MIDIDataChunkPtr = ^MIDIDataChunk;
  208. MIDIDataChunk = record
  209. ckID: ID;
  210. ckSize: SInt32;
  211. MIDIdata: SInt8; { variable length array }
  212. end;
  213. AudioRecordingChunkPtr = ^AudioRecordingChunk;
  214. AudioRecordingChunk = record
  215. ckID: ID;
  216. ckSize: SInt32;
  217. AESChannelStatus: packed array [0..23] of UInt8;
  218. end;
  219. ApplicationSpecificChunkPtr = ^ApplicationSpecificChunk;
  220. ApplicationSpecificChunk = record
  221. ckID: ID;
  222. ckSize: SInt32;
  223. applicationSignature: OSType;
  224. data: SInt8; { variable length array }
  225. end;
  226. CommentPtr = ^Comment;
  227. Comment = record
  228. timeStamp: UInt32;
  229. marker: MarkerIdType;
  230. count: UInt16;
  231. text: SInt8; { variable length array, Pascal string }
  232. end;
  233. CommentsChunkPtr = ^CommentsChunk;
  234. CommentsChunk = record
  235. ckID: ID;
  236. ckSize: SInt32;
  237. numComments: UInt16;
  238. comments: array [0..0] of Comment; { variable length array }
  239. end;
  240. TextChunkPtr = ^TextChunk;
  241. TextChunk = record
  242. ckID: ID;
  243. ckSize: SInt32;
  244. text: SInt8; { variable length array, Pascal string }
  245. end;
  246. {$ALIGN MAC68K}
  247. end.