Speex
Speex — это свободный кодек для сжатия речевого сигнала, который может использоваться в приложениях «голос-через-интернет» (VoIP). С высокой вероятностью он не имеет никаких патентных ограничений и лицензирован под последней версией лицензии BSD (без третьей статьи). Сжатые кодеком Speex данные можно хранить либо в формате хранения звуковых данных Ogg, либо передавать напрямую с помощью пакетов UDP/RTP.
Speex | |
---|---|
Расширение |
.spx |
MIME-тип | audio/x-speex и audio/speex[1][2] |
Разработчик | Джин-Марк Валин[d] и Xiph.Org |
Тип формата | Аудиокодек |
Содержится в | Ogg |
Стандарт(ы) | Спецификация |
Сайт | speex.org |
Разработчики противопоставляют свою разработку другим открытым кодекам, например, кодеку Vorbis, утверждая, что именно кодек Speex лучше всего подходит для передачи голоса по сети с ненадёжной доставкой пакетов данных. При этом авторы разработки специально подчёркивают, что кодек подходит для использования в сетях с ненадёжной передачей пакетов, то есть либо пакет пришёл, либо нет. При этом возможность искажения содержимого пакета должна быть исключена, поэтому Speex не подходит для передачи голоса, например, в радио- и сотовой связи.
Описание
Speex относится к классу так называемых Code Excited Linear Prediction (CELP)-кодеков, то есть кодеков, построенных на основе так называемого линейного предсказательного кодирования ЛПК. ЛПК использует для аппроксимации отрезка речевого сигнала цифровой фильтр только с обратными связями (т. н. «авторегрессионный фильтр»). Коэффициенты этого фильтра «подгоняются» под отрезок сигнала с помощью процедуры Левинсона (в западной литературе — Левинсона-Дурбина). CELP-модификация ЛПК предусматривает наличие т. н. «кодовой книги», которая содержит предопределённые наборы возбуждающих ЛПК-фильтр единичных импульсов.
Речевой сигнал в кодеке Speex разбивается на неперекрывающиеся отрезки длительностью 20 мс (160 отсчётов при 8 КГц). При этом для оценки возбуждающего набора вышеуказанный отрезок разбивается на четыре подотрезка длительностью 5 мс соответственно. На каждом из подотрезков отыскиваются возбуждающие наборы импульсов как текущего подотрезка (из кодовой книги), так и двух предыдущих подотрезков. В отличие от других кодеков, с целью избежать патентных ограничений Speex не использует алгебраическое кодирование, а только векторное. Возбуждения двух предыдущих подотрезков складываются с переменными весами, в отличие от ряда других кодеков, где используются переменные положения по времени.
По заявлению разработчиков, Speex оптимизирован для получения высококачественного речевого сигнала при низких скоростях. Кодек Speex также позволяет использовать переменную степень сжатия сигнала и поддерживает сигналы с различной шириной полосы: сверхширокополосный (англ. ultra-wideband, частота дискретизации 32 КГц), широкополосный (англ. wideband, 16 КГц) и узкополосный (англ. narrowband, 8 КГц). Направленность на системы «голос-через-интернет» (VoIP) предопределяет, что Speex должен быть устойчив к потерям пакетов данных, но не к повреждению их, так как UDP/IP-протокол, в отличие от TCP/IP, не гарантирует доставки пакетов потребителю, но, при этом, вероятность повреждения данных в UDP/IP-пакете в проводных системах связи крайне мала. Следует отметить, что можно использовать для передачи данных, сжатых кодеком Speex, и TCP/IP-пакеты. В последнем случае, вероятность порчи данных становится мизерной. Эта особенность определяет отсутствие в формате данных кодека Speex каких-либо средств защиты от ошибок.
Основные характеристики кодека:
- Свободное и открытое программное обеспечение, не имеет патентных ограничений
- Интеграция широко- и узкополосного канала в одном потоке данных
- Динамическое переключение скорости и переменная скорость (англ. Variable bit-rate, VBR)
- Обнаружитель речи (англ. Voice Activity Detection, VAD, объединён с VBR)
- Настройка степени сжатия
Особенности
- Частота дискретизации
- Основными для Speex являются три частоты дискретизации (взятия отсчётов): 8 КГц (наиболее употребительная частота для цифровых телефонных каналов и самого популярного стандарта VoIP G.711), 16 КГц и 32 КГц. Допускается использование и других частот, но Speex не оптимизирован для использования с ними.
- Качество
- Процесс кодирования речи контролируется специальным параметром, представляющим собой число в диапазоне от 0 до 10. В режиме с постоянной скоростью (англ. Constant bit-rate, CBR) параметр качества — целое число, а в режиме с переменной скоростью — число с плавающей запятой.
- Степень сжатия (изменяемая)
- Speex позволяет изменять степень сжатия сигнала, которая в описании кодека именуется «сложностью». Процесс управления поиском осуществляется с помощью целого числа от 1 до 10. В обычных условиях, уровень шума при сложности 1 на 1-2 дБ выше чем при сложности 10, но загрузка процессора при сложности 10 выше приблизительно в 5 раз. На практике лучшим выбором вероятно будет диапазон чисел от 2 до 4, но для кодирования неречевых сигналов (например DTMF — двухтональный многочастотный набор телефонного номера), могут оказаться полезными и более высокие значения.
Поддержка в приложениях
Speex поддерживает большое количество приложений, от потоковых приложений (телеконференции) до видеоигр и программ обработки звука. Большинство из них используют фильтр DirectShow. Также для проигрывателей Winamp и XMMS имеются соответствующие дополнения. Кроме того, KSP Sound Player начиная от версии 2006.0.0.2 и foobar2000 поддерживают Speex.
MIME тип для Speex — audio/x-speex. В ближайшем будущем он будет заменён на audio/speex.
Последние версии движка Half-Life 1 и основанные на нём моды используют кодек voice_speex.dll для реализации внутриигровых VoIP функций. Speex обеспечивает значительно лучшее качество, чем используемый по умолчанию кодек Miles.
Система The United States Army’s Land Warrior, разработанная General Dynamics, также использует Speex.
В Sid Meier’s Civilization 4 описания технологий, озвученные Леонардом Нимоем, закодированы в формат Speex.
VoIP-приложение Teamspeak предлагает Speex в числе 3 доступных кодеков. Открытая VoIP-программа Mumble до версии 1.2.4 использовала Speex. VoIP-сервис flaphone использует Speex кодек. Система управления предприятием TeamWox для внутренних голосовых коммуникаций использует кодек Speex.
Поддержка кодека Speex есть в программном коммутаторе РТУ для сетей NGN[3].
Примечания
- http://www.iana.org/assignments/media-types/audio/speex
- Herlein G., Valin J., Heggestad A., Moizard A. RTP Payload Format for the Speex Codec (англ.) — IETF, 2009. — 14 p. — doi:10.17487/RFC5574
- Описание функционала РТУ на сайте компании МФИ Софт