vorbis 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #------------------------------------------------------------------------------
  2. # $File: vorbis,v 1.26 2020/08/22 18:30:55 christos Exp $
  3. # vorbis: file(1) magic for Ogg/Vorbis files
  4. #
  5. # From Felix von Leitner <leitner@fefe.de>
  6. # Extended by Beni Cherniavsky <cben@crosswinds.net>
  7. # Further extended by Greg Wooledge <greg@wooledge.org>
  8. #
  9. # Most (everything but the number of channels and bitrate) is commented
  10. # out with `##' as it's not interesting to the average user. The most
  11. # probable things advanced users would want to uncomment are probably
  12. # the number of comments and the encoder version.
  13. #
  14. # FIXME: The first match has been made a search, so that it can skip
  15. # over prepended ID3 tags. This will work for MIME type detection, but
  16. # won't work for detecting other properties of the file (they all need
  17. # to be made relative to the search). In any case, if the file has ID3
  18. # tags, the ID3 information will be printed, not the Ogg information,
  19. # so until that's fixed, this doesn't matter.
  20. # FIXME[2]: Disable the above for now, since search assumes text mode.
  21. #
  22. # --- Ogg Framing ---
  23. #0 search/1000 OggS Ogg data
  24. 0 string OggS Ogg data
  25. >4 byte !0 UNKNOWN REVISION %u
  26. ##>4 byte 0 revision 0
  27. >4 byte 0
  28. ##>>14 lelong x (Serial %lX)
  29. # non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
  30. >>28 string \x7fFLAC \b, FLAC audio
  31. # non-Vorbis content: Theora
  32. !:mime audio/ogg
  33. >>28 string \x80theora \b, Theora video
  34. !:mime video/ogg
  35. # non-Vorbis content: Kate
  36. >>28 string \x80kate\0\0\0\0 \b, Kate (Karaoke and Text)
  37. !:mime application/ogg
  38. >>>37 ubyte x v%u
  39. >>>38 ubyte x \b.%u,
  40. >>>40 byte 0 utf8 encoding,
  41. >>>40 byte !0 unknown character encoding,
  42. >>>60 string >\0 language %s,
  43. >>>60 string \0 no language set,
  44. >>>76 string >\0 category %s
  45. >>>76 string \0 no category set
  46. # non-Vorbis content: Skeleton
  47. >>28 string fishead\0 \b, Skeleton
  48. !:mime video/ogg
  49. >>>36 leshort x v%u
  50. >>>40 leshort x \b.%u
  51. # non-Vorbis content: Speex
  52. >>28 string Speex\ \ \ \b, Speex audio
  53. !:mime audio/ogg
  54. # non-Vorbis content: OGM
  55. >>28 string \x01video\0\0\0 \b, OGM video
  56. !:mime video/ogg
  57. >>>37 string/c div3 (DivX 3)
  58. >>>37 string/c divx (DivX 4)
  59. >>>37 string/c dx50 (DivX 5)
  60. >>>37 string/c xvid (XviD)
  61. # --- First vorbis packet - general header ---
  62. >>28 string \x01vorbis \b, Vorbis audio,
  63. !:mime audio/ogg
  64. >>>35 lelong !0 UNKNOWN VERSION %u,
  65. ##>>>35 lelong 0 version 0,
  66. >>>35 lelong 0
  67. >>>>39 ubyte 1 mono,
  68. >>>>39 ubyte 2 stereo,
  69. >>>>39 ubyte >2 %u channels,
  70. >>>>40 lelong x %u Hz
  71. # Minimal, nominal and maximal bitrates specified when encoding
  72. >>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b,
  73. # The above tests if at least one of these is specified:
  74. >>>>>52 lelong !-1
  75. # Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
  76. # instead of -1.
  77. # Vorbis 1.0 uses 0 instead of -1.
  78. >>>>>>52 lelong !0
  79. >>>>>>>52 lelong !-1000
  80. >>>>>>>>52 lelong x <%u
  81. >>>>>48 lelong !-1
  82. >>>>>>48 lelong x ~%u
  83. >>>>>44 lelong !-1
  84. >>>>>>44 lelong !-1000
  85. >>>>>>>44 lelong !0
  86. >>>>>>>>44 lelong x >%u
  87. >>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff bps
  88. # -- Second vorbis header packet - the comments
  89. # A kludge to read the vendor string. It's a counted string, not a
  90. # zero-terminated one, so file(1) can't read it in a generic way.
  91. # libVorbis is the only one existing currently, so I detect specifically
  92. # it. The interesting value is the cvs date (8 digits decimal).
  93. # Post-RC1 Ogg files have the second header packet (and thus the version)
  94. # in a different place, so we must use an indirect offset.
  95. >>>(84.b+85) string \x03vorbis
  96. >>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I
  97. >>>>>(84.b+120) string >00000000
  98. # Map to beta version numbers:
  99. >>>>>>(84.b+120) string <20000508 (<beta1, prepublic)
  100. >>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2)
  101. >>>>>>(84.b+120) string >20000508
  102. >>>>>>>(84.b+120) string <20001031 (beta2-3)
  103. >>>>>>(84.b+120) string 20001031 (1.0 beta 3)
  104. >>>>>>(84.b+120) string >20001031
  105. >>>>>>>(84.b+120) string <20010225 (beta3-4)
  106. >>>>>>(84.b+120) string 20010225 (1.0 beta 4)
  107. >>>>>>(84.b+120) string >20010225
  108. >>>>>>>(84.b+120) string <20010615 (beta4-RC1)
  109. >>>>>>(84.b+120) string 20010615 (1.0 RC1)
  110. >>>>>>(84.b+120) string 20010813 (1.0 RC2)
  111. >>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1)
  112. >>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2)
  113. >>>>>>(84.b+120) string 20011217 (1.0 RC3)
  114. >>>>>>(84.b+120) string 20011231 (1.0 RC3)
  115. # Some pre-1.0 CVS snapshots still had "Xiphphorus"...
  116. >>>>>>(84.b+120) string >20011231 (pre-1.0 CVS)
  117. # For the 1.0 release, Xiphophorus is replaced by Xiph.Org
  118. >>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I
  119. >>>>>(84.b+117) string >00000000
  120. >>>>>>(84.b+117) string <20020717 (pre-1.0 CVS)
  121. >>>>>>(84.b+117) string 20020717 (1.0)
  122. >>>>>>(84.b+117) string 20030909 (1.0.1)
  123. >>>>>>(84.b+117) string 20040629 (1.1.0 RC1)
  124. >>>>>>(84.b+117) string 20050304 (1.1.2)
  125. >>>>>>(84.b+117) string 20070622 (1.2.0)
  126. >>>>>>(84.b+117) string 20090624 (1.2.2)
  127. >>>>>>(84.b+117) string 20090709 (1.2.3)
  128. >>>>>>(84.b+117) string 20100325 (1.3.1)
  129. >>>>>>(84.b+117) string 20101101 (1.3.2)
  130. >>>>>>(84.b+117) string 20120203 (1.3.3)
  131. >>>>>>(84.b+117) string 20140122 (1.3.4)
  132. >>>>>>(84.b+117) string 20150105 (1.3.5)
  133. # non-Vorbis content: Opus https://tools.ietf.org/html/rfc7845#section-5
  134. >>28 string OpusHead \b, Opus audio,
  135. !:mime audio/ogg
  136. >>>36 ubyte >0x0F UNKNOWN VERSION %u,
  137. >>>36 ubyte&0x0F !0 version 0.%u,
  138. >>>>46 ubyte >1
  139. >>>>>46 ubyte !255 unknown channel mapping family %u,
  140. >>>>>37 ubyte x %u channels
  141. >>>>46 ubyte 0
  142. >>>>>37 ubyte 1 mono
  143. >>>>>37 ubyte 2 stereo
  144. >>>>46 ubyte 1
  145. >>>>>37 ubyte 1 mono
  146. >>>>>37 ubyte 2 stereo
  147. >>>>>37 ubyte 3 linear surround
  148. >>>>>37 ubyte 4 quadraphonic
  149. >>>>>37 ubyte 5 5.0 surround
  150. >>>>>37 ubyte 6 5.1 surround
  151. >>>>>37 ubyte 7 6.1 surround
  152. >>>>>37 ubyte 8 7.1 surround
  153. >>>>40 lelong !0 \b, %u Hz (Input Sample Rate)