Прогрессивное кодирование аудио



Прогрессивная передача аудио через Интернет

Всем кому когда-либо доводилось слушать музыку через Интернет знакома ситуация, при которой из-за падения скорости передачи опустошается буфер и воспроизведение начинает заикаться. Это происходит даже не смотря на то, что пользователю, как правило, предлагается на выбор несколько потоков, закодированных с разными битрейтами.

Дело в том, что мы не можем гарантировать, что определенный пакет, пройдя через десяток маршрутизаторов дойдет до нас в нужное время. А для воспроизведения фрейма в классических схемах (mp3, ogg и т.д.) необходимо получить его целиком. Данный проект ставит себе целью разработать систему для прогрессивной передачи аудио через Интернет, которая будет лишена указанного недостатка.

При прогрессивной передаче достаточно получить лишь начало фрейма, поскольку хвост его только уточняет. Другими словами, чем больше данных мы успеваем получить, тем выше качество. В таком случае, при падении скорости передачи, воспроизведение не будет остановлено, а произойдет лишь некоторое ухудшение качества звучания.

Более того, прогрессивное кодирование позволяет с точностью до байта указывать требуемую степень сжатия: ведь каждый фрейм элементарно урезается до нужного нам размера.

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

И, наконец, подобная схема позволяет оптимально использовать канал связи, поскольку она может адаптироваться к изменениям скорости передачи в реальном времени. Более подробное описание можно посмотреть в соответствующей статье.

Прогрессивный аудио кодер AGRESS

Название AGRESS получается если поиграть со словами Audio и proGRESSive. Программа agcodec позволяет прогрессивно кодировать аудио файлы. Файлы должны быть в формате WAV: 8 либо 16 бит, стерео либо моно режим, частота дискретизации может быть любой. Полученный при этом agress-файл можно воспроизвести при помощи плеера agplay, который идет в комплекте.

Реализован agcodec крайне просто: вначале исходный файл делится на фреймы (размер которых можно указать в командной строке), затем к каждому фрейму применяется вейвлетное преобразование Добеши 9/7 и алгоритм кодирования SPIHT (Set Partitioning in Hierarchical Trees).

Психоаккустическое моделирование и прочие оптимизации пока не применяются. Другими словами, данный проект пока носит скорее демонстрационный характер.

Скорость работы кодера очень сильно зависит от выбранных настроек. Более того, алгоритм практически симметричен по времени. Это означает, что скорость кодирования равна скорости декодирования. Это прежде всего объясняется особенностью алгоритма SPIHT.

Другими словами, agcodec достаточно требователен к ресурсам компьютера, но несмотря на это, на достаточно мощной машине возможно как кодировать так и декодировать аудио CD-качества в реальном времени.

Скачать

Кодер доступен для скачивания как в виде архива исходных кодов, так и в виде RPM/SRPM пакета для ОС ALT Linux. Для работы необходима библиотека glib версии 2.4 или старше. Программа распространяется в соответствии с лицензией GNU GPL.

Тестовые образцы

Для тестирования можно скачать уже закодированные файлы: фрагменты из девятой симфонии Бетховена. Воспроизвести их можно при помощи утилиты agplay, которая идет вместе с кодеком AGRESS.


Copyleft © 2003-2008 Александр Симаков
Сыктывкарский государственный университет
Последнее обновление: 15 марта 2008