1# $OpenBSD: vorbis,v 1.3 2009/04/24 18:54:34 chl Exp $ 2 3#------------------------------------------------------------------------------ 4# vorbis: file(1) magic for Ogg/Vorbis files 5# 6# From Felix von Leitner <leitner@fefe.de> 7# Extended by Beni Cherniavsky <cben@crosswinds.net> 8# Further extended by Greg Wooledge <greg@wooledge.org> 9# 10# Most (everything but the number of channels and bitrate) is commented 11# out with `##' as it's not interesting to the average user. The most 12# probable things advanced users would want to uncomment are probably 13# the number of comments and the encoder version. 14# 15# FIXME: The first match has been made a search, so that it can skip 16# over prepended ID3 tags. This will work for MIME type detection, but 17# won't work for detecting other properties of the file (they all need 18# to be made relative to the search). In any case, if the file has ID3 19# tags, the ID3 information will be printed, not the Ogg information, 20# so until that's fixed, this doesn't matter. 21# 22# --- Ogg Framing --- 230 search/1000 OggS Ogg data 24!:mime application/ogg 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>>28 string \x80theora \b, Theora video 33# non-Vorbis content: Kate 34>>28 string \x80kate\0\0\0\0 \b, Kate 35>>>37 ubyte x v%u 36>>>38 ubyte x \b.%u, 37>>>40 byte 0 utf8 encoding, 38>>>40 byte !0 unknown character encoding, 39>>>60 string >\0 language %s, 40>>>60 string \0 no language set, 41>>>76 string >\0 category %s 42>>>76 string \0 no category set 43# non-Vorbis content: Skeleton 44>>28 string fishead\0 \b, Skeleton 45>>>36 short x v%u 46>>>40 short x \b.%u 47# non-Vorbis content: Speex 48>>28 string Speex\ \ \ \b, Speex audio 49# non-Vorbis content: OGM 50>>28 string \x01video\0\0\0 \b, OGM video 51>>>37 string/c div3 (DivX 3) 52>>>37 string/c divx (DivX 4) 53>>>37 string/c dx50 (DivX 5) 54>>>37 string/c xvid (XviD) 55# --- First vorbis packet - general header --- 56>>28 string \x01vorbis \b, Vorbis audio, 57>>>35 lelong !0 UNKNOWN VERSION %lu, 58##>>>35 lelong 0 version 0, 59>>>35 lelong 0 60>>>>39 ubyte 1 mono, 61>>>>39 ubyte 2 stereo, 62>>>>39 ubyte >2 %u channels, 63>>>>40 lelong x %lu Hz 64# Minimal, nominal and maximal bitrates specified when encoding 65>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b, 66# The above tests if at least one of these is specified: 67>>>>>52 lelong !-1 68# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields 69# instead of -1. 70# Vorbis 1.0 uses 0 instead of -1. 71>>>>>>52 lelong !0 72>>>>>>>52 lelong !-1000 73>>>>>>>>52 lelong x <%lu 74>>>>>48 lelong !-1 75>>>>>>48 lelong x ~%lu 76>>>>>44 lelong !-1 77>>>>>>44 lelong !-1000 78>>>>>>>44 lelong !0 79>>>>>>>>44 lelong x >%lu 80>>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff bps 81# -- Second vorbis header packet - the comments 82# A kludge to read the vendor string. It's a counted string, not a 83# zero-terminated one, so file(1) can't read it in a generic way. 84# libVorbis is the only one existing currently, so I detect specifically 85# it. The interesting value is the cvs date (8 digits decimal). 86# Post-RC1 Ogg files have the second header packet (and thus the version) 87# in a different place, so we must use an indirect offset. 88>>>(84.b+85) string \x03vorbis 89>>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I 90>>>>>(84.b+120) string >00000000 91# Map to beta version numbers: 92>>>>>>(84.b+120) string <20000508 (<beta1, prepublic) 93>>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2) 94>>>>>>(84.b+120) string >20000508 95>>>>>>>(84.b+120) string <20001031 (beta2-3) 96>>>>>>(84.b+120) string 20001031 (1.0 beta 3) 97>>>>>>(84.b+120) string >20001031 98>>>>>>>(84.b+120) string <20010225 (beta3-4) 99>>>>>>(84.b+120) string 20010225 (1.0 beta 4) 100>>>>>>(84.b+120) string >20010225 101>>>>>>>(84.b+120) string <20010615 (beta4-RC1) 102>>>>>>(84.b+120) string 20010615 (1.0 RC1) 103>>>>>>(84.b+120) string 20010813 (1.0 RC2) 104>>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1) 105>>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2) 106>>>>>>(84.b+120) string 20011217 (1.0 RC3) 107>>>>>>(84.b+120) string 20011231 (1.0 RC3) 108# Some pre-1.0 CVS snapshots still had "Xiphphorus"... 109>>>>>>(84.b+120) string >20011231 (pre-1.0 CVS) 110# For the 1.0 release, Xiphophorus is replaced by Xiph.Org 111>>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I 112>>>>>(84.b+117) string >00000000 113>>>>>>(84.b+117) string <20020717 (pre-1.0 CVS) 114>>>>>>(84.b+117) string 20020717 (1.0) 115>>>>>>(84.b+117) string 20030909 (1.0.1) 116>>>>>>(84.b+117) string 20040629 (1.1.0 RC1) 117