# Speex

Speex ist ein freier – auch patentfreier – verlustbehafteter Audiocodec von Jean-Marc Valin, der speziell auf die platzsparende Speicherung von Audiodaten ausgelegt ist, die menschliche Sprache enthalten. Für andere Signalarten ist er – wie alle Sprachcodecs – in der Regel ungeeignet. Der Name ist eine phonetische Schreibweise des englischen Wortes speaks (3. Person Präsens: „spricht“).
Auf der offiziellen Webseite wird Speex als obsolet und durch Opus ersetzt bezeichnet, da letzterer in allen Aspekten überlegen sei.
Das Verfahren wurde unter dem Dach der Xiph.Org Foundation entwickelt und ist unter Xiphs BSD-artiger Lizenz veröffentlicht. Es war als Ergänzung zu dem verlustbehafteten Allzweckverfahren Vorbis gedacht.
Die Daten werden standardmäßig im Ogg-Containerformat gespeichert. Speex-Dateien tragen jedoch im Normalfall zur einfacheren Unterscheidbarkeit zu Ogg Vorbis die Endung .spx. Speex kann jedoch auch in anderen Containern oder ohne Container übertragen werden, so z. B. bei der IP-Telefonie üblich, wo meistens direkt über UDP/RTP übertragen wird. Gegenüber Allzweck-Kompressionsverfahren wie MP3 oder Vorbis lassen sich hiermit keine Musikdaten oder sonstige andere Signalarten ohne deutlich hörbaren Qualitätsverlust verkleinern; dafür werden bei gesprochenem Text deutlich bessere Kompressionsraten erzielt.
Speex' MIME-Typ ohne Container istaudio/speex, währendaudio/ogg für .spx Dateien verwendet wird.

## Beschreibung

Im Unterschied zu vielen anderen Sprachcodecs zielen Speex’ Bitratenbereich wie auch seine Fehlertoleranz- und -korrekturmechanismen nicht auf Mobiltelefon-Anwendungen, sondern eher auf für IP-Telefonie oder Dateien gebräuchliche Gegebenheiten. Der Entwurf des Formates war darauf ausgelegt, einen Codec zu schaffen, der sowohl sehr gute Sprachqualität als auch niedrige Datenraten erreichen kann. Das führte zu einem Codec mit mehreren Bitraten. Im Hinblick auf den Einsatz in der IP- anstelle der Mobiltelefonie werden als Übertragungsfehler nicht verstümmelte, sondern verlorene Pakete erwartet. Diese Ganz-oder-gar nicht-Auslieferung des Datenpakets gewährleistet das verwendete UDP. Diese Überlegungen führten zu der Entscheidung für Code Excited Linear Prediction (CELP) als grundlegende Technik hinter Speex. Ein Hauptgrund ist, dass CELP sich schon für niedrige (Beispiel: DoD CELP bei 4,8 kbit/s) als auch für höhere Bitraten (wie bei G.728 mit 16 kbit/s) als geeignet erwiesen hat.

## Merkmale

Die wichtigsten Merkmale können folgendermaßen zusammengefasst werden:
* Freie Software/quelloffen, patent- und gebührenfrei
* Großer Datenratenbereich (von 2 bis 44 kbit/s)
* verschiedene Komplexitätsstufen
* vergleichsweise hohe Abtastraten (bis zu 48 kHz)
* Möglichkeit, innerhalb ein und desselben Datenstromes in verschiedenen Bandbreiten zu codieren
* Dynamischer Bitratenwechsel und variable Datenraten (VBR)
* Intensitätsstereofonie, Option zur Kodierung in Intensitätsstereofonie
* Paketverlust-Verschleierung
* Echokompensation
* Sprechpausenerkennung (engl. Voice Activity Detection, VAD; in den Variable-Bitrate-Modus integriert)

### Abtastraten

Um sehr gute Qualität ermöglichen zu können, werden auch höhere als die für Telefonqualität üblichen 8 kHz Abtastrate unterstützt. Speex unterstützt Abtastraten bis zu 48 kHz, ist aber hauptsächlich ausgelegt auf 8, 16 und 32 kHz, die als Schmalband, Breitband und Ultra-Breitband bezeichnet werden.

### Qualität

Die Speex-Kodierung wird im Grunde über einen Parameter gesteuert, der eine Qualitätsstufe festlegt. Dieser kann Werte von 0 bis 10 annehmen. Für konstante Bitraten (constant bit-rate, CBR) werden ganzzahlige Werte angegeben, für variable Bitraten eine Gleitkommazahl.

### Komplexität

Bei Speex ist es möglich, den Encoder auf verschiedene Komplexitätsstufen einzustellen. Dabei wird die Suchtiefe durch eine Ganzzahl zwischen 1 und 10 festgelegt, was die Störgeräuschintensität auf Stufe 10 gegenüber Stufe 1 gewöhnlich um etwa ein bis zwei Dezibel drückt, den Rechenaufwand jedoch um etwa Faktor 5 erhöht. Als guter Kompromiss wird der Bereich von Stufe 2 bis 4 empfohlen, wobei die höheren Einstellungen bei Signalen, die etwas anderes als menschliche Sprache enthalten, oft hilfreich sind.

### Variable Bitrate (VBR)

VBR erlaubt dem Codec die Bitrate dynamisch an die Komplexität des Signales anzupassen. Im Falle von Speex bedeutet das beispielsweise konkret, dass Vokale und starke Transienten für eine adäquate Darstellung mehr Daten benötigen als Reibelaute. Daher wird mit variabler Bitrate bei gleichem Datenaufwand höhere Qualität möglich beziehungsweise fallen um eine vergleichbare Qualität zu erreichen weniger Daten an. Dieser Modus zielt natürlich weniger auf Streaming-Anwendungen, da hier die Kapazität des Übertragungskanals eine feste Obergrenze vorgibt, die eventuell nicht eingehalten werden kann, wenn eine zu erreichende Qualitätsstufe vorgegeben wird und das Eingangssignal eine zu komplexe Stelle enthält. Des Weiteren ist in diesem Modus auch die Durchschnittsbitrate insgesamt nicht vorhersehbar.

### Durchschnittliche Bitrate (Average Bit-Rate, ABR)

Hierbei wird die Qualität dynamisch in Echtzeit (open-loop) angeglichen, um eine bestimmte Zielbitrate zu erreichen, womit die Durchschnittsbitrate vorhersehbar wird. Insgesamt wird dabei eine etwas geringere Qualität erreicht, als wäre der Encoder bei echter variabler Bitrate exakt auf die gewünschte Durchschnittsbitrate eingestellt.

### Sprechpausenerkennung (Voice Activity Detection, VAD)

Speex erkennt Stille oder Hintergrundgeräusche und speichert für solche Bereiche nur beschreibende Parameter, die die Erzeugung eines für das menschliche Ohr ähnlichen Hintergrundgeräusches erlauben, sogenanntes Komfortrauschen (engl. comfort noise generation, CNG). Im Variable-Bitrate-Modus ist dieses Verfahren inbegriffen.

### Ungleichmäßige Übertragung (Discontinuous Transmission, DTX)

Diese Technik ist ein Zusatz zur variablen Bitrate und Sprechpausenerkennung, mit der bei gleichbleibenden Hintergrundgeräuschen jegliche Datenübertragung eingestellt werden kann. Im Datei-basierten Betrieb werden Platzhalter-Frames erzeugt, die jeweils fünf Bits benötigen, was eine Bitrate von 250 Bits pro Sekunde ergibt.

### Wahrgenommene Verbesserung (Perceptual enhancement)

Dies bezeichnet Techniken, die dazu dienen, die durch den Codierungs-/Decodierungsprozess eingegangenen Abweichungen vom Originalsignal vor der menschliche Wahrnehmung zu verbergen, was den Klang zugunsten einer subjektiven Klangverbesserung meist zusätzlich vom Original entfremdet.

### Algorithmische Verzögerung

Diese entspricht bei Speex der Länge eines Frames zuzüglich einem gewissen Vorlauf, bevor die Verarbeitung eines Frames begonnen werden kann. Für den Schmalband-Modus (8 kHz) ergeben sich 30 ms, für Breitband (16 kHz) 34 ms Verzögerung.

## Anwendung

Hauptsächlich kommt Speex zur Telekommunikation über das Internet zum Einsatz wie z. B. zur IP-Telefonie und zur Kommunikation während Online-Spielen (zum Beispiel bei TeamSpeak, Mumble und Counter-Strike). Weitere Anwendungsbereiche sind Streaming Audio, Hörbücher und gesprochene Podcasts. Entsprechend wird Speex von einer Vielzahl von Programmen aus zahlreichen Bereichen unterstützt, darunter Audiowiedergabeprogramme (Winamp, XMMS, foobar2000), Audioeditoren, IP-Telefonie-Programme (Ekiga, Jitsi, Jabbin, Linphone, KPhone, Twinkle) und Videospiele. Auf der Speex-Website steht eine Liste mit Programmen und Zusatzmodulen. Es existieren ein DirectShow-Filter und ein ACM-Codec, auf denen die Speex-Funktionen vieler Programme basieren. Die US-Armee nutzt Speex in einem von Raytheon entworfenen EPLRS-Sprechfunksystem auf ihrem Land-Warrior-System. Auch Microsoft bedient sich Speex' für die Sprechgarnitur der Xbox Live, wie der Betreuer des Theora-Codecs Ralph Giles auf LugRadio berichtete. Auf dem iPod und anderen Portable Media Playern lässt sich Speex mit der Open-Source-Firmware Rockbox abspielen.
Seit Flash Player 10 kann er mit Adobe Flash (neben ADPCM, HE-AAC, MP3 und Nellymoser) anstatt des veralteten Nellymoser-Codecs genutzt werden.
Wie der Chaos Computer Club in einer Veröffentlichung zum Bundestrojaner mitteilte, kommt auch hier Speex zum Komprimieren von Sprachaufnahmen zum Einsatz.