xref: /dragonfly/contrib/file/magic/Magdir/vorbis (revision 92fc8b5c)
1
2#------------------------------------------------------------------------------
3# $File: vorbis,v 1.16 2009/09/19 16:28:13 christos Exp $
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# FIXME[2]: Disable the above for now, since search assumes text mode.
22#
23# --- Ogg Framing ---
24#0		search/1000	OggS		Ogg data
250		string	OggS		Ogg data
26!:mime		application/ogg
27>4		byte		!0		UNKNOWN REVISION %u
28##>4		byte		0		revision 0
29>4		byte		0
30##>>14		lelong		x		(Serial %lX)
31# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
32>>28		string		\x7fFLAC	\b, FLAC audio
33# non-Vorbis content: Theora
34>>28		string		\x80theora	\b, Theora video
35# non-Vorbis content: Kate
36>>28		string		\x80kate\0\0\0\0	\b, Kate
37>>>37		ubyte		x		v%u
38>>>38		ubyte		x		\b.%u,
39>>>40		byte		0		utf8 encoding,
40>>>40		byte		!0		unknown character encoding,
41>>>60		string		>\0		language %s,
42>>>60		string		\0		no language set,
43>>>76		string		>\0		category %s
44>>>76		string		\0		no category set
45# non-Vorbis content: Skeleton
46>>28		string		fishead\0	\b, Skeleton
47>>>36		short		x		v%u
48>>>40		short		x		\b.%u
49# non-Vorbis content: Speex
50>>28		string		Speex\ \ \ 	\b, Speex audio
51# non-Vorbis content: OGM
52>>28		string		\x01video\0\0\0	\b, OGM video
53>>>37		string/c	div3		(DivX 3)
54>>>37		string/c	divx		(DivX 4)
55>>>37		string/c	dx50		(DivX 5)
56>>>37		string/c	xvid		(XviD)
57# --- First vorbis packet - general header ---
58>>28		string		\x01vorbis	\b, Vorbis audio,
59>>>35		lelong		!0		UNKNOWN VERSION %lu,
60##>>>35		lelong		0		version 0,
61>>>35		lelong		0
62>>>>39		ubyte		1		mono,
63>>>>39		ubyte		2		stereo,
64>>>>39		ubyte		>2		%u channels,
65>>>>40		lelong		x		%lu Hz
66# Minimal, nominal and maximal bitrates specified when encoding
67>>>>48		string		<\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff	\b,
68# The above tests if at least one of these is specified:
69>>>>>52		lelong		!-1
70# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
71# instead of -1.
72# Vorbis 1.0 uses 0 instead of -1.
73>>>>>>52	lelong		!0
74>>>>>>>52	lelong		!-1000
75>>>>>>>>52	lelong		x		<%lu
76>>>>>48		lelong		!-1
77>>>>>>48	lelong		x		~%lu
78>>>>>44		lelong		!-1
79>>>>>>44	lelong		!-1000
80>>>>>>>44	lelong		!0
81>>>>>>>>44	lelong		x		>%lu
82>>>>>48		string		<\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff	bps
83# -- Second vorbis header packet - the comments
84# A kludge to read the vendor string.  It's a counted string, not a
85# zero-terminated one, so file(1) can't read it in a generic way.
86# libVorbis is the only one existing currently, so I detect specifically
87# it.  The interesting value is the cvs date (8 digits decimal).
88# Post-RC1 Ogg files have the second header packet (and thus the version)
89# in a different place, so we must use an indirect offset.
90>>>(84.b+85)		string		\x03vorbis
91>>>>(84.b+96)		string/c	Xiphophorus\ libVorbis\ I	\b, created by: Xiphophorus libVorbis I
92>>>>>(84.b+120)		string		>00000000
93# Map to beta version numbers:
94>>>>>>(84.b+120)	string		<20000508	(<beta1, prepublic)
95>>>>>>(84.b+120)	string		20000508	(1.0 beta 1 or beta 2)
96>>>>>>(84.b+120)	string		>20000508
97>>>>>>>(84.b+120)	string		<20001031	(beta2-3)
98>>>>>>(84.b+120)	string		20001031	(1.0 beta 3)
99>>>>>>(84.b+120)	string		>20001031
100>>>>>>>(84.b+120)	string		<20010225	(beta3-4)
101>>>>>>(84.b+120)	string		20010225	(1.0 beta 4)
102>>>>>>(84.b+120)	string		>20010225
103>>>>>>>(84.b+120)	string		<20010615	(beta4-RC1)
104>>>>>>(84.b+120)	string		20010615	(1.0 RC1)
105>>>>>>(84.b+120)	string		20010813	(1.0 RC2)
106>>>>>>(84.b+120)	string		20010816	(RC2 - Garf tuned v1)
107>>>>>>(84.b+120)	string		20011014	(RC2 - Garf tuned v2)
108>>>>>>(84.b+120)	string		20011217	(1.0 RC3)
109>>>>>>(84.b+120)	string		20011231	(1.0 RC3)
110# Some pre-1.0 CVS snapshots still had "Xiphphorus"...
111>>>>>>(84.b+120)	string		>20011231	(pre-1.0 CVS)
112# For the 1.0 release, Xiphophorus is replaced by Xiph.Org
113>>>>(84.b+96)		string/c	Xiph.Org\ libVorbis\ I	\b, created by: Xiph.Org libVorbis I
114>>>>>(84.b+117)		string		>00000000
115>>>>>>(84.b+117)	string		<20020717	(pre-1.0 CVS)
116>>>>>>(84.b+117)	string		20020717	(1.0)
117>>>>>>(84.b+117)	string		20030909	(1.0.1)
118>>>>>>(84.b+117)	string		20040629	(1.1.0 RC1)
119