Як працює звук у Linux, Відкрите програмне забезпечення

У статті подано узагальнений опис моделі звукової підсистеми ОС Linux. Коротко розглянуті функції та завдання її основних компонентів (ALSA, OSS, Xine та ін.) та зв'язки між ними.

В даний час існує проблема зі звуковою підсистемою в Linux і вона зовсім не в тому, що звук не завжди працює. Проблема в «переускладненості». Це відразу стане зрозуміло, якщо ви спробуєте накидати схему зв'язків між компонентами звукової посистеми в Linux, від аудіофайлу до ваших колонок, - така діаграма скоро нагадуватиме макарони, що злиплися. Однак це буде скоріше вашою помилкою. Технологія роботи зі звуком в Linux не складніша за будь-які інші технології.

Якщо уявити звукову підсистему Linux як моделі, подібно до того, як це зроблено в OSI/ISO чи мережевих додатках, то буде помітна очевидна різниця (рис. 1). Така модель нагадуватиме не листковий пиріг, а, скоріше, вулкан у розрізі, т.к. в ній можна знайти низькорівневі функції, які дозволяють розробникам практично безпосередньо звертатися до апаратних компонентів і які зазвичай повинні бути приховані, а з іншого боку високорівневі функції, доступні ядру.

звук

Мал. 1. Модель звукової підсистеми в Linux

Компоненти звукової підсистеми в Linux

Входи:PulseAudio, Jack, GStreamer, Xine, SDL, ESD

Виходи:Hardware, OSS

Як сказала Марія фон Трапп: "Дозвольте почати з самого початку". Стосовно сучасних Linux-систем, цим початком буде Advanced Linux Sound Architecture (ALSA). Це модуль ядра, що представляє аудіофункції компонентів системи. Однак, це більш ніж звичайний драйвер: ALSA працює як мікшер, забезпечує сумісність з іншими шарами, представляє API дляпрограмістів і, при цьому, працює з низькими затримками, які можна порівняти з аналогами пропрієтарних систем.

ALSA було розроблено заміну OSS. Однак, оскільки OSS все ще використовується в успадкованих програмах, ALSA забезпечує їхню роботу завдяки рівню сумісності з OSS. Важливість ALSA найпростіше уявити, якщо думати про це як про звуковий драйвер. Отже, щоб отримати звук у системі, потрібно завантажити драйвер. І це одна з причин того, що деякі моделі ноутбуків, що мають специфічне звукове обладнання, вперто мовчать після установки Linux, чекаючи, що хтось напише для них специфічний драйвер.

ALSA відповідає за транспонування апаратних можливостей до програмних засобів, доступних мультимедійним додаткам. Створена на зміну OSS ALSA усуває багато недоліків попередньої системи, найбільш примітним з яких є неможливість одночасного відтворення від декількох джерел. ALSA здатна мультиплексувати звук програмно або апаратно і підтримує до 8 звукових карт, включаючи і MIDI (залежить від обладнання).

У чому ALSA найсильніше відрізняється від типового драйвера модуля/пристрою ядра, то це в тому, що ви можете налаштувати практично все (від рівнів багатопоточного відтворення до частот дискретизації, бітової глибини та ефектів, що застосовуються в реальному часі), створивши власний файл конфігурації. Це, до речі, дозволяє «підправити» гучність системи, у тих випадках, коли вам здається, що Linux видає дуже тихий звук. Прочитати, як це зробити можна тут: http://askubuntu.com. low-sound-issue-fixed-with-changing-alsa-config. До речі, причини, що пояснюють, чому тихий звук у Windows добре описані тут: http://ocomp.info/tihiy-zvuk-kak-uvelichit-gromkost.html.

Відносна прозорість, гнучкість та ефективність зробили ALSA стандартом де-факто для аудіо в Linux.

PulseAudio

Входи:GStreamer, Xine, ALSA

Виходи:ALSA, Jack, ESD, OSS

Виходи:ALSA, PulseAudio, Jack, ESD

GStreamer, як і PulseAudio, не приносить нічого нового в Linux-аудіо. Це просто ще один фреймворк, розроблений за роки до PulseAudio, причому спеціально для середовища Gnome. Цей фреймворк широко використовується GTK-розробниками і одну з його версій можна було знайти навіть у Palm Pre. До того ж, це один із нечисленних способів легко встановити та використовувати пропрієтарні кодеки в Linux.

Входи:PulseAudio, GStreamer, ALSA

Виходи:OSS, FFADO, ALSA

Незважаючи на переваги відкритих конфігурацій (типу PulseAudio), всі вони передбачають пряму передачу звуку від програми на пристрої виведення. Jack є «прошарком», таким собі еквівалентом віддаленому виклику процедур для аудіо, що дозволяє створювати аудіо-додатки з різних компонентів.

Виходи:Audio hardware

Якийсь час тому на ряді професійних та напівпрофесійних пристроїв використовувався інтерфейс FireWire. У нього були свої переваги та недоліки. Один з них у тому, що на відміну від USB, для Firewire потрібен спеціальний контролер і, відповідно, драйвер. Складність протоколу вимагає виділення його підтримки в окремий рівень (а не включення в ALSA) і з'явився проект FreeBOB, наступником якого став проект FFADO, який був підтриманий багатьма виробниками пристроїв з інтерфейсом FireWire.

Виходи:PulseAudio, ALSA, ESD

В ієрархії аудіопідсистеми Linux Xine — своєрідний музейний експонат. Багато хто згадає цю назву, дивлячисьна DVD-диски з фільмами, які продавалися з попереднім туди ж однойменним плеєром.

Особливістю розробки Xine було те, що розробники відокремили інтерфейс плеєра (фронт-енд) від бібліотек (бек-енд). Бекенд з коробки працював з безліччю популярних AV-контейнерів (AVI, Matroska, Ogg та ін.) і форматів (AAC, Flac, MP3, Vorbis, WMA та інших) і міг бути розширений зовнішніми кодеками.

Xine може виводити аудіо через ALSA та PulseAudio, з іншого боку, через бек-енд, до нього можуть підключатися багато інших програм. Найбільш відомими, мабуть, є фронт-енди Gxine і Totem для Gnome і Phonon для KDE.

Входи:Програми Qt/KDE

Виходи:GStrieamer, Xine

Phohon був розроблений, щоб полегшити життя розробникам та користувачам шляхом видалення деяких з зростаючих системних складнощів. Він починався як додатковий рівень абстракцій для додатків KDE4, однак розробникам спала на думку ідея помістити Phonon в QT і використовувати не тільки для KDE, але і в інших рішеннях на платформі QT. Згодом підтримка Phonon була виключена з QT, оскільки з'явилося багато критичних зауважень, основне з яких полягає в тому, що Phonon не пропонує нічого нового. Однак, можна припустити, що KDE Phonon буде використовуватися протягом усього життєвого циклу KDE4.

І, нарешті, OSS – Open Sound System. Підтримка на рівні ядра для цієї системи виключена, хоч і не повністю, починаючи з версії 2.4. Частина функцій все ще підтримується для сумісності з наявними програмами. Однак на не-Linux системах OSS все ще можна знайти як основну.

Ця спроба пролити світло на те, як працює звук у Linux не є детальним дослідженням, і несе більшою мірою пізнавальнуінформацію, будучи відправною точкою отримання додаткової інформації про звукової підсистемі ОС Linux. Інформація, наведена у статті, є актуальною на момент написання, але, враховуючи популярність Linux і швидкість розвитку цієї системи, немає жодної гарантії, що розробники ядра не змінять представлену модель в одному з найближчих релізів.