Introducción a la codificación de audio

Una codificación de audio se refiere a la manera en que se almacenan y transmiten los datos de audio. La documentación a continuación describe cómo funcionan dichas codificaciones. Si quieres obtener instrucciones sobre cómo elegir la mejor codificación para la aplicación, consulta las Prácticas recomendadas.

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 Speech. Los conceptos que se proporcionan aquí solo tienen como objetivo ofrecer una descripción general. Parte de esta información básica puede ser útil para entender cómo funciona la API y cómo se debe formular y procesar el audio en las aplicaciones.

Formatos de audio contra codificaciones

Ten en cuenta que un formato de audio no es equivalente 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. Los archivos de audio .wav suelen usar una codificación PCM lineal, pero no siempre. No supongas que un archivo .wav tiene una codificación concreta hasta que inspecciones su encabezado.

Configuración de decodificación

Los parámetros necesarios para decodificar el audio transmitido se especifican en el decoding_config oneof.

Si el audio está en uno de los formatos admitidos por AutoDetectDecodingConfig te recomendamos que definas el campo auto_decoding_config para que Speech-to-Text determine los parámetros correctos.

De lo contrario, deberá especificar explícitamente los parámetros de decodificación configurando el campo explicit_decoding_config. Estos parámetros suelen encontrarse en los ajustes utilizados para grabar el audio.

¿Por qué codificar?

El audio se compone de formas de onda, que consisten en la interposición de ondas de diferentes frecuencias y amplitudes. Para representar estas formas de onda en medios digitales, es necesario muestrearlas a frecuencias que puedan representar (al menos) los sonidos de la frecuencia más alta que quieras replicar. También es necesario almacenar suficiente profundidad de bits para representar la amplitud adecuada (volumen) de las formas de onda en la muestra de sonido.

La capacidad de un dispositivo de procesamiento de sonido para recrear frecuencias se conoce como respuesta de frecuencia, y su capacidad para crear un volumen y una suavidad adecuados se conoce como rango dinámico. En conjunto, estos términos suelen denominarse fidelidad de un dispositivo de sonido. Una codificación, en su forma más simple, es un medio con el que se reconstruye el sonido mediante el uso de estos dos principios básicos, además de poder almacenar y transportar dichos datos de manera eficiente.

Frecuencias de muestreo

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

Como consecuencia del teorema de Nyquist-Shannon, normalmente tienes que muestrear más del doble de la frecuencia más alta de cualquier onda de sonido que quieras capturar digitalmente. Para representar audio dentro del rango de audición humana (20 a 20000 Hz), por ejemplo, un formato de audio digital debe muestrear al menos 40000 veces por segundo (que es parte de la razón por la cual el audio de un CD usa una frecuencia de muestreo de 44100 Hz).

Profundidades de bits

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

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

Audio sin comprimir

La mayoría del procesamiento de audio digital utiliza estas dos técnicas (frecuencia de muestreo y profundidad de bits) para almacenar datos de audio de manera directa. Una de las técnicas de audio digital más populares (popularizada en el uso del Disco Compacto) se conoce como Modulación de Código de Pulso (o PCM). El audio se muestrea a intervalos definidos y la amplitud de la onda muestreada en ese punto se almacena como un valor digital mediante la profundidad de bits de la muestra.

PCM lineal (que indica que la respuesta de amplitud es linealmente uniforme en toda la muestra) es el estándar que se usa en los CDs y en la codificación LINEAR16 de la API Speech-to-Text. Ambas codificaciones producen un flujo sin comprimir de bytes que se corresponden directamente con los datos de audio, y ambos estándares tienen una profundidad de 16 bits. El PCM lineal utiliza una frecuencia de muestreo de 44.100 Hz en los CD, que es apropiada para la recomposición de música. Sin embargo, una frecuencia de muestreo de 16.000 Hz resulta más adecuada para recomponer la voz.

El PCM lineal es un ejemplo de audio sin comprimir, ya que los datos digitales se almacenan exactamente como implican los estándares anteriores. Al leer un flujo de un canal de bytes codificados con PCM lineal, puedes 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 PCM lineal con un editor de texto. Sin embargo, el audio sin comprimir no es la forma más eficiente de transportar o almacenar audio digital. Por este motivo, la mayoría del audio utiliza técnicas de compresión digital.

Audio comprimido

Los datos de audio, como todos los datos, a menudo se comprimen para facilitar su almacenamiento y transporte. La compresión en la codificación de audio puede ser sin pérdida o con pérdida. La compresión sin pérdida se puede descomprimir para restaurar los datos digitales a su forma original. La compresión con pérdidas necesariamente elimina cierta información durante la compresión y la descompresión, y se parametriza para indicar cuánta tolerancia se debe aplicar a la técnica de compresión para eliminar datos.

Compresión sin pérdida

La compresión sin pérdida utiliza complejos reordenamientos de datos almacenados para comprimir los datos de audio digital, pero no degrada la calidad de la muestra digital original. Con la compresión sin pérdida, al descomprimir los datos en su forma digital original, no se perderá ninguna información.

Entonces, ¿por qué las técnicas de compresión sin pérdida a veces tienen parámetros de optimización? Estos parámetros, a menudo, cambian el 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 FLAC de nivel más alto no perderá ninguna información en comparación con la compresión de nivel inferior. En cambio, el algoritmo de compresión solo necesitará gastar más energía informática al construir o extraer el audio digital original.

La API Speech-to-Text admite dos codificaciones sin pérdida: FLAC y LINEAR16. Técnicamente, LINEAR16 no es una "compresión sin pérdidas" porque no se aplica ninguna compresión. Si el tamaño del archivo o la transmisión de datos son importantes para ti, elige FLAC como codificación de audio.

Compresión con pérdida

La compresión con pérdida, por otro lado, comprime los datos de audio al eliminar o reducir cierto tipo de información durante la construcción de los datos comprimidos. La API 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 puede afectar a la precisión 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 MP3 eliminan el audio que está fuera del intervalo de audio normal de un ser humano y ajustan la cantidad de compresión modificando la tasa de bits efectiva del códec MP3, es decir, la cantidad de bits por segundo que se usan para almacenar los datos de audio.

Por ejemplo, un CD estéreo que utiliza PCM lineal de 16 bits tiene una tasa de bits efectiva de:

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

La compresión de MP3 elimina esos datos digitales mediante el uso tasas de bits como 320 kbps, 128 kbps o 96 kbps, por ejemplo, que provoca la degradación en la calidad del audio. MP3 también admite tasas de bits variables, que pueden comprimir el audio aún más. Ambas técnicas pierden información y pueden afectar la calidad. La mayoría de las personas pueden notar la diferencia entre la música codificada en MP3 de 96 kbps o 128 kbps, por ejemplo.

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

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

AMR y AMR_WB modulan la muestra de audio codificada introduciendo una tasa de bits variable en la muestra de audio de origen.

Aunque la API Speech-to-Text admite varios formatos con pérdidas, debes evitarlos si tienes control sobre el audio de origen. Aunque la eliminación de estos datos mediante la compresión con pérdidas puede no afectar de forma notable al audio tal como lo percibe el oído humano, la pérdida de estos datos para un motor de reconocimiento de voz puede reducir significativamente la precisión.