Speex

Speex – El códec de voz libre que revolucionó las comunicaciones VoIP

Descripción del programa Speex

Speex es un códec de compresión de audio libre y de código abierto, diseñado específicamente para la reproducción de voz humana. Fue iniciado por Jean-Marc Valin en febrero de 2002 como parte del proyecto GNU, con el objetivo de ofrecer una alternativa gratuita y libre de patentes a los códecs de voz propietarios que dominaban el mercado. Durante más de una década, se convirtió en el estándar de facto para aplicaciones de Voz sobre IP (VoIP), videoconferencias y sistemas embebidos.

Su principal fortaleza radica en su capacidad para comprimir voz con una calidad excepcional a tasas de bits muy bajas, desde solo 2 kbps hasta 44 kbps. A diferencia de los códecs de propósito general como MP3 o Vorbis, Speex está optimizado para las características acústicas de la voz humana, logrando una compresión de 2 a 4 veces superior a la de estos formatos para el mismo nivel de calidad percibida.

Además, su naturaleza libre y sin patentes lo convirtió en la opción ideal para desarrolladores y fabricantes que buscaban integrar comunicación por voz sin costes de licencia. En este sentido, entender los archivos en diferentes formatos es fundamental para trabajar con este tipo de códecs.

¿Necesitas un códec de voz libre, eficiente y sin restricciones de patentes para tus aplicaciones de comunicación?

Características clave de Speex

1. Múltiples tasas de muestreo en un mismo flujo

Speex soporta tres anchos de banda diferentes integrados en un mismo flujo de bits: banda estrecha (8 kHz, calidad telefónica), banda ancha (16 kHz, calidad mejorada) y banda ultra ancha (32 kHz, calidad casi de CD).

Esta flexibilidad permite que un mismo códec se adapte a diferentes calidades de servicio sin necesidad de cambiar de formato, algo fundamental en aplicaciones VoIP donde las condiciones de red varían constantemente.

2. Tecnologías avanzadas para redes de paquetes

El códec incorpora un conjunto de tecnologías diseñadas específicamente para entornos de red con pérdida de paquetes.

Incluye ocultación de pérdida de paquetes (PLC) para minimizar el impacto de paquetes perdidos, detección de actividad de voz (VAD) que identifica cuándo hay silencio, y transmisión discontinua (DTX) que reduce drásticamente el uso de ancho de banda durante las pausas en la conversación.

Para complementar la seguridad en aplicaciones de red, conviene revisar también la seguridad en Windows.

3. Compresión variable y adaptable

Speex ofrece tres modos de compresión: tasa de bits variable (VBR), que ajusta la calidad dinámicamente para optimizar la relación calidad/bitrate; tasa de bits promedio (ABR), que mantiene un objetivo de bitrate medio mientras varía la calidad localmente; y tasa de bits constante (CBR) para aplicaciones que requieren un flujo fijo.

El rango de complejidad ajustable (del 1 al 10) permite equilibrar la calidad con el consumo de CPU según las necesidades del dispositivo.

4. Arquitectura preparada para sistemas embebidos

Speex incluye un puerto de punto fijo (fixed-point) que permite ejecutarlo en procesadores sin unidad de punto flotante (FPU), como los microcontroladores STM32. Esta característica lo ha hecho muy popular en sistemas embebidos, desde ascensores y equipos de audio industriales hasta dispositivos portátiles.

También incorpora un cancelador de eco acústico (AEC) y supresión de ruido para mejorar la calidad en entornos ruidosos.

Explicación detallada de las funcionalidades

La arquitectura de Speex se basa en el algoritmo CELP (Code Excited Linear Prediction), una técnica de codificación predictiva que modela el tracto vocal humano para comprimir la voz de manera eficiente.

A diferencia de otros códeces que utilizan variantes patentadas como ACELP, Speex implementa su propio enfoque para mantenerse libre de patentes. Este modelo analiza la voz en tramas (frames) de 20 a 30 ms, extrayendo parámetros como el tono (pitch), los coeficientes de predicción lineal y la excitación del código, que luego se transmiten en lugar de la forma de onda completa.

Una de las innovaciones más importantes de Speex es la codificación estéreo intensiva, que permite representar canales estéreo con un coste de bits muy bajo al codificar la diferencia entre canales en lugar de los dos canales independientemente. Esto es especialmente útil en aplicaciones de conferencia donde múltiples participantes requieren separación espacial sin duplicar el ancho de banda.

La implementación de VAD y DTX fue particularmente revolucionaria para su época. Durante una conversación típica, el silencio ocupa aproximadamente el 60% del tiempo. Con la detección de actividad de voz activada, Speex reduce drásticamente la transmisión durante esos periodos, pasando de usar la tasa de bits nominal (por ejemplo, 16 kbps) a solo 250 bps para transmitir ruido de confort (comfort noise), que simula el ambiente de fondo para que la llamada no suene artificial. Esto supone un ahorro de ancho de banda enorme en sistemas con múltiples canales.

En cuanto a la integración, Speex se distribuye como parte de la biblioteca libspeex y libspeexdsp (para procesamiento de señal). Los desarrolladores pueden compilarla con soporte de punto flotante para CPUs potentes o con punto fijo para sistemas embebidos. La biblioteca incluye también un resampler (remuestreador) de alta calidad para adaptar frecuencias de muestreo, y soporte para múltiples plataformas a través de DirectX en Windows y ALSA/PulseAudio en Linux.

Descarga e instalación de Speex

  • Página oficial: Speex en Xiph.Org
  • Versión actual: 1.2.1 (códec) y SpeexDSP 1.2.1 (biblioteca DSP)
  • Últimas versiones: 1.2.1 (2022), 1.2.0 (2016), 1.2rc2 (2014)
  • Tamaño: Biblioteca de aproximadamente 4.5 MB (código fuente)
  • Sistemas operativos compatibles: Windows, Linux, macOS, BSD, Android, iOS, sistemas embebidos (ARM, TI DSP, STM32)
  • Requisitos mínimos: Procesador con 50 MIPS para tiempo real en modo punto fijo
  • Licencia: BSD de 3 cláusulas (licencia de código abierto permisiva, libre de patentes)
  • Idiomas: API en inglés, documentación en inglés
  • Soporte técnico: Lista de correo speex-dev@xiph.org, foros de Xiph.Org

Cómo usar Speex

Para utilizar Speex en tu aplicación, lo primero es descargar el código fuente desde el repositorio oficial de GitLab (git clone https://gitlab.xiph.org/xiph/speex.git). Si tu aplicación solo necesita procesamiento de voz (cancelación de eco, supresión de ruido), puedes descargar por separado la biblioteca speexdsp. En sistemas Linux, puedes instalar los paquetes precompilados como libspeex-dev y speex-tools desde el gestor de paquetes de tu distribución.

Para compilar Speex en un sistema embebido, configura los flags de compilación adecuados. Si tu procesador no tiene FPU (como un STM32), debes habilitar el modo de punto fijo con --enable-fixed-point durante la configuración. También puedes deshabilitar el soporte VBR si no lo necesitas para reducir aún más el consumo de recursos. Define HAVE_CONFIG_H en tu proyecto para incluir la configuración generada por autotools.

La integración básica en una aplicación de VoIP es sencilla: creas un estado de codificador con speex_encoder_init(&speex_nb_mode) para banda estrecha (o speex_wb_mode para banda ancha), configuras la calidad (0-10) con speex_encoder_ctl(state, SPEEX_SET_QUALITY, &quality), y codificas tramas de 160 muestras (20 ms a 8 kHz) llamando a speex_encode_int() para datos de 16 bits. En el receptor, decodificas con speex_decode_int() y reproduces las muestras PCM resultantes.

Antes de implementar en producción, conviene guardar una copia de seguridad de tu código para mantener versiones estables.

Observaciones sobre el programa Speex

Speex marcó un antes y después en el mundo de las comunicaciones de voz. Frente a códeces propietarios como los de la serie G.72x de ITU, Speex ofrecía calidad competitiva con la ventaja de ser completamente libre y sin costes de licencia. Su adopción por proyectos como Asterisk (centralita VoIP), Ekiga (softphone) y Flash Player de Adobe (desde 2008) lo convirtió en el códec de voz más utilizado en aplicaciones de código abierto durante más de una década.

Para los desarrolladores y fabricantes, el beneficio práctico fue enorme: podían integrar comunicación por voz en sus productos sin preocuparse por patentes ni pagar regalías. Empresas como General Dynamics lo utilizaron en el sistema Land Warrior del ejército estadounidense, y Apple lo incorporó en Siri para la transmisión de voz desde el iPhone 4S a sus servidores. En el ámbito industrial, sistemas de megafonía en aeropuertos y sistemas de comunicación en ascensores utilizan Speex para reducir el ancho de banda necesario.

El desarrollador original, Jean-Marc Valin, realizó este trabajo como proyecto personal durante sus estudios de doctorado en robótica en la Universidad de Sherbrooke (Canadá). Su contribución al software libre le valió reconocimiento internacional y posteriormente se convirtió en uno de los principales desarrolladores de Opus, el sucesor de Speex, trabajando para Mozilla y la IETF.

El desarrollo activo de Speex concluyó alrededor de 2012-2013, aunque se lanzó una versión de mantenimiento 1.2.1 en 2022. La Xiph.Org Foundation recomienda oficialmente desde 2013 que los nuevos proyectos utilicen Opus, el códec que incorpora lo mejor de Speex (SILK, de Skype) y CELT (de Xiph), superándolo en todos los aspectos.

Existen versiones portables de las herramientas de línea de comandos (speexenc, speexdec) para Windows, pero la biblioteca en sí está diseñada para integrarse en aplicaciones. Para sistemas embebidos, el código se compila directamente con el firmware, sin necesidad de instalación.

Entre las funcionalidades extra, Speex incluye un jitter buffer para compensar variaciones en la llegada de paquetes, y soporte para FEC (Forward Error Correction) que permite recuperar paquetes perdidos mediante información redundante enviada en paquetes posteriores.

Limitaciones importantes

  • El códec está obsoleto: desde 2013, Xiph.Org recomienda usar Opus en su lugar, que ofrece mejor calidad a todas las tasas de bits.
  • ❌ La calidad para música es pobre; está diseñado exclusivamente para voz.
  • ❌ La versión 1.2 presenta problemas con la detección de actividad de voz (VAD), que funciona mejor en versiones anteriores.

Alternativa recomendada

Si buscas una solución actualizada y superior en todos los aspectos, Opus es la alternativa definitiva. Desarrollado por la IETF (Internet Engineering Task Force) con la participación del creador de Speex, Jean-Marc Valin, Opus combina los códecs SILK (de Skype) y CELT (de Xiph) en un solo formato. Soporta desde 6 kbps hasta 510 kbps, funciona tanto para voz como para música con calidad excepcional, tiene latencia ultrabaja (22.5 ms) y es igualmente libre y sin patentes. Está estandarizado como RFC 6716 y es el códec obligatorio para WebRTC. Al ser código abierto bajo licencia BSD, puedes usarlo sin restricciones y cuenta con soporte activo y continuas mejoras.

Speex fue un códec revolucionario que democratizó las comunicaciones de voz en Internet durante más de una década. Aunque hoy está obsoleto, su legado vive en Opus, su sucesor natural. Puedes descargar el código fuente y las herramientas desde la página oficial de Speex para mantener sistemas heredados, pero para nuevos proyectos te recomendamos explorar Opus.

Sección FAQ

¿Speex es gratis o de pago?

Speex es completamente gratuito y de código abierto, publicado bajo la licencia BSD de 3 cláusulas. Puedes usarlo en aplicaciones comerciales sin pagar regalías ni licencias, siempre que mantengas los avisos de copyright en el código fuente.

¿Funciona en Linux, macOS, Windows 10 y Windows 11?

Sí, Speex es multiplataforma y funciona en todos los sistemas operativos principales (Windows, Linux, macOS, BSD). También se ejecuta en dispositivos móviles (Android, iOS) y en sistemas embebidos como STM32 y procesadores DSP de Texas Instruments.

¿Qué diferencia a Speex de otras alternativas similares?

Su principal diferencia es que fue el primer códec de voz libre y sin patentes ampliamente adoptado. Ofrece características como VBR, VAD, DTX y soporte para tres anchos de banda en un mismo flujo, algo poco común en su época. Sin embargo, hoy está obsoleto y su sucesor Opus lo supera en todos los aspectos.

¿Puedo usar Speex para comprimir música?

No, Speex está específicamente diseñado para voz humana. La compresión de música con Speex produce resultados de baja calidad; para música se recomienda usar Vorbis, MP3 o, mejor aún, Opus.

¿Qué es SpeexDSP y para qué sirve?

SpeexDSP es la biblioteca de procesamiento de señal asociada a Speex, que incluye un cancelador de eco acústico (AEC), un supresor de ruido, un resampler (remuestreador) y un jitter buffer. Puede usarse independientemente del códec y sigue siendo útil en aplicaciones modernas.