id3v2.4.0-structure.txt 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732
  1. Informal standard M. Nilsson
  2. Document: id3v2.4.0-structure.txt 16 September 2001
  3. ID3 tag version 2.4.0 - Main Structure
  4. Status of this document
  5. This document is an informal standard and replaces the ID3v2.3.0
  6. standard [ID3v2]. A formal standard will use another revision number
  7. even if the content is identical to document. The contents in this
  8. document may change for clarifications but never for added or altered
  9. functionallity.
  10. Distribution of this document is unlimited.
  11. Abstract
  12. This document describes the main structure of ID3v2.4.0, which is a
  13. revised version of the ID3v2 informal standard [ID3v2] version
  14. 2.3.0. The ID3v2 offers a flexible way of storing audio meta
  15. information within the audio file itself. The information may be
  16. technical information, such as equalisation curves, as well as
  17. title, performer, copyright etc.
  18. ID3v2.4.0 is meant to be as close as possible to ID3v2.3.0 in order
  19. to allow for implementations to be revised as easily as possible.
  20. 1. Table of contents
  21. Status of this document
  22. Abstract
  23. 1. Table of contents
  24. 2. Conventions in this document
  25. 2. Standard overview
  26. 3. ID3v2 overview
  27. 3.1. ID3v2 header
  28. 3.2. ID3v2 extended header
  29. 3.3. Padding
  30. 3.4. ID3v2 footer
  31. 4. ID3v2 frames overview
  32. 4.1. Frame header flags
  33. 4.1.1. Frame status flags
  34. 4.1.2. Frame format flags
  35. 5. Tag location
  36. 6. Unsynchronisation
  37. 6.1. The unsynchronisation scheme
  38. 6.2. Synchsafe integers
  39. 7. Copyright
  40. 8. References
  41. 9. Author's Address
  42. 2. Conventions in this document
  43. Text within "" is a text string exactly as it appears in a tag.
  44. Numbers preceded with $ are hexadecimal and numbers preceded with %
  45. are binary. $xx is used to indicate a byte with unknown content. %x
  46. is used to indicate a bit with unknown content. The most significant
  47. bit (MSB) of a byte is called 'bit 7' and the least significant bit
  48. (LSB) is called 'bit 0'.
  49. A tag is the whole tag described in this document. A frame is a block
  50. of information in the tag. The tag consists of a header, frames and
  51. optional padding. A field is a piece of information; one value, a
  52. string etc. A numeric string is a string that consists of the
  53. characters "0123456789" only.
  54. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
  55. "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
  56. document are to be interpreted as described in RFC 2119 [KEYWORDS].
  57. 3. ID3v2 overview
  58. ID3v2 is a general tagging format for audio, which makes it possible
  59. to store meta data about the audio inside the audio file itself. The
  60. ID3 tag described in this document is mainly targeted at files
  61. encoded with MPEG-1/2 layer I, MPEG-1/2 layer II, MPEG-1/2 layer III
  62. and MPEG-2.5, but may work with other types of encoded audio or as a
  63. stand alone format for audio meta data.
  64. ID3v2 is designed to be as flexible and expandable as possible to
  65. meet new meta information needs that might arise. To achieve that
  66. ID3v2 is constructed as a container for several information blocks,
  67. called frames, whose format need not be known to the software that
  68. encounters them. At the start of every frame is an unique and
  69. predefined identifier, a size descriptor that allows software to skip
  70. unknown frames and a flags field. The flags describes encoding
  71. details and if the frame should remain in the tag, should it be
  72. unknown to the software, if the file is altered.
  73. The bitorder in ID3v2 is most significant bit first (MSB). The
  74. byteorder in multibyte numbers is most significant byte first (e.g.
  75. $12345678 would be encoded $12 34 56 78), also known as big endian
  76. and network byte order.
  77. Overall tag structure:
  78. +-----------------------------+
  79. | Header (10 bytes) |
  80. +-----------------------------+
  81. | Extended Header |
  82. | (variable length, OPTIONAL) |
  83. +-----------------------------+
  84. | Frames (variable length) |
  85. +-----------------------------+
  86. | Padding |
  87. | (variable length, OPTIONAL) |
  88. +-----------------------------+
  89. | Footer (10 bytes, OPTIONAL) |
  90. +-----------------------------+
  91. In general, padding and footer are mutually exclusive. See details in
  92. sections 3.3, 3.4 and 5.
  93. 3.1. ID3v2 header
  94. The first part of the ID3v2 tag is the 10 byte tag header, laid out
  95. as follows:
  96. ID3v2/file identifier "ID3"
  97. ID3v2 version $04 00
  98. ID3v2 flags %abcd0000
  99. ID3v2 size 4 * %0xxxxxxx
  100. The first three bytes of the tag are always "ID3", to indicate that
  101. this is an ID3v2 tag, directly followed by the two version bytes. The
  102. first byte of ID3v2 version is its major version, while the second
  103. byte is its revision number. In this case this is ID3v2.4.0. All
  104. revisions are backwards compatible while major versions are not. If
  105. software with ID3v2.4.0 and below support should encounter version
  106. five or higher it should simply ignore the whole tag. Version or
  107. revision will never be $FF.
  108. The version is followed by the ID3v2 flags field, of which currently
  109. four flags are used.
  110. a - Unsynchronisation
  111. Bit 7 in the 'ID3v2 flags' indicates whether or not
  112. unsynchronisation is applied on all frames (see section 6.1 for
  113. details); a set bit indicates usage.
  114. b - Extended header
  115. The second bit (bit 6) indicates whether or not the header is
  116. followed by an extended header. The extended header is described in
  117. section 3.2. A set bit indicates the presence of an extended
  118. header.
  119. c - Experimental indicator
  120. The third bit (bit 5) is used as an 'experimental indicator'. This
  121. flag SHALL always be set when the tag is in an experimental stage.
  122. d - Footer present
  123. Bit 4 indicates that a footer (section 3.4) is present at the very
  124. end of the tag. A set bit indicates the presence of a footer.
  125. All the other flags MUST be cleared. If one of these undefined flags
  126. are set, the tag might not be readable for a parser that does not
  127. know the flags function.
  128. The ID3v2 tag size is stored as a 32 bit synchsafe integer (section
  129. 6.2), making a total of 28 effective bits (representing up to 256MB).
  130. The ID3v2 tag size is the sum of the byte length of the extended
  131. header, the padding and the frames after unsynchronisation. If a
  132. footer is present this equals to ('total size' - 20) bytes, otherwise
  133. ('total size' - 10) bytes.
  134. An ID3v2 tag can be detected with the following pattern:
  135. $49 44 33 yy yy xx zz zz zz zz
  136. Where yy is less than $FF, xx is the 'flags' byte and zz is less than
  137. $80.
  138. 3.2. Extended header
  139. The extended header contains information that can provide further
  140. insight in the structure of the tag, but is not vital to the correct
  141. parsing of the tag information; hence the extended header is
  142. optional.
  143. Extended header size 4 * %0xxxxxxx
  144. Number of flag bytes $01
  145. Extended Flags $xx
  146. Where the 'Extended header size' is the size of the whole extended
  147. header, stored as a 32 bit synchsafe integer. An extended header can
  148. thus never have a size of fewer than six bytes.
  149. The extended flags field, with its size described by 'number of flag
  150. bytes', is defined as:
  151. %0bcd0000
  152. Each flag that is set in the extended header has data attached, which
  153. comes in the order in which the flags are encountered (i.e. the data
  154. for flag 'b' comes before the data for flag 'c'). Unset flags cannot
  155. have any attached data. All unknown flags MUST be unset and their
  156. corresponding data removed when a tag is modified.
  157. Every set flag's data starts with a length byte, which contains a
  158. value between 0 and 127 ($00 - $7f), followed by data that has the
  159. field length indicated by the length byte. If a flag has no attached
  160. data, the value $00 is used as length byte.
  161. b - Tag is an update
  162. If this flag is set, the present tag is an update of a tag found
  163. earlier in the present file or stream. If frames defined as unique
  164. are found in the present tag, they are to override any
  165. corresponding ones found in the earlier tag. This flag has no
  166. corresponding data.
  167. Flag data length $00
  168. c - CRC data present
  169. If this flag is set, a CRC-32 [ISO-3309] data is included in the
  170. extended header. The CRC is calculated on all the data between the
  171. header and footer as indicated by the header's tag length field,
  172. minus the extended header. Note that this includes the padding (if
  173. there is any), but excludes the footer. The CRC-32 is stored as an
  174. 35 bit synchsafe integer, leaving the upper four bits always
  175. zeroed.
  176. Flag data length $05
  177. Total frame CRC 5 * %0xxxxxxx
  178. d - Tag restrictions
  179. For some applications it might be desired to restrict a tag in more
  180. ways than imposed by the ID3v2 specification. Note that the
  181. presence of these restrictions does not affect how the tag is
  182. decoded, merely how it was restricted before encoding. If this flag
  183. is set the tag is restricted as follows:
  184. Flag data length $01
  185. Restrictions %ppqrrstt
  186. p - Tag size restrictions
  187. 00 No more than 128 frames and 1 MB total tag size.
  188. 01 No more than 64 frames and 128 KB total tag size.
  189. 10 No more than 32 frames and 40 KB total tag size.
  190. 11 No more than 32 frames and 4 KB total tag size.
  191. q - Text encoding restrictions
  192. 0 No restrictions
  193. 1 Strings are only encoded with ISO-8859-1 [ISO-8859-1] or
  194. UTF-8 [UTF-8].
  195. r - Text fields size restrictions
  196. 00 No restrictions
  197. 01 No string is longer than 1024 characters.
  198. 10 No string is longer than 128 characters.
  199. 11 No string is longer than 30 characters.
  200. Note that nothing is said about how many bytes is used to
  201. represent those characters, since it is encoding dependent. If a
  202. text frame consists of more than one string, the sum of the
  203. strungs is restricted as stated.
  204. s - Image encoding restrictions
  205. 0 No restrictions
  206. 1 Images are encoded only with PNG [PNG] or JPEG [JFIF].
  207. t - Image size restrictions
  208. 00 No restrictions
  209. 01 All images are 256x256 pixels or smaller.
  210. 10 All images are 64x64 pixels or smaller.
  211. 11 All images are exactly 64x64 pixels, unless required
  212. otherwise.
  213. 3.3. Padding
  214. It is OPTIONAL to include padding after the final frame (at the end
  215. of the ID3 tag), making the size of all the frames together smaller
  216. than the size given in the tag header. A possible purpose of this
  217. padding is to allow for adding a few additional frames or enlarge
  218. existing frames within the tag without having to rewrite the entire
  219. file. The value of the padding bytes must be $00. A tag MUST NOT have
  220. any padding between the frames or between the tag header and the
  221. frames. Furthermore it MUST NOT have any padding when a tag footer is
  222. added to the tag.
  223. 3.4. ID3v2 footer
  224. To speed up the process of locating an ID3v2 tag when searching from
  225. the end of a file, a footer can be added to the tag. It is REQUIRED
  226. to add a footer to an appended tag, i.e. a tag located after all
  227. audio data. The footer is a copy of the header, but with a different
  228. identifier.
  229. ID3v2 identifier "3DI"
  230. ID3v2 version $04 00
  231. ID3v2 flags %abcd0000
  232. ID3v2 size 4 * %0xxxxxxx
  233. 4. ID3v2 frame overview
  234. All ID3v2 frames consists of one frame header followed by one or more
  235. fields containing the actual information. The header is always 10
  236. bytes and laid out as follows:
  237. Frame ID $xx xx xx xx (four characters)
  238. Size 4 * %0xxxxxxx
  239. Flags $xx xx
  240. The frame ID is made out of the characters capital A-Z and 0-9.
  241. Identifiers beginning with "X", "Y" and "Z" are for experimental
  242. frames and free for everyone to use, without the need to set the
  243. experimental bit in the tag header. Bear in mind that someone else
  244. might have used the same identifier as you. All other identifiers are
  245. either used or reserved for future use.
  246. The frame ID is followed by a size descriptor containing the size of
  247. the data in the final frame, after encryption, compression and
  248. unsynchronisation. The size is excluding the frame header ('total
  249. frame size' - 10 bytes) and stored as a 32 bit synchsafe integer.
  250. In the frame header the size descriptor is followed by two flag
  251. bytes. These flags are described in section 4.1.
  252. There is no fixed order of the frames' appearance in the tag,
  253. although it is desired that the frames are arranged in order of
  254. significance concerning the recognition of the file. An example of
  255. such order: UFID, TIT2, MCDI, TRCK ...
  256. A tag MUST contain at least one frame. A frame must be at least 1
  257. byte big, excluding the header.
  258. If nothing else is said, strings, including numeric strings and URLs
  259. [URL], are represented as ISO-8859-1 [ISO-8859-1] characters in the
  260. range $20 - $FF. Such strings are represented in frame descriptions
  261. as <text string>, or <full text string> if newlines are allowed. If
  262. nothing else is said newline character is forbidden. In ISO-8859-1 a
  263. newline is represented, when allowed, with $0A only.
  264. Frames that allow different types of text encoding contains a text
  265. encoding description byte. Possible encodings:
  266. $00 ISO-8859-1 [ISO-8859-1]. Terminated with $00.
  267. $01 UTF-16 [UTF-16] encoded Unicode [UNICODE] with BOM. All
  268. strings in the same frame SHALL have the same byteorder.
  269. Terminated with $00 00.
  270. $02 UTF-16BE [UTF-16] encoded Unicode [UNICODE] without BOM.
  271. Terminated with $00 00.
  272. $03 UTF-8 [UTF-8] encoded Unicode [UNICODE]. Terminated with $00.
  273. Strings dependent on encoding are represented in frame descriptions
  274. as <text string according to encoding>, or <full text string
  275. according to encoding> if newlines are allowed. Any empty strings of
  276. type $01 which are NULL-terminated may have the Unicode BOM followed
  277. by a Unicode NULL ($FF FE 00 00 or $FE FF 00 00).
  278. The timestamp fields are based on a subset of ISO 8601. When being as
  279. precise as possible the format of a time string is
  280. yyyy-MM-ddTHH:mm:ss (year, "-", month, "-", day, "T", hour (out of
  281. 24), ":", minutes, ":", seconds), but the precision may be reduced by
  282. removing as many time indicators as wanted. Hence valid timestamps
  283. are
  284. yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-ddTHH, yyyy-MM-ddTHH:mm and
  285. yyyy-MM-ddTHH:mm:ss. All time stamps are UTC. For durations, use
  286. the slash character as described in 8601, and for multiple non-
  287. contiguous dates, use multiple strings, if allowed by the frame
  288. definition.
  289. The three byte language field, present in several frames, is used to
  290. describe the language of the frame's content, according to ISO-639-2
  291. [ISO-639-2]. The language should be represented in lower case. If the
  292. language is not known the string "XXX" should be used.
  293. All URLs [URL] MAY be relative, e.g. "picture.png", "../doc.txt".
  294. If a frame is longer than it should be, e.g. having more fields than
  295. specified in this document, that indicates that additions to the
  296. frame have been made in a later version of the ID3v2 standard. This
  297. is reflected by the revision number in the header of the tag.
  298. 4.1. Frame header flags
  299. In the frame header the size descriptor is followed by two flag
  300. bytes. All unused flags MUST be cleared. The first byte is for
  301. 'status messages' and the second byte is a format description. If an
  302. unknown flag is set in the first byte the frame MUST NOT be changed
  303. without that bit cleared. If an unknown flag is set in the second
  304. byte the frame is likely to not be readable. Some flags in the second
  305. byte indicates that extra information is added to the header. These
  306. fields of extra information is ordered as the flags that indicates
  307. them. The flags field is defined as follows (l and o left out because
  308. ther resemblence to one and zero):
  309. %0abc0000 %0h00kmnp
  310. Some frame format flags indicate that additional information fields
  311. are added to the frame. This information is added after the frame
  312. header and before the frame data in the same order as the flags that
  313. indicates them. I.e. the four bytes of decompressed size will precede
  314. the encryption method byte. These additions affects the 'frame size'
  315. field, but are not subject to encryption or compression.
  316. The default status flags setting for a frame is, unless stated
  317. otherwise, 'preserved if tag is altered' and 'preserved if file is
  318. altered', i.e. %00000000.
  319. 4.1.1. Frame status flags
  320. a - Tag alter preservation
  321. This flag tells the tag parser what to do with this frame if it is
  322. unknown and the tag is altered in any way. This applies to all
  323. kinds of alterations, including adding more padding and reordering
  324. the frames.
  325. 0 Frame should be preserved.
  326. 1 Frame should be discarded.
  327. b - File alter preservation
  328. This flag tells the tag parser what to do with this frame if it is
  329. unknown and the file, excluding the tag, is altered. This does not
  330. apply when the audio is completely replaced with other audio data.
  331. 0 Frame should be preserved.
  332. 1 Frame should be discarded.
  333. c - Read only
  334. This flag, if set, tells the software that the contents of this
  335. frame are intended to be read only. Changing the contents might
  336. break something, e.g. a signature. If the contents are changed,
  337. without knowledge of why the frame was flagged read only and
  338. without taking the proper means to compensate, e.g. recalculating
  339. the signature, the bit MUST be cleared.
  340. 4.1.2. Frame format flags
  341. h - Grouping identity
  342. This flag indicates whether or not this frame belongs in a group
  343. with other frames. If set, a group identifier byte is added to the
  344. frame. Every frame with the same group identifier belongs to the
  345. same group.
  346. 0 Frame does not contain group information
  347. 1 Frame contains group information
  348. k - Compression
  349. This flag indicates whether or not the frame is compressed.
  350. A 'Data Length Indicator' byte MUST be included in the frame.
  351. 0 Frame is not compressed.
  352. 1 Frame is compressed using zlib [zlib] deflate method.
  353. If set, this requires the 'Data Length Indicator' bit
  354. to be set as well.
  355. m - Encryption
  356. This flag indicates whether or not the frame is encrypted. If set,
  357. one byte indicating with which method it was encrypted will be
  358. added to the frame. See description of the ENCR frame for more
  359. information about encryption method registration. Encryption
  360. should be done after compression. Whether or not setting this flag
  361. requires the presence of a 'Data Length Indicator' depends on the
  362. specific algorithm used.
  363. 0 Frame is not encrypted.
  364. 1 Frame is encrypted.
  365. n - Unsynchronisation
  366. This flag indicates whether or not unsynchronisation was applied
  367. to this frame. See section 6 for details on unsynchronisation.
  368. If this flag is set all data from the end of this header to the
  369. end of this frame has been unsynchronised. Although desirable, the
  370. presence of a 'Data Length Indicator' is not made mandatory by
  371. unsynchronisation.
  372. 0 Frame has not been unsynchronised.
  373. 1 Frame has been unsyrchronised.
  374. p - Data length indicator
  375. This flag indicates that a data length indicator has been added to
  376. the frame. The data length indicator is the value one would write
  377. as the 'Frame length' if all of the frame format flags were
  378. zeroed, represented as a 32 bit synchsafe integer.
  379. 0 There is no Data Length Indicator.
  380. 1 A data length Indicator has been added to the frame.
  381. 5. Tag location
  382. The default location of an ID3v2 tag is prepended to the audio so
  383. that players can benefit from the information when the data is
  384. streamed. It is however possible to append the tag, or make a
  385. prepend/append combination. When deciding upon where an unembedded
  386. tag should be located, the following order of preference SHOULD be
  387. considered.
  388. 1. Prepend the tag.
  389. 2. Prepend a tag with all vital information and add a second tag at
  390. the end of the file, before tags from other tagging systems. The
  391. first tag is required to have a SEEK frame.
  392. 3. Add a tag at the end of the file, before tags from other tagging
  393. systems.
  394. In case 2 and 3 the tag can simply be appended if no other known tags
  395. are present. The suggested method to find ID3v2 tags are:
  396. 1. Look for a prepended tag using the pattern found in section 3.1.
  397. 2. If a SEEK frame was found, use its values to guide further
  398. searching.
  399. 3. Look for a tag footer, scanning from the back of the file.
  400. For every new tag that is found, the old tag should be discarded
  401. unless the update flag in the extended header (section 3.2) is set.
  402. 6. Unsynchronisation
  403. The only purpose of unsynchronisation is to make the ID3v2 tag as
  404. compatible as possible with existing software and hardware. There is
  405. no use in 'unsynchronising' tags if the file is only to be processed
  406. only by ID3v2 aware software and hardware. Unsynchronisation is only
  407. useful with tags in MPEG 1/2 layer I, II and III, MPEG 2.5 and AAC
  408. files.
  409. 6.1. The unsynchronisation scheme
  410. Whenever a false synchronisation is found within the tag, one zeroed
  411. byte is inserted after the first false synchronisation byte. The
  412. format of synchronisations that should be altered by ID3 encoders is
  413. as follows:
  414. %11111111 111xxxxx
  415. and should be replaced with:
  416. %11111111 00000000 111xxxxx
  417. This has the side effect that all $FF 00 combinations have to be
  418. altered, so they will not be affected by the decoding process.
  419. Therefore all the $FF 00 combinations have to be replaced with the
  420. $FF 00 00 combination during the unsynchronisation.
  421. To indicate usage of the unsynchronisation, the unsynchronisation
  422. flag in the frame header should be set. This bit MUST be set if the
  423. frame was altered by the unsynchronisation and SHOULD NOT be set if
  424. unaltered. If all frames in the tag are unsynchronised the
  425. unsynchronisation flag in the tag header SHOULD be set. It MUST NOT
  426. be set if the tag has a frame which is not unsynchronised.
  427. Assume the first byte of the audio to be $FF. The special case when
  428. the last byte of the last frame is $FF and no padding nor footer is
  429. used will then introduce a false synchronisation. This can be solved
  430. by adding a footer, adding padding or unsynchronising the frame and
  431. add $00 to the end of the frame data, thus adding more byte to the
  432. frame size than a normal unsynchronisation would. Although not
  433. preferred, it is allowed to apply the last method on all frames
  434. ending with $FF.
  435. It is preferred that the tag is either completely unsynchronised or
  436. not unsynchronised at all. A completely unsynchronised tag has no
  437. false synchonisations in it, as defined above, and does not end with
  438. $FF. A completely non-unsynchronised tag contains no unsynchronised
  439. frames, and thus the unsynchronisation flag in the header is cleared.
  440. Do bear in mind, that if compression or encryption is used, the
  441. unsynchronisation scheme MUST be applied afterwards. When decoding an
  442. unsynchronised frame, the unsynchronisation scheme MUST be reversed
  443. first, encryption and decompression afterwards.
  444. 6.2. Synchsafe integers
  445. In some parts of the tag it is inconvenient to use the
  446. unsychronisation scheme because the size of unsynchronised data is
  447. not known in advance, which is particularly problematic with size
  448. descriptors. The solution in ID3v2 is to use synchsafe integers, in
  449. which there can never be any false synchs. Synchsafe integers are
  450. integers that keep its highest bit (bit 7) zeroed, making seven bits
  451. out of eight available. Thus a 32 bit synchsafe integer can store 28
  452. bits of information.
  453. Example:
  454. 255 (%11111111) encoded as a 16 bit synchsafe integer is 383
  455. (%00000001 01111111).
  456. 7. Copyright
  457. Copyright (C) Martin Nilsson 2000. All Rights Reserved.
  458. This document and translations of it may be copied and furnished to
  459. others, and derivative works that comment on or otherwise explain it
  460. or assist in its implementation may be prepared, copied, published
  461. and distributed, in whole or in part, without restriction of any
  462. kind, provided that a reference to this document is included on all
  463. such copies and derivative works. However, this document itself may
  464. not be modified in any way and reissued as the original document.
  465. The limited permissions granted above are perpetual and will not be
  466. revoked.
  467. This document and the information contained herein is provided on an
  468. 'AS IS' basis and THE AUTHORS DISCLAIMS ALL WARRANTIES, EXPRESS OR
  469. IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
  470. THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
  471. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  472. 8. References
  473. [ID3v2] Martin Nilsson, 'ID3v2 informal standard'.
  474. http://www.id3lib.org/id3/id3v2.3.0.txt
  475. [ISO-639-2] ISO/FDIS 639-2.
  476. 'Codes for the representation of names of languages, Part 2: Alpha-3
  477. code.' Technical committee / subcommittee: TC 37 / SC 2
  478. [ISO-3309] ISO 3309
  479. 'Information Processing Systems--Data Communication High-Level Data
  480. Link Control Procedure--Frame Structure', IS 3309, October 1984, 3rd
  481. Edition.
  482. [ISO-8859-1] ISO/IEC DIS 8859-1.
  483. '8-bit single-byte coded graphic character sets, Part 1: Latin
  484. alphabet No. 1.' Technical committee / subcommittee: JTC 1 / SC 2
  485. [JFIF] 'JPEG File Interchange Format, version 1.02'
  486. http://www.w3.org/Graphics/JPEG/jfif.txt
  487. [KEYWORDS] S. Bradner, 'Key words for use in RFCs to Indicate
  488. Requirement Levels', RFC 2119, March 1997.
  489. ftp://ftp.isi.edu/in-notes/rfc2119.txt
  490. [MPEG] ISO/IEC 11172-3:1993.
  491. 'Coding of moving pictures and associated audio for digital storage
  492. media at up to about 1,5 Mbit/s, Part 3: Audio.'
  493. Technical committee / subcommittee: JTC 1 / SC 29
  494. and
  495. ISO/IEC 13818-3:1995
  496. 'Generic coding of moving pictures and associated audio information,
  497. Part 3: Audio.'
  498. Technical committee / subcommittee: JTC 1 / SC 29
  499. and
  500. ISO/IEC DIS 13818-3
  501. 'Generic coding of moving pictures and associated audio information,
  502. Part 3: Audio (Revision of ISO/IEC 13818-3:1995)'
  503. [PNG] 'Portable Network Graphics, version 1.0'
  504. http://www.w3.org/TR/REC-png-multi.html
  505. [UNICODE] The Unicode Consortium,
  506. 'The Unicode Standard Version 3.0', ISBN 0-201-61633-5.
  507. http://www.unicode.org/unicode/standard/versions/Unicode3.0.htm">http://www.unicode.org/unicode/standard/versions/Unicode3.0.htm
  508. [URL] T. Berners-Lee, L. Masinter & M. McCahill, 'Uniform Resource
  509. Locators (URL)', RFC 1738, December 1994.
  510. ftp://ftp.isi.edu/in-notes/rfc1738.txt
  511. [UTF-8] F. Yergeau, 'UTF-8, a transformation format of ISO 10646',
  512. RFC 2279, January 1998.
  513. ftp://ftp.isi.edu/in-notes/rfc2279.txt">ftp://ftp.isi.edu/in-notes/rfc2279.txt
  514. [UTF-16] F. Yergeau, 'UTF-16, an encoding of ISO 10646', RFC 2781,
  515. February 2000.
  516. ftp://ftp.isi.edu/in-notes/rfc2781.txt
  517. [ZLIB] P. Deutsch, Aladdin Enterprises & J-L. Gailly, 'ZLIB
  518. Compressed Data Format Specification version 3.3', RFC 1950,
  519. May 1996.
  520. ftp://ftp.isi.edu/in-notes/rfc1950.txt
  521. 9. Author's Address
  522. Written by
  523. Martin Nilsson
  524. Rydsvägen 246 C. 30
  525. SE-584 34 Linköping
  526. Sweden
  527. Email: [email protected]