# Speex

Speex est un codec libre et sans brevets. Il compresse avec perte de données (comme MP3 et Vorbis) et est spécialisé et optimisé pour la voix humaine.
Speex, projet né indépendant, a été intégré au projet Ogg le 11 octobre 2002. Pour rappel, Ogg est un format de fichier qui contient des flux audio et/ou vidéo. Un fichier Ogg peut donc contenir un flux Speex comme un flux Vorbis.
Il obtient pour tout ce qui est parole, des rapports qualité et de taille bien supérieurs aux formats de compression similaires conçus pour la compression musicale. À 12 kbit/s la qualité est correcte pour tout type de conversation.
Il est présent dans une large base de logiciels, notamment grâce à des plugins et des filtres. Il est supporté par des logiciels de téléconférence, de flux de données, de traitement du son, de lecture multimédia, de P2P, des jeux.
Speex est devenu obsolète avant 2014, car le format opus est plus performant.

## Description

À la différence de la plupart des autres codecs dédiés à la parole, Speex n'est pas fait pour une utilisation sur téléphone portable mais plutôt pour la VoIP et la compression dans des fichiers. Les principaux buts ont été de créer un codec optimisé pour la parole, qui associe une bonne compréhension du dialogue transmis, ainsi qu'un fort taux de compression des données possibles. Speex peut utiliser de nombreux débits et bande passante possibles. Conçu pour une utilisation en VoIP, Speex gère bien la perte de données dans le transport, mais il ne gère pas les paquets corrompus car le protocole de transfert UDP assure que les paquets transmis sont intacts (ils ne sont pas transmis s'ils sont altérés). La méthode retenue par le codec Speex, est le CELP (Code Excited Linear Prediction). La raison principale est que CELP s'est avéré capable de s'adapter à des débits bas (comme mis en évidence par DoD CELP à 4,8 kbit/s), aussi bien qu'aux débits plus hauts (comme pour le G.728 à 16 kbit/s). Les caractéristiques principales peuvent être résumées comme suit :
* Logiciel libre/open-source, Libre de tous brevets et royalties
* Intégration d'une bande passante restreinte à normale dans un même flux de données
* Grande variété de débits disponibles (de 2 kbit/s à 44 kbit/s)
* Changement de débit dynamique et codage à débit variable
* VAD (Voice Activity Detection) (intégré dans le codage à débit variable)
* Complexité variable
* Mode Bande passante étendue (32 kHz à plus de 48 kHz)
* Option d'encodage stéréo par réglage du volume de chaque canal (au lieu d'utiliser un délai entre les deux canaux)

### Fonctionnalités
#### Fréquence d'échantillonnage

    Speex est conçu de manière à être utilisé dans trois fréquences d'échantillonnage différentes
    8 kHz (Comme pour la transmission des appels téléphoniques), 16 kHz, 32 kHz

#### Qualité

    L'encodeur Speex est contrôlé par un paramètre de qualité compris entre 0 et 10. En mode CBR, le paramètre de qualité est un nombre entier, en mode VBR, c'est un nombre à virgule flottante

#### Complexité (variable)

    Avec Speex, il est possible de gérer la complexité de l'encodeur par un paramètre réglable entre 1 et 10 et qui définit la zone de recherche de l'encodeur. Un peu comme les options -1 à -9 de l'utilitaire de compression de données gzip. Pour une utilisation normale, le niveau de bruit pour une complexité de 1 est comprise entre 1 et 2 dB de plus qu'avec le réglage de complexité de 10. Mais les ressources CPU nécessaires pour une complexité de 10 sont 5 fois supérieure à celle nécessaire à une complexité de 1. En pratique le meilleur réglage est compris entre 2 et 4, des paramètres supérieurs sont utilisés plutôt pour des sons autres que la parole (comme pour le codage DTMF (Dual-Tone Multi-Frequency) ou pour un encodage qui n'a pas besoin d'être en temps réel.

#### Débit variable (Variable Bit-Rate (VBR))

    Le mode de codage à débit variable (VBR) permet au codec de changer de débit dynamiquement pour s'adapter à une source audio plus difficile à encoder. Les sons complexes sont codés avec un plus grand débit, et les sons simples avec moins de débit. Le but est que la qualité reste constante en faisant varier le débit. Cependant comme le débit final n'est pas garanti, des problèmes peuvent se poser dans les applications temps réel tel que la VoIP.

#### Débit de données moyen (ABR) (Average Bit Rate)

    Le principe du débit de données moyen, résout un des problèmes du codage à débit variable, en ajustant dynamiquement la qualité du codage VBR de manière à obtenir un débit de données cible spécifique. La qualité obtenue est en conséquence inférieure au codage à débit variable.

#### Voice Activity Detection (VAD)

    Quand cette option est activé, le VAD détecte quand l'audio encodé est du dialogue ou du silence/bruit de fond. VAD est toujours implicitement activé en encodage VBR, donc cette option est utile uniquement en mode non VBR. Dans ce cas Speex détecte les périodes sans dialogue et les encode avec le strict minimum de bits pour reproduire le bruit de fond. Cette fonction est appelée Comfort Noise Generation (CNG).

#### Transmission Discontinues (Discontinuous Transmission (DTX))

    La transmission discontinue est une fonctionnalité qui s'ajoute aux opérations de VAD et de VBR, qui permet de couper la transmission complètement quand le bruit de fond est stationnaire. Dans un fichier, 5 bits sont utilisés pour chaque frame manquante (correspondant à 250 bit/s)

#### Perfectionnement perceptible

    Le perfectionnement perceptible est une partie du décodeur qui quand il est activé, tente de réduire la perception du bruit produit par le processus de codage/décodage. Dans la plupart des cas, le perfectionnement perceptible crée un son différent de l'original (avec un rapport signal sur bruit différent), mais le son semble finalement meilleur à l'écoute.

#### Délai Algorithmique

    Chaque codec introduit un délai dans la transmission, pour Speex, ce délai est égal à la taille d'une frame, plus un peu de temps nécessaire au traitement de chaque frame. Pour une bande passante de 8 kHz, le délai est d'environ 30 ms, et pour une bande passante de 16 kHz, ce délai monte à 34 ms. Ces valeurs ne comprennent pas le temps de calcul processeur nécessaire à l'encodage et au décodage de chaque frame.
Quelques logiciels supportant le format Speex (voir la page plugins & softwares du site officiel) :
* bibliothèques de traitement de son : DirectShow Filter, OpenACM, OpenH323 (ce qui implique une multitude de logiciels)
* binding de langage (API) : C, Python, Java, Delphi
* Téléconférence, PBX, VoIP : QuteCom, Google Talk, NetMeeting, Ekiga, Asterisk, Linphone
* Lecteurs multimédia et streaming : Songbird, VLC, Winamp, XMMS, ogg123, foobar2000, JRoar
* Traitement de son : Audacity, Psycle, Sweep, CoolEdit
* Jeux : Marathon: Aleph One ou via TeamSpeak, Façade
* P2P : GNUnet, eMule, aMule, xMule
* Téléphone: l'application de l'iphone Siri

## Étymologie

Speex est un jeu de mots avec speaks qui signifie en anglais « (il) parle ».