Chris@1: Chris@1: Chris@1:
Chris@1: Chris@1: Chris@1:As of writing, not all the below document
Chris@1: links are live. They will be populated as we complete the documents.
Ogg Vorbis is a general purpose compressed audio format Chris@1: for high quality (44.1-48.0kHz, 16+ bit, polyphonic) audio and music Chris@1: at moderate fixed and variable bitrates (40-80 kb/s/channel). This Chris@1: places Vorbis in the same class as audio representations including Chris@1: MPEG-1 audio layer 3, MPEG-4 audio (AAC and TwinVQ), and PAC.
Chris@1: Chris@1:Vorbis is the first of a planned family of Ogg multimedia coding Chris@1: formats being developed as part of the Xiph.Org Foundation's Ogg multimedia Chris@1: project. See http://www.xiph.org/ Chris@1: for more information.
Chris@1: Chris@1:A Vorbis encoder takes in overlapping (but contiguous) short-time Chris@1: segments of audio data. The encoder analyzes the content of the audio Chris@1: to determine an optimal compact representation; this phase of encoding Chris@1: is known as analysis. For each short-time block of sound, Chris@1: the encoder then packs an efficient representation of the signal, as Chris@1: determined by analysis, into a raw packet much smaller than the size Chris@1: required by the original signal; this phase is coding. Chris@1: Lastly, in a streaming environment, the raw packets are then Chris@1: structured into a continuous stream of octets; this last phase is Chris@1: streaming. Note that the stream of octets is referred to both Chris@1: as a 'byte-' and 'bit-'stream; the latter usage is acceptible as the Chris@1: stream of octets is a physical representation of a true logical Chris@1: bit-by-bit stream.
Chris@1: Chris@1:A Vorbis decoder performs a mirror image process of extracting the Chris@1: original sequence of raw packets from an Ogg stream (stream Chris@1: decomposition), reconstructing the signal representation from the Chris@1: raw data in the packet (decoding) and them reconstituting an Chris@1: audio signal from the decoded representation (synthesis).
Chris@1: Chris@1:The Programming with libvorbis Chris@1: documents discuss use of the reference Vorbis codec library Chris@1: (libvorbis) produced by the Xiph.Org Foundation.
Chris@1: Chris@1:The data representations and algorithms necessary at each step to Chris@1: encode and decode Ogg Vorbis bitstreams are described by the below Chris@1: documents in sufficient detail to construct a complete Vorbis codec. Chris@1: Note that at the time of writing, Vorbis is still in a 'Request For Chris@1: Comments' stage of development; despite being in advanced stages of Chris@1: development, input from the multimedia community is welcome.
Chris@1: Chris@1:Analysis begins by seperating an input audio stream into individual, Chris@1: overlapping short-time segments of audio data. These segments are Chris@1: then transformed into an alternate representation, seeking to Chris@1: represent the original signal in a more efficient form that codes into Chris@1: a smaller number of bytes. The analysis and transformation stage is Chris@1: the most complex element of producing a Vorbis bitstream.
Chris@1: Chris@1:The corresponding synthesis step in the decoder is simpler; there is Chris@1: no analysis to perform, merely a mechanical, deterministic Chris@1: reconstruction of the original audio data from the transform-domain Chris@1: representation.
Chris@1: Chris@1:Coding and decoding converts the transform-domain representation of Chris@1: the original audio produced by analysis to and from a bitwise packed Chris@1: raw data packet. Coding and decoding consist of two logically Chris@1: orthogonal concepts, back-end coding and bitpacking.
Chris@1: Chris@1:Back-end coding uses a probability model to represent the raw numbers Chris@1: of the audio representation in as few physical bits as possible; Chris@1: familiar examples of back-end coding include Huffman coding and Vector Chris@1: Quantization.
Chris@1: Chris@1:Bitpacking arranges the variable sized words of the back-end Chris@1: coding into a vector of octets without wasting space. The octets Chris@1: produced by coding a single short-time audio segment is one raw Vorbis Chris@1: packet.
Chris@1: Chris@1:Vorbis packets contain the raw, bitwise-compressed representation of a Chris@1: snippet of audio. These packets contain no structure and cannot be Chris@1: strung together directly into a stream; for streamed transmission and Chris@1: storage, Vorbis packets are encoded into an Ogg bitstream.
Chris@1: Chris@1: