В предыдущей статье мы обсудили кодек Opus, который работает на очень низких битрейтах. Но другой кодек стремится достичь ещё более низких битрейтов — это Codec 2.

Codec 2 предназначен для кодирования только речи. И хотя битрейт впечатляет, звук не такой качественный, как в случае Opus, что можно услышать в аудиопримерах. Тем не менее, в сочетании с нейросетью (WaveNet) кодек демонстрирует впечатляющие результаты.


Слои нейронной сети WaveNet

Введение


Codec 2 распространяется с открытым исходным кодом и предназначен для кодирования речи. Он ориентируется на битрейт от 700 до 3200 бит/с.

Разработчик — Дэвид Роу, инженер-электроник, в настоящее время живущий в Южной Австралии. Он начал проект в сентябре 2009 года с целью совершенствования недорогой радиосвязи для людей в отдалённых районах мира. С этой целью он собирался разработать кодек, который значительно уменьшит размер файлов и требования к пропускной способности канала при потоковой передаче.

Другой мотивацией, по словам Дэвида, было создание свободного от патентного обременения кодека как альтернативы проприетарным кодекам, которые, по его мнению, «требуют оформления дорогостоящих и неуклюжих лицензий и душат инновации». Он считает, что можно обойтись без запатентованных кодеков, поэтому всю работу распространяет под свободной лицензией.

Потенциальное применение


Автор называет различные применения кодека, среди них VoIP, голосов��я связь по узкой полосе цифрового ВЧ/УВЧ радио (особенно для любительского радио, во избежание проблем с использованием проприетарных кодеков), связь в развивающихся странах и удалённых регионах, включая армию, полицию и спасательные службы.

Мы в компании Auphonic заинтересованы в потенциальном применении кодека для лучшего сжатия подкастов, презентаций и аудиокниг, что позволяет уменьшить объём занимаемого места и свести к минимуму эффект плохих сетевых соединений.

Как это работает


Для снижения битрейта необходимо свести речь к минимально возможной информации/данным, то есть минимизировать объём избыточно передаваемой информации.

Для этого Codec 2 использует гармоническое синусоидальное кодирование речи. Он разделяет речь на сегменты по 10−30 мс, которые называются кадрами. Каждый кадр затем анализируется на предмет фундаментального уровня (pitch) и количества гармоник, которые вписываются в полосу пропускания 4 кГц. Далее для каждой гармоники в диапазоне 4 кГц записываются амплитуда и фаза.

Эта информация затем кодируется, а декодер восстанавливает звук на основе этих данных.


Блок-схемы Codec 2: энкодер (слева) и декодер (справа). Иллюстрация от Rowtel

Аудио примеры и сравнение с другими кодеками


Хотя всё это звучит здорово в теории, но что в реальности? Давайте послушаем. Вот короткий звуковой файл wav:

intro-orig.wav — 1,3 МБ

Применим Codec 2 (без декодера WaveNet) на разных доступных битрейтах: 3200 бит/с, 2400 бит/с, 1600 бит/с, 1200 бит/с и 700 бит/с.

Эти примеры показывают значительное уменьшение размера файлов.

Посмотрим на файлы с точки зрения их объёма для хранения 1 часа звука:

  • На 3200 бит/с, один час звука требует всего 1,37 МБ (поместится на одной старой 3½-дюймовой дискете!)
  • Битрейт 2400 бит/с соответствует 1,03 МБ/ч
  • Битрейт 1600 бит/с равняется 0,68 МБ/ч (или примерно два часа звука на одной дискете!)
  • 1200 бит/с — до 0,51 МБ/ч
  • 700 бит/с — до 0,3 МБ/ч

Сжатие очень сильное, но результат явно звучит неестественно.

Для сравнения, тот же звук в MP3 на 8 Кбит/с.

Размер файла значительно больше, чем у Codec 2, и качество, вероятно, всё ещё неприемлемо. Можно хорошо слышать то, что иногда называют шипением (sizzle) — странные металлические звуки, присущие MP3 низкого качества.

Есть последний кодек, с которым можно провести сравнение. Кажется, он объединяет оба мира, то есть обеспечивает приемлемое качество на низком битрейте: Opus.

Благодаря его убедительной производительности на низких битрейтах компания Auphonic уже предлагает пользователям кодирование Opus вплоть до 6 Кбит/с, самого низкого битрейта, который поддерживает кодек.

На скорости 6 Кбит/с кодек Opus кажется значительно лучше, чем MP3 8 Кбит/с. Голос немного приглушенный, но всё ещё звучит естественно.

Возвращаясь к Codec 2 чисто ради интереса послушаем, как у него получается кодирование музыки! (Имейте в виду, что Codec 2 не предназначен для кодирования музыки, а только для речи).

Исходный файл
MP3 8 Кбит/с

Лично я не могу слушать MP3 на таком битрейте, поэтому давайте посмотрим на результаты Codec 2! Итак, 3200 бит/с, 2400 бит/с, 1600 бит/с, 1200 бит/с, 700 бит/с.

Несложно понять, что для этой цели он вообще не подходит!

Codec 2 и WaveNet


Как мы уже слышали, несмотря на впечатляющее сжатие, в результате получается не очень естественное звучание.

Но тут дело становится интереснее, если посмотреть на работу Бастиана Кляйна из Библиотеки Корнельского университета. Он использовал Codec 2 на битрейте 2400 бит/с для кодирования, но заменил декодер Codec 2 на генеративную модель глубокого обучения WaveNet (для дополнительной информации см. статью «Кодирование речи с низким битрейтом на основе Wavenet»).

Вот несколько примеров от авторов:

Мужской голос
Исходный файл
Codec 2
С декодером WaveNet

Женский голос
Исходный файл
Codec 2
С декодером WaveNet

По сравнению с Codec 2 мы слышим значительное улучшение качества, а если сравнить с оригиналом, то существенного снижения качества нет.

Сам Дэвид Роу заявил, что считает результат «кардинальным улучшением в кодировании речи при низкой скорости передачи» и «хорошим широкополосным речевым кодеком 8000 бит/с».

Вывод


Хотя (оригинальный) кодек Codec 2 представляет собой очень интересную работу, его сфера использования ограничена, а конечный результат не подходит для подкастинга. Также по аудиопримерам понятно, что его можно использовать для сжатия только голоса, но не музыки.

Тем не менее, Codec 2 в сочетании с декодером WaveNet значительно улучшает качество, а низкий битрейт (2400 бит/с) будет чрезвычайно интересен для распространения подкастов и аудиокниг: на один час звука требуется всего 1,03 МБ места!

Auphonic добавит поддержку Codec 2 в файлы выдачи, когда декодер WaveNet появится в удобной для использования форме. Пока мы добавили поддержку Codec 2 только для входных файлов.