Архитектурно проект представляет собой прозрачную и эффективную систему маршрутизации звуковых данных, равноправными узлами которой являются звуковая карта и программные обработчики. Каждый узел является либо источником, либо приемником, при этом имеются широкие возможности для описания всевозможных топологий маршрутов.
Что не устраивает автора проекта в существующих аудиосистемах?
- ALSA не имеет поддержки микшировавния, даже при использовании dmix.
- JACK слишком сильно загружает ЦП.
- PulseAudio все еще требует RealtimeKit для работы.
- ESD - не для обычного домашнего использования.
- OSS не поддерживает MIDI-синтезаторы, слишком быстро расходует батарею. Зато имеет прекрасный API.
При низком времени задержки требуется работа с более коротким буфером данных, что усложняет процесс конфигурации планировщика процессов. Имеющиеся аудиосистемы, работающие на пользовательском уровне, запускаются с realtime-приоритетом. Если процессов-обработчиков аудиоданных немного, то все будет работать хорошо, но с увеличением их числа нагрузка на ЦП вырастет в разы. Помещение аудиоподсистемы в ядро во многом помогает в решении проблемы и позволяет реализовать собственный эффективный планировщик. К тому же ядро - прекрасный и удобный уровень абстракции над оборудованием, не нужно самому заботиться о деталях.
Существующая аудиоподсистема ALSA позволяет прямо воздействовать на аудиоустройство с пользовательского уровня. Представьте, что подсистема по работе с сетью передает на пользовательский уровень пакеты в сыром виде, которые обрабатывает либо демон, либо отдельный процесс, целиком и полностью обладающий правами на единоличное использование интерфейса. Нужна ли вам такая система?
API разрабатываемой аудиоподсистемы будет изначально подразумевать правильную работу со звуком:
- open(2) - обращение к одной из конечных точек;
- ioctl(2) - конфигурация работы с конечной точкой;
- write(2) - запись аудиоданных;
- read(2) - получение аудиоданных.