Seminário de Multimédia – 2003/2004

 

 

 

 

 

 

 

 

 

 

 

 

 

Ogg Vorbis

 

Um codec para áudio

 

 

 

 

 

João Pedro Ferreira Gomes Maltez – jmaltez@student.dei.uc.pt

Elsio Mendes Cardoso – elsio@student.dei.uc.pt

José Miguel de Jesus Perdigão – jmjesus@student.dei.uc.pt


Índice

Índice. 2

Introdução. 2

Objectivo. 2

Introdução ao áudio digital 2

A História. 3

A Fundação Xiph. 4

A Filosofia. 4

Compressão de áudio. 5

Generalidades. 5

Compressão não destrutiva. 5

Compressão destrutiva. 6

Compressão Ogg Vorbis. 7

Especificação e Introdução. 7

Algoritmo de compressão. 7

Bitstream do Ogg Vorbis. 7

Bibliotecas associadas e extensões. 8

Setup/TearDown. 9

Descodificaçao: 9

Procura. 10

Generalidades sobre vários outros formatos. 11

Generalidades. 11

Mp3. 11

WMA. 11

Real Áudio. 11

Comparação de qualidade entre vários formatos referência. 12

Generalidades. 12

Comparações e ficheiros exemplo. 12

Codificação a 64 Kbits por segundo (1) 12

Codificação a 128Kbits por segundo. 13

Conclusão. 13

Bibliografia. 13

Introdução

Objectivo

            Pretende-se com este trabalho dar a conhecer melhor o codec Ogg Vorbis, um codec de áudio livre, gratuito e aberto que afirma ter melhores prestações do que todos os outros codecs do género a todos os níveis.

            Este codec implementa compressão de áudio destrutiva, tal como o mp3, o Wma ou o Real Áudio.

            Para tal começaremos por fazer uma pequena introdução ao som digital. Em seguida analisaremos a história e filosofia deste projecto, o seu funcionamento e terminaremos com uma comparação de qualidade dos resultados entre este e outros codecs.

Introdução ao áudio digital

            Pretende-se com este trabalho estudar a forma como o formato Ogg Vorbis trata o som e quais a técnicas utilizadas na codificação e armazenamento de áudio digital. Para isso precisamos de saber o que é o som.

O som não é mais do que um fenómeno físico causado pela vibração da matéria em nosso torno, essa vibração altera a pressão do ar, e essa alteração de pressão propaga-se pelo ar de forma ondulatória. São essas ondas que o ouvido humano consegue captar e consequentemente sentir o som.

Uma onda sonora caracteriza-se por apresentar a mesma forma em intervalos regulares, a cada um desses intervalos chama-mos período. O número de períodos por segundo representa a frequência da onda sonora.

            O ouvido humano consegue captar frequências sonoras entre o 20Hz e os 20kHz. Os sons que estejam entre estes valores são designados por audio.

            Tudo isto parece bastante simples, no entanto um computador não consegue representar uma onda sonora tal como esta é na realidade, então este terá que converter o som real (analógico) para digital. Essa conversão é feita pelo ADC (“analogue to digital converter”).

            Para simular a onda, o computador mede a amplitude (deslocamento da onda em relação ao seu valor médio), em determinados intervalos de tempo. Cada um desses intervalos é designado por amostra. A frequência a que é feita cada uma das amostras, designa-se por frequência de amostragem, sendo esta frequência responsável pela qualidade do som.

 

O sinal real…

 

 

 

…é medido contra um relogio…

 

 

 

…é tomado em cada ciclo…

 

 

 

…para que se possa fazer a amostragem

 

 

 

Cada amostra é representada por um determinado número de bits. Um maior número de bits garante uma maior fidelidade na representação digital, pois cada amostra terá um maior número de valores possíveis de representar. Cada amostra é traduzida por um sinal digital sendo este medido em impulsos de modulação, PCM.

 

A História

            O projecto Vorbis começou em 1993 como uma “brincadeira” para tentar fazer um pacote de compressão de áudio relativamente simples e era denominado na altura de “Squish”. O projecto e a questão fundamental por detrás do mesmo – a compressão de música – começaram no entanto a tomar proporções bem maiores do que aquelas que os autores inicialmente previram.

            Depois de um pequeno problema com os direitos comerciais do nome “Squish” o projecto foi renomeado OggSquish (“Ogg” é um termo relacionado com um jogo de computador chamado Netrek).

            Na altura em que a compressão Ogg dava os seus primeiros passos, estávamos na altura dos PC 386 e 486. Dado o poder de processamento disponível a codificação e descodificação neste formato era muito pesada, enquanto se ouvia uma música, não sobrava processador para muito mais.

            Hoje em dia o Ogg é um grande projecto de multimédia que não envolve apenas a compressão de áudio. O Squish, vulgarmente chamado Ogg tornou-se um dos vários projectos na área dos codecs da recém-nascida fundação Xiph, o berço deste e muitos outros projectos ligados à compressão e distribuição digital de áudio. O Squish foi substituído pelo Vorbis, que é actualmente o maior projecto no âmbito da compressão de música da fundação Xiph.

            O logótipo do codec está relacionado com a mitologia nórdica e brinca com alguns conceitos relacionados com a compressão de áudio. Thor levanta o Mjollnir (martelo mágico) e prepara-se para “comprimir” Jörmungandr, a serpente de forma sinusoidal, tal como um sinal periódico.

A Fundação Xiph

            Quando se fala de Ogg, não estamos a falar apenas de um formato de compressão, estamos a falar de um projecto que engloba um conjunto de ferramentas de compressão de diferentes tipos de áudio. A fundação Xiph alberga neste momento dentro do Ogg os seguintes sub projectos

 

 

Paralelamente com o Ogg, a fundação Xiph alberga também os seguintes projectos

 

 

O símbolo da fundação é o Xiphophorus helleri um peixe de aquário relativamente comum. O nome cumpre – nas palavras dos seus impulsionadores – a característica base de um nome relacionado com a tecnologia ou seja o facto de ter um X. O facto de ser impossível de pronunciar é um bónus.

A Filosofia

            A filosofia que está por detrás deste codec prende-se com a sua liberdade de utilização, pois este não está registado sob a forma de nenhuma patente. O Ogg Vorbis é completamente “royalty-free”

            Um músico que queira distribuir os seus trabalhos neste formato, não precisa de pagar por cada peça que venda, ao contrário de outros formatos.

            Um utilizador final poupa em custos de largura de banda e só tem a ganhar com a qualidade.

            Uma empresa de software que use este formato nos seus programas não vai ter de pagar para o fazer. Veja-se o caso da Epic Games e muitas outras.

            Ogg Vorbis é software livre.

Compressão de áudio

Generalidades

A compressão de dados sempre foi uma preocupação no campo informático, motivada quer pela constante necessidade de poupança em espaço de armazenamento, quer pela necessidade de adaptação dos formatos de dados aos novos canais usados para a sua transmissão, como por exemplo a Internet. A utilização de dados comprimidos não é novidade. Formatos como o Zip, Gzip, Bzip, Rar, Arj ou Ace para compressão de documentos genéricos são vulgares. No entanto este tipo de compressão não satisfaz as necessidades específicas do áudio ou de outros tipos de dados. Tiveram pois de se criar formatos específicos para cada um deles.

Quando se fala de compressão de dados há que distinguir duas grandes famílias de algoritmos. Podemos ter algoritmos de compressão não destrutiva ou destrutiva. Analisaremos em seguida as diferenças entre os dois tipos, bem como a vantagens e desvantagens.

Compressão não destrutiva

            Quando se pretende enviar um documento de texto para um colega, não se pretende que o documento seja alterado de alguma forma, mesmo que seja para servir os interesses da transmissão. Os algoritmos de compressão não destrutiva fazem uso da redundância dos dados para os comprimir. Temos por exemplo uma sequência de bits em que se verifica a existência de padrões ou em que temos grandes sequências de símbolos iguais. Podemos então codificar uma sequência de n símbolos com um conjunto muito mais reduzido de símbolos sem estarmos a descartar informação. A operação inversa ou seja a descompressão passa simplesmente por ler os símbolos codificados e reconstruir a informação original.

 

 

 

 

 

 

São exemplos de compressão de áudio lossless os seguintes codecs:

 

Codec

Autor

AudioPaK

M. Hans, R. Schafer

DVD

P. Craven et al.

LTAC

M. Purat, T. Liebchen, P. Noll

MUSICompress

A. Wegener

Ex-OggSquish (actual FLAC)

C. Montgomery

Philips

A. Bruekers, A. Oomen,

R. van der Vleuten

Shorten

T. Robinson

Sonarc

R. Sprague

WA

D. Lee

A compressão não destrutiva tem portanto a vantagem de não obrigar a perdas de qualidade. No entanto o facto de termos de codificar a totalidade dos dados, este tipo de algoritmos gera ficheiros muito grandes, quando comparados com os algoritmos destrutivos que veremos em seguida.

 

 

Compressão destrutiva

            A compressão destrutiva faz uso de técnicas de eliminação de informação que não pode ser percepcionada pelos sentidos humanos. Explora-se para além da redundância (correlação) a irrelevância. A psicoacústica diz-nos que existem limiares a partir dos quais o ouvido humano é incapaz de ouvir e diz-nos também que a sobreposição de determinadas frequências anula outras. A filosofia subjacente a estes codecs é “Se eu não ouço, não faz sentido guardar”.

O ouvido humano não capta sons cujas frequências sejam inferiores a 200Hz ou superiores a 20000Hz logo tudo o que está fora destas gamas é desprezado. Em seguida, com recurso a tabelas de bandas críticas, são analisadas as frequências que não serão perceptíveis por “masking” de frequência e logo não interessa codificar. Podemos também observar que existe um fenómeno de “masking” temporal. Uma determinada frequência pode mascarar outras vizinhas durante breves períodos de tempo.

Atendendo a estas considerações, podemos concluir que existe necessariamente muito a ganhar em termos de espaço se descartarmos toda a informação irrelevante. No entanto não nos podemos esquecer que mesmo o melhor algoritmo “lossy” pode estar sem que nos apercebamos a deitar fora informação relevante, pois consideramos que não existe um algoritmo genérico adequado a todos os tipos de áudio. Como em muitas outras situações, cada caso é um caso. Não podemos pois pensar que ouvir um ficheiro comprimido em Ogg vai soar exactamente como se o estivéssemos a ouvir directamente de um CD áudio. Evidentemente os factores ambientais também afectam directamente a percepção que temos da qualidade do áudio. Ouvir o mesmo ficheiro num sistema de som de qualidade ou noutro mais duvidoso produzirá com certeza resultados díspares. Bem como será talvez complicado distinguir um CD de um ficheiro comprimido num sistema de má qualidade mas perfeitamente possível de o fazer num sistema de alta-fidelidade.

Agora que distinguimos as duas grandes famílias de algoritmos de compressão, vejamos como funciona o Ogg Vorbis, um codec que recorre aos dois tipos de compressão.

Compressão Ogg Vorbis

Especificação e Introdução

            O Ogg Vorbis é um codec genérico para áudio perceptual pensado para permitir a máxima flexibilidade na codificação, permitindo a escalabilidade numa gama alargada de bitrates. Na qualidade máxima (CD ou DAT) está ao nível de um MPEG-2 ou de um MPC. Da mesma maneira a versão 1.0 do encoder pode codificar áudio de qualidade CD ou DAT em stereo abaixo dos 48Kbps sem fazer um resampling para uma bitrate menor. O Vorbis está também direccionado no entanto para outras gamas de sample rates superiores e inferiores. Pode codificar desde 8Khz (telefone) até 192Khz (Masterização digital) e pode ainda representar um variado número de canais sonoros monoaural, polifónico, estereofónico, quadrafónico, 5.1, ambisónico ou até um máximo de 255 canais discretos. É no entanto na codificação de música digital que tem a sua maior aplicação neste momento.

 

Algoritmo de compressão

            O algoritmo de compressão executa a Modificação da Transformada Discreta do Cosseno (MDCT) que é um tipo de Transformada Discreta de Fourier que permite mudar do domínio do tempo para o domínio da frequência. A Transformada de fourier é uma técnica fundamental do Processamento do Sinal Digital (ASP). O algoritmo, intuitivamente, tenta evitar utilizar bits para codificar informação áudio que não é percepcionada pelo ser humano, aumentando a compressão. O algoritmo da Vorbis executa o MDCT em séries de janelas sobrepostas de dois tamanhos diferentes. A diferença de tamanhos das janelas é usada para controlar eventos espalhados ao longo do tempo, chamadas pre-echo que são produzidos pelo MDCT como resultados de aumentos súbitos na energia sonora, fruto de aumentos súbitos de volume sonoro ou certos tipos de fonemas.

O processo de compressão começa com os resultados provenientes da MDCT. De seguida é feita uma máscara psico-acustica dos dados. Esta máscara consiste em aplicar aos dados uma escala de dB que está compreendida entre o valor mínimo e máximo perceptível pelo ser humano. Depois de atribuído um valor em dB os dados são convertidos em bits.

Em seguida os dados são analisados novamente e o resultado é codificado com recurso a códigos de Huffman e o resultado é depois escrito no buffer de saída.

Em seguida é aplicada uma codificação entrópica ao resultado, baseada em “codebooks” que são depois embutidos no ficheiro final.

Bitstream do Ogg Vorbis

            A bitstream é o conjunto de bits ordenados de uma forma conhecida que constituem um ficheiro. A bitstream do vorbis 1.0 está bem definida pelos seus criadores mas ainda não está documentada, o que torna um pouco complicado abordar este tema com a absoluta certeza. Do que sabemos do formato, baseado na implementação actual, tiramos que o formato Vorbis tem uma bistream própria que é posteriormente encapsulada na bitstream do “Container” Ogg.

Uma bitstream Vorbis é uma sequencia de pacotes (packets). Cada bitstream começa com uma sequencia de três packets de cabeçalho, um com um parâmetro, outro com um comentário e outro com um livro de código (codebook). Em seguida aparece uma sequencia de pacotes (chamados “analysis packets”) que contêm os dados comprimidos do áudio.

A posição e interpretação dos dois primeiros campos é a mesma para todos os tipos de cabeçalhos. Todos os campos de cabeçalho estão nos bits menos significativos. Aparentemente todos os packets que não tenham um tamanho inteiro são preenchidos com zeros até que constituam um numero inteiro de bytes (de 8 bits)

            Existem 11 tipos diferentes de packets que podem ser usados para as mais diversas funções, conforme se pode ver na seguinte tabela:

 

A1 – Header packet

Header genérico que serve de base a todos os outros

A2 – Parameter header packet

Contem o tipo de stream e outras informações respeitantes ao bitrate, número de canais, etc.

A3 – Comment header packet

Informação sobre o encoder utilizado, quem o fabricou, etc. Contem também os campos de metadados com o nome da musica, o seu autor, o álbum, etc.

A4 - Codebook header packet

Contem informação sobre os livros de código utilizados pelo algoritmo de Huffman para a compressão de dados. Vai conter outros headers do tipo codebook

5 – Codebook

Livros de códigos de Huffman utilizados pelo descodificador para reconstruir a sequencia original de bits.

6 – Ordered codebook codeword table

7 – Unordered codebook codeword table

8 – Codebook value table

9 – Backend block

Contem os vários backends (de 0 a 64) que podem ser anexados ao ficheiro

10 – Residue backend parameters

Contem o backend propriamente dito.

11 – Analisys packet

Contem o áudio comprimido propriamente dito.

Bibliotecas associadas e extensões

A biblioteca VorbisFile fornece um API adequado para uma fácil manipulação e descodificação das Vorbis I audio streams.

A VorbisFile API é constituída pelas seguintes categorias:

 

Existem várias estruturas de dados que são usadas para manter a informação dos ficheiros e da bitstream durante a descodificação, sendo estas declaradas em "vorbis/vorbisfile.h" e "vorbis/codec.h".

 

Estruturas Dados

Descrição

Ogg Vorbis_File

Contém a informação base sobre ficheiro de áudio e varias informações acerca da bitstream. Contem ainda um ponteiro para o ficheiro ou para a bitstream.

Vorbis_Comment

Contém os vários comentários do ficheiro assim como a descrição do vendedor.

Vorbis_Info

Contém várias informações acerca do codificador, do canal e também contem informações sobre os limites de bitrate

OV_Callbacks

Contém vários ponteiros para as rotinas de manipulação dos ficheiros.

Setup/TearDown

Quando se tenta descodificar áudio usando a libvorbisfile, uma bitstream composta por Vorbis áudio deve ser devidamente inicializada antes da descodificação e no fim da descodificação deve-se “limpar” a bitstream.
Para tal existe uma série de funções:

 

 

Para abrir um ficheiro Vorbis é utilizada a rotina OV_Open(), caso a rotina seja bem sucedida o ficheiro está pronto a ser utilizado. No fim deste ser utilizado é chamada a rotina OV_Clear() que vai fechar o ficheiro e “dealocar” todos os recursos necessários à descodificação.

Descodificaçao:

A descodificaçao da stream consiste em chamar a função OV_read(), sendo esta aplicada a uma vorbis stream.

 

Uma Vorbis stream é composta por uma ou varias secções, designadas por links, em que a codificação destas consiste em diferenciar os números dos canais ou as samples rates. A função ov_read() vai devolver os números das secções (links) e tratar as modificações do áudio nas fronteiras das secções.

Funções:

Procura

As funções de procura permitem especificar um determinado ponto na stream para começar ou continuar a descodificação.

Todas as rotinas de procura estão definidas em "vorbis/vorbisfile.h".

Existem determinadas funções de procura, de acordo com determinadas situações, se adequam melhor. No caso de o factor a ter em conta ser a velocidade e o posicionamento não ser relevante, deverá ser feita uma procura por vários níveis de paginas.

 

Funções:

 

 

Informação dos ficheiros

A Libvorbisfile contém várias funções que permitem obter informações acerca dos atributos da bistream e do estado da descodificação.

 

Funções:

 

 

Generalidades sobre vários outros formatos

Generalidades

            O aparecimento do formato Ogg não é uma novidade no campo da compressão de dados áudio – muito já tinha sido feito antes noutros formatos. Pode dizer-se que a investigação sobre esta matéria começou em 1987 pelo IIS (Institut Integrierte Schaltungen), na Alemanha, juntamente com a Universidade de Erlangen, começou a trabalhar numa codificação perceptual de áudio para “Digital Audio Broadcasting” (Transmissão Digital de Áudio). O primeiro a aparecer foi o mp3 que tem sido muito bem sucedido e que incentivou outras entidades a criar os seus próprios formatos de áudio comprimido.

Assim vamos apresentar em traços muito gerais três dos formatos mais conhecidos e utilizados, para que se possa em seguida fazer uma pequena comparação.

Mp3

            O mp3 é um formato de compressão de áudio desenvolvido pelo Fraunhofer IIS em 1987 com o objectivo reduzir o tamanho dos dados áudio sem perder qualidade.

A sigla mp3 representa o algoritmo de compressão de áudio chamado MPEG Audio Layer-3 e que permite comprimir áudio com qualidade próxima de cd mas que ocupa muito menos espaço

O facto de o mp3 conseguir comprimir um minuto de musica em aproximadamente 1,4MB, comparado com o áudio PCM em que um minuto são cerca de 10 Mb, permitiu uma vasta divulgação e acesso à música na internet.

WMA

            O WMA (Windows Media Audio) é um formato de compressão de áudio semelhante ao mp3 que surge para competir com este mas principalmente com o RealAudio.

Apesar de o formato WMA permitir economizar espaço, a qualidade é inferior ao formato mp3. O WMA é royalty-free.

Real Áudio

            O RealAudio é um formato de compressão e transmissão de áudio que permite a audição em tempo real via internet (“streaming”).

Para que tal seja possível o algoritmo de compressão é do tipo destrutivo, originando perda de dados e respectiva qualidade do som. 

Assim, o formato RealAudio, é o melhor para ter um primeiro contacto com os dados áudio e para transmissões de rádio via internet sendo no entanto preferível usar os dados áudio nos formatos mp3 e WMA.

 

Comparação de qualidade entre vários formatos referência

Generalidades

            Pretende-se com esta secção apresentar um pequeno comparativo da qualidade final dos ficheiros depois de codificados em três formatos de referência. Para tal serão usados ficheiros exemplo retirados do site do Ogg Vorbis bem como alguns criados por nós.

            Em todas as comparações procurou-se que todos os formatos partissem das mesmas condições, os resultados das diversas codificações podem ser ouvidos na versão online deste documento. No final teceremos algumas considerações sobre as diferenças de qualidade que forem perceptíveis, comparando a mesma amostra nos diversos formatos e a mesma amostra ouvida em equipamento sonoro diferente.

Comparações e ficheiros exemplo

Codificação a 64 Kbits por segundo (1)

Quadro de comparação:

 

Formato

Bit rate (Kbps)

Tempo extracção+codificação (s)

Tamanho ficheiro (MB)

Mp3

64

21

1.13

Ogg

64

19

1.09

Wma

64

17

1.15

Rmj

64

n.d.

1.22

 

Considerações sobre a qualidade do áudio resultante:

 

 

 

 

Codificação a 128Kbits por segundo

 

Formato

Bit rate (Kbps)

Tempo extracção+codificação (s)

Tamanho ficheiro (MB)

Mp3     

128

17

2.27

Ogg

128

19

2.13

Wma

128

17

2.28

Rmj

132

n.d.

2.46

 

Considerações sobre a qualidade do áudio resultante:

 

Das observações realizadas tiramos que o Ogg Vorbis ganha em tamanho de ficheiro final e em qualidade, o que se nota sobretudo a bitrates muito baixas. Em bitrates mais altas, é complicado distinguir qual dos formatos está a tocar, pois todos eles são bastante bons.

 

(1) – O Ogg Vorbis usa VBR, logo o seu valor é aproximado. O Real Media 8 não permite codificação a 128Kbps. O valor mais próximo que foi utilizado é de 132Kbps.

Conclusão

           

            O Ogg Vorbis é um codec “lossy” que se baseia numa Modificação da Transformada Discreta do Co-seno e que utiliza também códigos de Huffman, Para duas compressões, uma “lossy” e outra “lossless”.

            Para bitrates baixas o Ogg Vorbis tem uma qualidade de longe superior aos seus concorrentes. O som é quase cristalino quando comparado com os adversários, no entanto para bitrates mais altas, a diferença de qualidade começa a esbater-se. Os tamanhos finais de ficheiro ficam sempre abaixo da média, para qualquer bitrate.

O Formato Ogg Vorbis apresenta inúmeras vantagens, sendo a principal o facto de se assumir como software livre. Livre de patentes, livre de “royalties” e livre de taxas de utilização.

O Ogg Vorbis é por isso uma alternativa credível a todos os outros codecs de áudio semelhantes.

           

Bibliografia

Graham Mitchell – “An introduction to compressed audio with Ogg Vorbis” - http://grahammitchell.net/writings/vorbis_intro.html

 

Free Computer Shop – “What is a Modified Discrete Cosine Transform?” - http://www.free-comp-shop.com/vorbis.html

 

Xiph Foundation – http://www.xhip.org/

 

The Ogg Vorbis team - http://www.xiph.org/ogg/vorbis

 

 

Eng. Vinicius Brazil – “Compressão de audio. Problema ou solução?” - http://www.discoverstudio.com.br/discover/calandra.nsf/0/7ae32b251119985d802567300032b2ba?OpenDocument

 

Mike Coleman – “Vorbis Illuminated” - http://www.mathdogs.com/vorbis-illuminated/

 

Comparações de qualidade

Teste1

Aqui podem ver todas as comparações efectuadas pelos senhores da Vorbis

 

http://www.xiph.org/ogg/vorbis/listen.html

Teste2 – Compilação – 64Kbps

Aqui podem ver os ficheiros codificados por nós.

 

Mp3

WMA

Real Media 8

Ogg Vorbis