Introducción a la codificación de audio

Una codificación de audio se refiere a la forma en la que se almacenan y transmiten los datos de audio. En la siguiente documentación, se describe cómo funciona esta codificación. Si deseas conocer los lineamientos de la selección de la mejor codificación para tu aplicación, consulta Recomendaciones.

La codificación de audio digital es un tema complejo y, por lo general, no es necesario que conozcas los detalles para procesar audio en la API de Speech. Los conceptos que se proporcionan aquí solo constituyen una descripción general. Parte de esta información general puede ser útil para comprender cómo funciona la API, y cómo se debe formular y procesar el audio en tus aplicaciones.

Formatos de audio frente a codificaciones de audio

Ten en cuenta que un formato de audio no equivale a una codificación de audio. Un formato de archivo popular, como .WAV, define el formato del encabezado de un archivo de audio, pero no es una codificación de audio en sí mismo. Los archivos de audio .WAV a menudo (pero no siempre) usan una codificación PCM lineal; no supongas que un archivo .WAV tiene una codificación particular hasta inspeccionar su encabezado.

No obstante, FLAC es tanto un formato de archivo como una codificación, algo que a veces genera cierta confusión. En la API de Speech-to-Text, FLAC es la única codificación que requiere que los datos de audio incluyan un encabezado; todas las demás codificaciones de audio especifican datos de audio sin encabezado. Cuando mencionamos FLAC en la API de Speech-to-Text, siempre estamos haciendo referencia al códec. Cuando mencionamos un archivo con formato FLAC, usamos el formato "archivo .FLAC".

No es obligatorio que especifiques la codificación y la tasa de muestreo de los archivos WAV o FLAC. Si se omiten, Speech-to-Text determina automáticamente la codificación y la tasa de muestreo de los archivos WAV o FLAC sobre la base del encabezado del archivo. Si especificas un valor de codificación o de tasa de muestreo que no coinciden con el valor en el encabezado del archivo, Speech-to-Text muestra un error.

Codificaciones de audio compatibles

La API de Speech-to-Text admite varias codificaciones diferentes. En la siguiente tabla, se enumeran los códecs de audio compatibles:

Códec Nombre Sin pérdida Notas de uso
MP3 Capa de audio MPEG III No La codificación MP3 es una función beta y solo está disponible en v1p1beta1. Consulta la documentación de referencia de RecognitionConfig para obtener más información.
FLAC Códec de audio sin pérdida gratuito Se requieren 16 bits o 24 bits para transmisión continua.
LINEAR16 PCM lineal Codificación de modulación lineal por impulsos codificados (PCM) de 16 bits
MULAW Ley μ No Codificación PCM de 8 bits
AMR Banda estrecha con tasas de transferencia múltiples adaptables No La tasa de muestreo debe ser de 8,000 Hz.
AMR_WB Banda ancha con tasas de transferencia múltiples adaptables No La tasa de muestreo debe ser de 16,000 Hz.
OGG_OPUS Tramas de audio con codificación Opus en un contenedor Ogg No La tasa de muestreo debe ser una de las siguientes: 8,000 Hz, 12,000 Hz, 16,000 Hz, 24,000 Hz o 48,000 Hz.
SPEEX_WITH_HEADER_BYTE Banda ancha de Speex No La tasa de muestreo debe ser de 16,000 Hz.
WEBM_OPUS Opto de WebM No

Para obtener más información sobre los códecs de audio de Speech-to-Text, consulta la documentación de referencia de Codificación de audio.

Si puedes elegir la codificación del material fuente, usa una codificación sin pérdida, como FLAC o LINEAR16 para un mejor reconocimiento de voz. Si deseas conocer los lineamientos de la selección del códec apropiado para tu tarea, consulta Prácticas recomendadas.

¿Por qué codificar?

El audio consta de formas de onda, y consiste en la interposición de ondas de diferentes frecuencias y amplitudes. Para representar estas formas de onda en los medios digitales, se debe hacer un muestreo de las formas de onda a tasas de transferencia que puedan representar (al menos) sonidos de la frecuencia más alta que desees replicar, y también deben almacenar una profundidad de bits suficiente para representar la amplitud adecuada (sonoridad y suavidad) de las formas de onda a través de la muestra de sonido.

La capacidad de un dispositivo de procesamiento de sonido de recrear frecuencias se conoce como su frecuencia de respuesta y su capacidad para crear una sonoridad y suavidad adecuadas se conoce como su rango dinámico. Juntos, estos términos a menudo se conocen como la fidelidad de un dispositivo de sonido. Una codificación, en su forma más simple, es un medio para reconstruir el sonido usando estos dos principios básicos, además de almacenar y transportar esos datos de manera eficiente.

Tasas de muestreo

El sonido existe como una forma de onda analógica. Un segmento de audio digital se aproxima a esta onda analógica mediante un muestreo de la amplitud de la onda analógica a una tasa de transferencia lo suficientemente alta como para imitar las frecuencias intrínsecas de la onda. La tasa de muestreo de un segmento de audio digital especifica el número de muestras que se deben tomar del material fuente de audio (por segundo); una tasa de muestreo alta aumenta la capacidad del audio digital para representar fielmente las altas frecuencias.

Como consecuencia del teorema de NYquist-Shannon, generalmente generalmente necesitas realizar el muestreo de más del doble de la frecuencia más alta de cualquier onda de sonido que deseas capturar digitalmente. Para representar audio dentro del rango de audición humana (20 a 20,000 Hz), por ejemplo, un formato de audio digital debe realizar un muestreo al menos 40,000 veces por segundo (lo cual es parte de la razón por la que el CD de audio utiliza una tasa de muestreo de 44,100 Hz).

Profundidades de bits

La profundidad de bits afecta el rango dinámico de una muestra de audio dada. Una mayor profundidad de bits te permite representar amplitudes más precisas. Si tienes muchos sonidos fuertes y suaves dentro de la misma muestra de audio, necesitarás una mayor profundidad de bits para representar esos sonidos correctamente.

Las profundidades de bits más altas también reducen la relación señal/ruido dentro de las muestras de audio. El CD de audio musical se proporciona con una profundidad de bits de 16 bits. El DVD de audio usa una profundidad de bits de 24 bits, mientras que la mayoría de los equipos telefónicos usan una profundidad de bits de 8 bits. (Ciertas técnicas de compresión pueden compensar las profundidades de bits más pequeñas, pero tienden a tener pérdidas).

Audio sin comprimir

La mayoría del procesamiento de audio digital usa estas dos técnicas, la tasa de muestreo y la profundidad de bits, para almacenar los datos de audio de una manera directa. Una de las técnicas de audio digital más populares, que se popularizó en el uso del disco compacto, se conoce como Modulación por impulsos codificados (o PCM). Los muestreos de audio se realizan a intervalos establecidos, y la amplitud de la onda muestreada en ese punto se almacena como un valor digital usando la profundidad de bits de la muestra.

La PCM lineal (que indica que la respuesta de amplitud es linealmente uniforme en toda la muestra) es el estándar utilizado en los CDs y en la codificación LINEAR16 de la API de Speech-to-Text. Ambas codificaciones producen una transmisión de bytes sin comprimir que corresponde directamente a los datos de audio, y ambos estándares contienen 16 bits de profundidad. La PCM lineal usa una tasa de muestreo de 44,100 Hz en los CDs, lo que es apropiado para la recomposición de música; no obstante, una tasa de muestreo de 16,000 Hz es más apropiada para la recomposición de voz.

La PCM lineal (LINEAR16) es un ejemplo de audio sin comprimir en el que el audio digital se almacena exactamente como implican los estándares anteriores. Si lees una transmisión continua de un canal de bytes codificados mediante PCM lineal, podrías contar cada 16 bits (2 bytes), por ejemplo, para obtener otro valor de amplitud de la forma de onda. Casi todos los dispositivos pueden manipular estos datos digitales de forma nativa, incluso puedes recortar archivos de audio de PCM lineal mediante un editor de texto, pero, obviamente, el audio sin comprimir no es la manera más eficaz de transportar o almacenar audio digital. Por esa razón, la mayoría del audio usa técnicas de compresión digital.

Audio comprimido

Los datos de audio, al igual que todos los datos, se suelen comprimir para facilitar el almacenamiento y el transporte. La compresión de la codificación de audio puede ser sin pérdida o con pérdida. La compresión sin pérdida se puede desempaquetar para restablecer los datos digitales a su forma original. La compresión con pérdida elimina necesariamente cierta información de este tipo durante la compresión y descompresión, y se parametriza para indicar cuánta tolerancia se debe dar a la técnica de compresión a fin de quitar datos.

Compresión sin pérdida

La compresión sin pérdida comprime datos de audio digital mediante complejas reorganizaciones de los datos almacenados sin que esto dé como resultado una degradación de la calidad de la muestra digital original. En la compresión sin pérdida, cuando se desempaqueten los datos en su forma digital original, no se perderá información.

Entonces, ¿por qué las técnicas de compresión sin pérdida a veces tienen parámetros de optimización? A menudo, estos parámetros canjean tamaño de archivo por tiempo de descompresión. Por ejemplo, FLAC usa un parámetro de nivel de compresión de 0 (más rápido) a 8 (tamaño de archivo más pequeño). La compresión de FLAC de más alto nivel no perderá información en comparación con la compresión de nivel más bajo. En su lugar, el algoritmo de compresión solo necesitará utilizar más energía de procesamiento para construir o deconstruir audio digital original.

La API de Speech-to-Text admite dos codificaciones sin pérdida: FLAC y LINEAR16. Técnicamente, LINEAR16 no es "compresión sin pérdida", porque, en primer lugar, no hay ninguna compresión involucrada. Si el tamaño de archivo o la transmisión de datos son importantes para ti, elige FLAC como tu opción de codificación de audio.

Compresión con pérdida

Por otra parte, la compresión con pérdida comprime datos de audio mediante la eliminación o reducción de ciertos tipos de información durante la construcción de los datos comprimidos. La API de Speech-to-Text admite varios formatos con pérdida, aunque deberías evitarlos si tienes control sobre el audio, ya que la pérdida de datos podría afectar la exactitud del reconocimiento.

El popular códec MP3 es un ejemplo de una técnica de codificación con pérdida. Todas las técnicas de compresión de MP3 quitan el audio que está fuera del rango de audio de un ser humano normal, y ajustan la cantidad de compresión mediante el ajuste de la tasa de bits efectiva del códec MP3, o la cantidad de bits por segundo para almacenar la fecha del audio.

Por ejemplo, un CD estereofónico que usa PCM lineal de 16 bits tiene la siguiente tasa de bits efectiva:

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

Por ejemplo, la compresión de MP3 quita estos datos digitales mediante tasas de bits como 320 kbps, 128 kbps o 96 kbps, con una degradación resultante en la calidad del audio. MP3 también admite tasas de bits variables, que pueden comprimir aún más el audio. Ambas técnicas pierden información y pueden afectar la calidad. Por ejemplo, la mayoría de las personas pueden notar la diferencia entre la música MP3 con codificación de 96 kbps o 128 kbps.

Otras formas de compresión parametrizarán alguna otra restricción.

MULAW es una codificación PCM de 8 bits en la cual la amplitud de la muestra se modula de forma logarítmica en lugar de lineal. Como resultado, uLaw reduce el rango dinámico efectivo del audio así comprimido. Aunque uLaw se introdujo para optimizar específicamente la codificación de voz, en contraste con otros tipos de audio, la codificación LINEAR16 de 16 bits (PCM sin comprimir) continúa siendo muy superior al audio comprimido uLaw de 8 bits.

AMR y AMR_WB modulan la muestra de audio codificado mediante la introducción de una tasa de bits variable en la muestra de audio de origen.

Aunque la API de Speech-to-Text API admite varios formatos con pérdida, deberías evitarlos si tienes control sobre el audio fuente. Si bien es posible que la eliminación de esos datos mediante la compresión con pérdida no afecte visiblemente el audio tal como lo escucha el oído humano, la pérdida de esos datos puede degradar significativamente la exactitud para un motor de reconocimiento de voz.