PCM +---------+ Ogg
----->| Encoder |------->
audio +---------+ stream
/ \
/ \
/ \
/ \
/ \
+--------+ +-----+ +---+ +-------+
| W+MDCT |--->| SAM |--->| Q |--->| VQ+HE |
+--------+ +-----+ +---+ +-------+
W+MDCT = Windowed Modified Discrete Cosine Transform
SAM = pSycho Acoustic Model
Q = Quantization
VQ+HE = Vector Quantization + Huffman Encoding
struct Ogg_Stream {
struct* Ogg_page;
};
struct Ogg_page {
uint8[4] Ogg_Magic_Number = "OggS" /* the Ogg magic number */
uint8 Version = 0;
uint8 Header_Type; /* type of page that follows: BOS, Continuation or EOS */
uint64 Granule Position; /* A time marker */
uint32 Bit-stream_Serial_Number; /* Identifies the stream in multi-stream seqs */
uint32 Page_Sequence_Number;
uint32 CRC32,
uint8 Page_Segmens; /* Number of segments in this page */
struct Segment_Table;
};
struct Segment_Table {
uint8* Segment_Length; /* In bytes */
};
[1] The Xiph Open Source Community. Vorbis audio compression.
http://xiph.org/vorbis.
[2] Xiph.Org Foundation. Ogg vorbis documentation.
http://xiph.org/vorbis/doc.
[3] Erik Montnémery and Johannes Sandvall. Ogg/Vorbis in embedded
systems. PhD thesis, Lunds Tekniska Högskola, Lunds Universitet, 2004.
[4] E. Terhardt. Calclating virtual pitch. Hearing Res., 1:155–182, 1979.