Introducción a la codificación de audio para Speech-to-Text

Una codificación de audio se refiere a la manera en que se almacenan y transmiten los datos de audio. En la documentación que aparece a continuación se describe cómo funcionan estas codificaciones en relación con la API Speech-to-Text.

Para obtener directrices sobre cómo elegir la mejor codificación para tu 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.

FLAC, sin embargo, es tanto un formato de archivo como una codificación, lo que a veces genera cierta confusión. Un archivo FLAC debe contener la frecuencia de muestreo en el encabezado FLAC para poder enviarlo a la API 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 nos referimos a FLAC en la API Speech-to-Text, siempre hacemos referencia al códec. Cuando nos referimos a un formato de archivo FLAC, usamos el formato "un archivo .FLAC".

No es necesario especificar la codificación y la frecuencia de muestreo para los archivos WAV o FLAC. Si se omite, Speech-to-Text determina automáticamente la codificación y la frecuencia de muestreo de los archivos WAV o FLAC en función del encabezado del archivo. Si especifica un valor de codificación o de frecuencia de muestreo que no coincide con el valor del encabezado del archivo, Speech-to-Text devuelve un error.

Codificaciones de audio admitidas en Speech-to-Text

La API Speech-to-Text admite varios tipos de codificación. La siguiente tabla muestra los códecs de audio admitidos:

Códec Nombre Sin pérdida Notas sobre el uso
MP3 MPEG Audio Layer III No La codificación MP3 es una función beta y solo está disponible en la versión v1p1beta1. Consulta la documentación de referencia de RecognitionConfig para obtener más información.
FLAC Códec de audio sin pérdida Se requieren 16 bits o 24 bits para las transmisiones
LINEAR16 PCM lineal Codificación PCM lineal de 16 bits. El encabezado debe contener la frecuencia de muestreo.
MULAW μ-ley No Codificación PCM de 8 bits
AMR Banda estrecha adaptable de varias frecuencias No La frecuencia de muestreo debe ser de 8000 Hz
AMR_WB Banda ancha adaptable de varias frecuencias No La frecuencia de muestreo debe ser de 16000 Hz
OGG_OPUS Marcos de audio codificados Opus en un contenedor Ogg No La frecuencia de muestreo debe ser de 8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz o 48000 Hz
SPEEX_WITH_HEADER_BYTE Banda ancha Speex No La frecuencia de muestreo debe ser de 16000 Hz
WEBM_OPUS WebM Opus No La frecuencia de muestreo debe ser de 8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz o 48000 Hz

Para obtener más información sobre los códecs de audio de voz a texto, consulta la documentación de referencia de AudioEncoding.

Si tienes una opción al codificar el material de origen, usa una codificación sin pérdida como FLAC o LINEAR16 para obtener un mejor reconocimiento de voz. Para consultar las directrices sobre cómo seleccionar el códec adecuado para tu tarea, consulta las prácticas recomendadas.

¿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 recursos multimedia digitales, las formas de onda deben muestrearse a velocidades que pueden (al menos) representar sonidos de la frecuencia más alta que desea replicar, y también necesitan almacenar suficiente profundidad de bits para representar la amplitud adecuada (volumen y suavidad) de las formas de onda a través de la muestra de sonido.

La capacidad de un dispositivo de procesamiento de sonido para recrear frecuencias se conoce como respuesta de frecuencia y la capacidad para crear el volumen y la 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 al muestrear la amplitud de esta onda analógica a una velocidad lo suficientemente rápida para imitar las frecuencias intrínsecas de la onda. La frecuencia de muestreo de un segmento de audio digital especifica la cantidad de muestras que se tomarán del material original 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 mayor profundidad de bits permite representar amplitudes más precisas. Si se tienen muchos sonidos fuertes y suaves dentro de la misma muestra de audio, se necesitará mayor profundidad de bits para representar esos sonidos de forma correcta.

Las profundidades de bits más altas también reducen la relación señal/ruido en las muestras de audio. El audio musical en CD se proporciona con una profundidad de bits de 16 bits. E audio en DVD utiliza una profundidad de bits de 24 bits, mientras que la mayoría de los equipos de telefonía utilizan una profundidad de bits de 8 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 establecidos, y la amplitud de la onda muestreada en ese punto se almacena como un valor digital mediante el uso de 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 de bytes sin comprimir que corresponde directamente a los datos de audio, y ambos estándares contienen 16 bits de profundidad. 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.

PCM lineal (LINEAR16) 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 bytes de un canal codificado mediante el uso del PCM lineal, se puede 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 esos datos digitales de forma nativa, incluso se puede recortar archivos de audio de PCM lineal mediante el uso de un editor de texto, pero (obviamente) el audio sin comprimir no es la forma más eficiente de transportar o almacenar audio digital. Por esa razón, la mayoría de audio usa técnicas de compresiones digitales.

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 de MP3 eliminan el audio del exterior del intervalo de audio de un humano normal y ajustan la cantidad de compresión ajustando 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 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.