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

Uma codificação de áudio refere-se à maneira como os dados de áudio são armazenados e transmitidos. Na documentação abaixo, descrevemos como essas codificações funcionam. Para acessar diretrizes sobre como escolher a melhor codificação para seu aplicativo, consulte Práticas recomendadas.

A codificação de áudio digital é um tema complexo, e geralmente não é necessário saber os detalhes para processar áudio na API Speech. Os conceitos fornecidos aqui são apenas uma visão geral. Algumas dessas informações básicas podem ser úteis para entender como a API funciona e como o áudio precisa ser formulado e processado nos seus aplicativos.

Formatos de áudio x codificações

Observe que um formato de áudio não é equivalente a uma codificação de áudio. Um formato de arquivo popular como .WAV, por exemplo, define o formato do cabeçalho de um arquivo de áudio, mas não é uma codificação de áudio por si só. Arquivos de áudio. .WAV, muitas vezes, usam uma codificação PCM linear. Não presuma que um arquivo .WAV tenha uma codificação específica até que o cabeçalho seja inspecionado.

FLAC, no entanto, é um formato de arquivo e uma codificação, o que às vezes causa confusões. Dentro da API Speech-to-Text, o FLAC é a única codificação que requer que os dados de áudio incluam um cabeçalho. Todas as outras codificações de áudio especificam dados de áudio sem cabeçalho. Quando nos referirmos a FLAC dentro da API Speech-to-Text, sempre nos referimos ao codec. Quando nos referirmos a um formato de arquivo FLAC, usaremos o formato de "um arquivo .FLAC."

Não é necessário especificar a codificação e a taxa de amostra para arquivos WAV ou FLAC. Se omitido, o Speech-to-Text determinará automaticamente a codificação e a taxa de amostragem para arquivos WAV ou FLAC com base no cabeçalho do arquivo. Se você especificar um valor de codificação ou de taxa de amostragem que não corresponda ao valor no cabeçalho do arquivo, o Speech-to-Text retornará um erro.

Codificações de áudio compatíveis

A Speech-to-Text API é compatível com várias codificações diferentes. A tabela a seguir lista codecs de áudio compatíveis:

Codec Nome Sem perdas Notas de uso
MP3 Camada de áudio MPEG III Não A codificação MP3 é um recurso Beta e está disponível apenas na v1p1beta1. Consulte a documentação de referência de RecognitionConfig para mais detalhes.
FLAC Codec de áudio livre sem perdas Sim 16 bits ou 24 bits obrigatórios para o stream
LINEAR16 Modulação por código de pulso linear Sim Codificação de modulação de código de pulso linear de 16 bits (PCM)
MULAW μ-law Não Codificação PCM de 8 bits
AMR Adaptive Multi-Rate banda estreita Não A taxa de amostra precisa ser 8.000 Hz
AMR_WB Adaptive Multi-Rate banda larga Não A taxa de amostragem precisa ser 16.000 Hz
OGG_OPUS Frames de áudio codificados Opus em um contêiner Ogg Não A taxa de amostragem precisa ser de 8.000 Hz, 12.000 Hz, 16.000 Hz, 24.000 Hz ou 48.000 Hz
SPEEX_WITH_HEADER_BYTE Speex banda larga Não A taxa de amostragem precisa ser 16.000 Hz

Para mais informações sobre codecs de áudio do Speech-to-Text, consulte a documentação de referência do AudioEncoding.

Se houver uma escolha ao codificar o material de origem, use uma codificação sem perdas como FLAC ou LINEAR16 para um melhor reconhecimento de fala. Para consultar diretrizes sobre como selecionar o codec apropriado para sua tarefa, veja as Práticas recomendadas.

Por que codificar?

O áudio é composto de formas de onda, que consistem na interposição de ondas de diferentes frequências e amplitudes. Para que sejam representadas em mídias digitais, as formas de onda precisam ser amostradas a taxas que podem (pelo menos) representar sons da maior frequência que você quer replicar, e elas também precisam armazenar profundidade de bits o bastante para representar a amplitude (intensidade e suavidade) adequada das formas de onda na amostra de som.

A capacidade de um dispositivo de processamento de som de recriar frequências é conhecida como resposta de frequência, e a capacidade de criar intensidade e suavidade adequadas é conhecida como faixa dinâmica. Juntos, esses termos muitas vezes são conhecidos como a fidelidade de um dispositivo de som. Uma codificação, em sua forma mais simples, é um meio para reconstruir o som usando esses dois princípios básicos, além de poder armazenar e transportar esses dados de maneira eficiente.

Taxas de amostragem

O som existe como uma forma de onda analógica. Um segmento de áudio digital se aproxima dessa onda analógica ao amostrar a amplitude dela a uma taxa rápida o suficiente para imitar as frequências intrínsecas da onda. A taxa de amostra de um segmento de áudio digital especifica o número de amostras a serem retiradas do material de origem de um áudio (por segundo). Uma taxa de amostra alta aumenta a capacidade do áudio digital de representar altas frequências de maneira fiel.

Como consequência do teorema de Nyquist-Shannon, geralmente é necessário fazer a amostra mais de duas vezes a maior frequência de qualquer onda sonora que você queira capturar digitalmente. Para representar o áudio dentro do alcance da audição humana (20 a 20.000 Hz), por exemplo, um formato de áudio digital precisa ser amostrado pelo menos 40.000 vezes por segundo. Em parte, é por isso que o áudio do CD usa uma taxa de amostra de 44.100 Hz.

Profundidades de bits

A profundidade de bits afeta o alcance dinâmico de uma determinada amostra de áudio. Uma profundidade de bits maior permite que você represente amplitudes mais precisas. Se você tiver muitos sons altos e baixos na mesma amostra de áudio, precisará de mais profundidade de bits para representar esses sons corretamente.

Profundidades de bits maiores também reduzem a relação sinal/ruído em amostras de áudio. O áudio musical do CD é fornecido com o uso de 16 bits de profundidade. O áudio de DVD usa 24 bits de profundidade, enquanto a maioria dos equipamentos de telefonia usa 8 bits de profundidade Certas técnicas de compressão podem compensar profundidades de bits menores, mas tendem a ter perdas.

Áudio sem compressão

A maioria dos processamentos de áudio digital usa essas duas técnicas (taxa de amostra e profundidade de bits) para armazenar dados de áudio de uma maneira simples. Uma das técnicas de áudio digital mais conhecidas (difundida no uso do Compact Disc) é chamada de Modulação por código de pulso (PCM, na sigla em inglês). O áudio é amostrado em intervalos estabelecidos, e a amplitude da onda amostrada nesse ponto é armazenada como um valor digital que usa a profundidade de bits da amostra.

O PCM linear (que indica que a resposta de amplitude é linearmente uniforme na amostra) é o padrão usado nos CDs, e na codificação LINEAR16 da API Speech-to-Text. As duas codificações produzem um stream de bytes não compactado que corresponde diretamente aos dados de áudio, e ambos os padrões contêm 16 bits de profundidade. O PCM linear usa uma taxa de amostra de 44.100 Hz nos CDs, o que é apropriado para a recomposição da música. No entanto, uma taxa de amostra de 16.000 Hz é mais adequada para a recomposição da fala.

O PCM linear (LINEAR16) é um exemplo de áudio sem compactação em que os dados digitais são armazenados exatamente conforme indicado pelos padrões acima. Ao ler um stream de bytes de um canal codificado usando PCM linear, você pode contar todos os 16 bits (2 bytes), por exemplo, para receber outro valor de amplitude da forma de onda. Quase todos os dispositivos podem manipular esses dados digitais nativamente. Você pode até mesmo cortar arquivos de áudio de PCM linear usando um editor de texto, mas, obviamente, áudios sem compressão não são a maneira mais eficiente de transportar ou armazenar áudios digitais. Por essa razão, a maioria dos áudios usa técnicas de compressão digital.

Áudio com compressão

Os dados de áudio, como todos os dados, geralmente são compactados para facilitar a armazenagem e o transporte. A compressão dentro da codificação de áudio pode ser sem perdas ou com perdas. A compressão sem perdas pode ser descompactada para restaurar os dados digitais para a forma original. No processo com perdas, há a remoção de algumas dessas informações durante a compressão e a descompressão, além de parametrização com o objetivo de indicar a quantidade de tolerância a oferecer à técnica de compressão para remover dados.

Compressão sem perdas

A compressão sem perdas comprime os dados de áudio digital usando rearranjos complexos dos dados armazenados, mas não resulta em degradação na qualidade da amostra digital original. Com a compressão sem perdas, nenhuma informação será perdida na descompactação dos dados para a forma digital original.

Então por que as técnicas de compressão sem perdas às vezes têm parâmetros de otimização? Esses parâmetros geralmente trocam o tamanho do arquivo 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 (o menor tamanho de arquivo). A compressão FLAC de nível superior não perderá nenhuma informação em comparação com a compressão de nível inferior. Em vez disso, o algoritmo de compressão só precisará gastar mais energia computacional ao construir ou desconstruir o áudio digital original.

A API Speech-to-Text é compatível com duas codificações sem perdas: FLAC e LINEAR16. Tecnicamente, a LINEAR16 não é "compressão sem perdas" porque nenhuma compressão é envolvida. Se o tamanho do arquivo ou a transmissão de dados for importante para você, escolha FLAC como codificação de áudio.

Compressão com perdas

A compressão com perdas, por outro lado, comprime os dados de áudio ao eliminar ou reduzir certos tipos de informações durante a construção dos dados compactados. A Speech-to-Text API é compatível com vários formatos com perda. No entanto, evite-os se você tiver controle sobre o áudio, já que a perda de dados pode afetar a precisão do reconhecimento.

O conhecido codec MP3 é um exemplo de uma técnica de codificação com perdas. Todas as técnicas de compressão do MP3 removem o áudio de fora da faixa de áudio de um humano normal e arrumam a quantidade de compressão por meio do ajuste da taxa de bits efetiva do codec MP3 ou da quantidade de bits por segundo para armazenar os dados do áudio.

Por exemplo, um CD estéreo que usa 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 do MP3 remove esses dados digitais usando taxas de bits, como 320 kbps, 128 kbps ou 96 kbps, por exemplo, com a degradação resultante da qualidade de áudio. O MP3 também é compatível com taxas de bits variáveis, que podem comprimir o áudio ainda mais. Ambas as técnicas perdem informações e podem afetar a qualidade. A maioria das pessoas consegue distinguir entre 96 kbps ou 128 kbps de música MP3 codificada, por exemplo.

Outras formas de compressão vão parametrizar alguma outra restrição.

MULAW é uma codificação PCM de 8 bits, na qual a amplitude da amostra é modulada de maneira logarítmica em vez de linear. Como resultado, o uLaw reduz a faixa dinâmica efetiva do áudio compactado assim. O uLaw foi introduzido para otimizar especificamente a codificação da fala em contraste com outros tipos de áudio, mas o LINEAR16 de 16 bits (PCM sem compressão) ainda é muito superior ao áudio com compressão de 8 bits.

AMR e AMR_WB modulam a amostra de áudio codificada por meio da introdução de uma taxa de bits variável na amostra do áudio de origem.

O API Speech-to-Text é compatível com vários formatos com perdas, mas evite-os se você tiver controle sobre o áudio de origem. A remoção desses dados por meio da compactação com perdas pode não afetar de maneira significativa o áudio ouvido por humanos, mas a perda desses dados pode degradar significativamente a precisão de um mecanismo de reconhecimento de fala.