Introdução à codificação de áudio

Uma codificação de áudio refere-se à forma como os dados de áudio são armazenados e transmitidos. A documentação abaixo descreve como funcionam essas codificações. Para ver diretrizes sobre como escolher a melhor codificação para a sua aplicação, consulte as práticas recomendadas.

A codificação de áudio digital é um tópico complexo e, geralmente, não precisa de saber os detalhes para processar áudio na API Speech. Os conceitos apresentados aqui destinam-se apenas a uma vista geral. Algumas destas informações gerais podem ser úteis para compreender como funciona a API e como o áudio deve ser formulado e processado nas suas aplicações.

Formatos de áudio vs. codificações

Tenha em atenção que um formato de áudio não é equivalente a uma codificação de áudio. Um formato de ficheiro popular, como .wav, por exemplo, define o formato do cabeçalho de um ficheiro de áudio, mas não é, em si, uma codificação de áudio. Os ficheiros de áudio .wav usam frequentemente, mas nem sempre, uma codificação PCM linear. Não assuma que um ficheiro .wav tem uma codificação específica até inspecionar o respetivo cabeçalho.

Configuração da descodificação

Os parâmetros necessários para descodificar o áudio transmitido são especificados no elemento decoding_config oneof.

Se o áudio estiver num dos formatos suportados pelo AutoDetectDecodingConfig é altamente recomendável que defina o campo auto_decoding_config para permitir que o Speech-to-Text determine os parâmetros corretos por si.

Caso contrário, tem de especificar explicitamente os parâmetros de descodificação definindo o campo explicit_decoding_config. Normalmente, pode encontrar estes parâmetros consultando as definições usadas para gravar o áudio.

Porquê codificar?

O áudio é composto por formas de onda, que consistem na interposição de ondas de diferentes frequências e amplitudes. Para representar estas formas de onda em suportes digitais, é necessário amostrá-las a taxas que possam (pelo menos) representar sons da frequência mais alta que quer replicar. Também é necessário armazenar uma profundidade de bits suficiente para representar a amplitude adequada (volume e suavidade) das formas de onda na amostra de som.

A capacidade de um dispositivo de processamento de som recriar frequências é conhecida como a sua resposta de frequência, e a capacidade de criar o volume e a suavidade adequados é conhecida como o seu intervalo dinâmico. Em conjunto, estes termos são frequentemente denominados fidelidade de um dispositivo de som. Uma codificação, na sua forma mais simples, é um meio com o qual se pode reconstruir o som através destes dois princípios básicos, bem como armazenar e transportar esses dados de forma eficiente.

Taxas de amostragem

O som existe como uma forma de onda analógica. Um segmento de áudio digital aproxima-se desta onda analógica através da amostragem da amplitude desta onda analógica a uma velocidade suficientemente rápida para imitar as frequências intrínsecas da onda. A taxa de amostragem de um segmento de áudio digital especifica o número de amostras a retirar do material de origem de um áudio (por segundo). Uma taxa de amostragem elevada aumenta a capacidade do áudio digital de representar fielmente as frequências elevadas.

Como consequência do teorema de Nyquist-Shannon, geralmente, tem de amostrar mais do dobro da frequência mais elevada de qualquer onda sonora que queira captar digitalmente. Para representar o áudio dentro do alcance da audição humana (20 a 20 000 Hz), por exemplo, um formato de áudio digital tem de fazer a amostragem, pelo menos, 40 000 vezes por segundo (que é parte do motivo pelo qual o áudio de CD usa uma taxa de amostragem de 44 100 Hz).

Profundidades de bits

A profundidade de bits afeta o intervalo dinâmico de uma determinada amostra de áudio. Uma profundidade de bits mais elevada permite representar amplitudes mais precisas. Se tiver muitos sons altos e baixos na mesma amostra de áudio, precisa de uma maior profundidade de bits para representar esses sons corretamente.

As profundidades de bits mais elevadas também reduzem a relação sinal/ruído nas amostras de áudio. O áudio musical de CD é fornecido com uma profundidade de bits de 16 bits. O DVD Audio usa 24 bits de profundidade de bits, enquanto a maioria dos equipamentos de telefonia usa 8 bits de profundidade de bits. (Determinadas técnicas de compressão podem compensar as profundidades de bits mais pequenas, mas tendem a ser com perdas.)

Áudio não comprimido

A maioria do processamento de áudio digital usa estas duas técnicas (taxa de amostragem e profundidade de bits) para armazenar dados de áudio de forma simples. Uma das técnicas de áudio digital mais populares (popularizada na utilização do disco compacto) é conhecida como modulação por código de impulsos (ou PCM). O áudio é amostrado a intervalos definidos e a amplitude da onda amostrada nesse ponto é armazenada como um valor digital através da profundidade de bits da amostra.

O PCM linear (que indica que a resposta de amplitude é linearmente uniforme em toda a amostra) é a norma usada nos CDs e na codificação da API Speech-to-Text.LINEAR16 Ambas as codificações produzem um fluxo não comprimido de bytes correspondentes diretamente aos dados de áudio, e ambas as normas contêm 16 bits de profundidade. O PCM linear usa uma taxa de amostragem de 44 100 Hz em CDs,o que é adequado para a recomposição de música. No entanto, uma taxa de amostragem de 16 000 Hz é mais adequada para recompor a fala.

O PCM linear é um exemplo de áudio não comprimido, uma vez que os dados digitais são armazenados exatamente como os padrões acima implicam. Ao ler uma stream de um canal de bytes codificados através de PCM linear, pode contar a cada 16 bits (2 bytes), por exemplo, para obter outro valor de amplitude da forma de onda. Quase todos os dispositivos podem manipular esses dados digitais de forma nativa. Pode até recortar ficheiros de áudio Linear PCM com um editor de texto. No entanto, (obviamente) o áudio não comprimido não é a forma mais eficiente de transportar ou armazenar áudio digital. Por esse motivo, a maioria do áudio usa técnicas de compressão digital.

Áudio comprimido

Os dados de áudio, como todos os dados, são frequentemente comprimidos para facilitar o armazenamento e o transporte. A compressão na codificação de áudio pode ser sem perdas ou com perdas. A compressão sem perdas pode ser descompactada para restaurar os dados digitais à sua forma original. A compressão com perdas remove necessariamente algumas dessas informações durante a compressão e a descompressão, e é parametrizada para indicar a tolerância a dar à técnica de compressão para remover dados.

Compressão sem perdas

A compressão sem perdas comprime os dados de áudio digital através de reorganizações complexas dos dados armazenados, mas não resulta numa degradação da qualidade da amostra digital original. Com a compressão sem perdas, quando descompacta os dados na respetiva forma digital original, não perde informações.

Então, por que motivo as técnicas de compressão sem perdas têm, por vezes, parâmetros de otimização? Estes parâmetros trocam frequentemente o tamanho do ficheiro pelo tempo de descompressão. Por exemplo, o FLAC usa um parâmetro de nível de compressão de 0 (mais rápido) a 8 (tamanho de ficheiro mais pequeno). A compressão FLAC de nível superior não perde informações em comparação com a compressão de nível inferior. Em alternativa, o algoritmo de compressão só precisa de gastar mais energia computacional ao construir ou desconstruir o áudio digital original.

A API Speech-to-Text suporta duas codificações sem perdas: FLAC e LINEAR16. Tecnicamente, LINEAR16 não é "compressão sem perdas" porque não existe qualquer compressão. Se o tamanho do ficheiro ou a transmissão de dados for importante para si, escolha FLAC como opção de codificação de áudio.

Compressão com perdas

Por outro lado, a compressão com perdas comprime os dados de áudio eliminando ou reduzindo determinados tipos de informações durante a construção dos dados comprimidos. A API Speech-to-Text suporta vários formatos com perdas, embora deva evitá-los se tiver controlo sobre o áudio, uma vez que a perda de dados pode afetar a precisão do reconhecimento.

O popular codec MP3 é um exemplo de uma técnica de codificação com perdas. Todas as técnicas de compressão MP3 removem o áudio fora do alcance de áudio normal de um ser humano e ajustam a quantidade de compressão ajustando a taxa de bits eficaz do codec MP3 ou a quantidade de bits por segundo para armazenar a data de áudio.

Por exemplo, um CD estéreo que use PCM linear de 16 bits tem uma taxa de bits efetiva de:

44100 * 2 channels * 16 bits = 1411200 bits per second (bps) = 1411 kbps

A compressão MP3 remove esses dados digitais através de taxas de bits, como 320 kbps, 128 kbps ou 96 kbps, por exemplo, com a consequente degradação da qualidade de áudio. O MP3 também suporta taxas de bits variáveis, que podem comprimir ainda mais o áudio. Ambas as técnicas perdem informações e podem afetar a qualidade. A maioria das pessoas consegue distinguir, por exemplo, entre música MP3 codificada a 96 kbps ou 128 kbps.

Outras formas de compressão parametrizam outra restrição.

MULAW é uma codificação PCM de 8 bits, em que a amplitude da amostra é modulada logaritmicamente em vez de linearmente. Como resultado, o uLaw reduz o intervalo dinâmico efetivo do áudio comprimido. Embora o uLaw tenha sido introduzido para otimizar especificamente a codificação de voz em contraste com outros tipos de áudio, o LINEAR16 de 16 bits (PCM não comprimido) continua a ser muito superior ao áudio comprimido uLaw de 8 bits.

AMR e AMR_WB modulam a amostra de áudio codificada através da introdução de uma taxa de bits variável na amostra de áudio de origem.

Embora a API Speech-to-Text suporte vários formatos com perdas, deve evitá-los se tiver controlo sobre o áudio de origem. Embora a remoção desses dados através da compressão com perdas possa não afetar visivelmente o áudio ouvido pelo ouvido humano, a perda desses dados para um motor de reconhecimento de voz pode degradar significativamente a precisão.