Звуковая подсистема Linux

Предыдущая  Содержание  Следующая V*D*V

Улучшенная Архитектура Звука Linux, Advanced Linux Sound Architecture (ALSA) является звуковой подсистемой, выбранной  для ядра версии 2.6. Открытая Звуковая Система, Open Sound System (OSS), звуковой уровень в ядре версии 2.4, в настоящее время устарел и не рекомендуется к использованию. Для перехода от OSS к ALSA последняя предоставляет эмуляцию OSS, которая позволяет приложениям, использующим API OSS, запускаться без изменений на ALSA. Звуковые ядра Linux, такие как ALSA и OSS, делают аудио приложения независимыми от базового оборудования, тогда как стандарты кодеков, такие как AC'97 и I2S, избавляют от необходимости написания отдельных звуковых драйверов для каждой звуковой карты.

 

Чтобы понять архитектуру звуковой подсистемы Linux посмотрите на Рисунок 13.3. Основными частями подсистемы являются:

 

Звуковое ядро, которое является базовым кодом, состоящим из процедур и структур, доступных другим компонентам звукового уровня Linux. Как и уровни ядра, принадлежащие другим драйверным подсистемам, звуковое ядро обеспечивает уровень косвенности, что делает каждый компонент в звуковой подсистеме не зависящим от других. Ядро играет важную роль в экспорте API ALSA вышележащим приложениям. Узлами /dev/snd/*, показанными на Рисунке 13.3, которые создаются и управляются из ядром ALSA, являются: /dev/snd/controlC0 - узел управления (используемый в приложениях для управления уровнем громкости и тому подобному), /dev/snd/pcmC0D0p - устройство воспроизведения (p в конце имени устройства означает playback, воспроизведение), и /dev/snd/pcmC0D0c - записывающее устройство (c в конце имени устройства означает capture, захват). В этих именах устройств целое число после C является номером карты, а после D - номером устройства. ALSA драйвер для карты, которая имеет голосовой кодек для телефонии и стерео кодек для музыки, может экспортировать /dev/snd/pcmC0D0p для чтения аудио потоков, предназначенный для первого, и /dev/snd/pcmC0D1p для качественного музыкального канала для последнего.
 

Драйверы аудио контроллера зависят от оборудования контроллера. Например, для управления аудио контроллером, находящимся в Южном мосте Intel ICH, используется драйвер snd_intel8x0.
 

Интерфейсы аудиокодеков, которые помогают взаимодействию между контроллерами и кодеками. Для кодеков AC'97 используйте snd_ac97_codec и модули ac97_bus.
 

Уровень эмуляции OSS, который выступает в качестве посредника между приложениями, использующими OSS, и ядром с поддерживающим ALSA. Этот уровень экспортирует узлы /dev, изображающие поддержку уровня OSS в ядре версии 2.4. Эти узлы, такие как /dev/dsp, /dev/adsp и /dev/mixer, позволяют приложениям OSS работать поверх ALSA без изменений. Узел OSS /dev/dsp связан с узлами ALSA /dev/snd/pcmC0D0*, /dev/adsp соответствует /dev/snd/pcmC0D1*, а /dev/mixer связан с /dev/snd/controlC0.
 

Интерфейс procfs and sysfs для доступа к информации через /proc/asound/ и /sys/class/sound/.

 

Библиотека ALSA пользовательского пространства, alsa-lib, которая предоставляет объект libasound.so. Эта библиотека упрощает работу программиста приложения ALSA, предлагая несколько готовых процедур для доступа к драйверам ALSA.
 

Пакет alsa-utils, который включает в себя такие утилиты, как alsamixer, amixer, alsactl и aplay. alsamixer или mixer используются для изменения громкости звуковых сигналов, таких как линейный вход, линейный выход или микрофон, а alsactl - для управления параметрами драйверов ALSA. aplay используется для воспроизведения звука через ALSA.

 

Рисунок 13.3. Звуковая подсистема Linux (ALSA).

Рисунок 13.3. Звуковая подсистема Linux (ALSA).

 

Чтобы получить более полное представление об архитектуре звукового уровня Linux, давайте посмотрим на драйверные модули ALSA, работающие на ноутбуке, в тандеме с Рисунком 13.3 (→ используется для добавления комментариев):

 

Код:

bash> lsmod|grep snd

snd_intel8x0      33148  0                                          →Драйвер аудио контроллера

snd_ac97_codec    92000  1 snd_intel8x0                             →Интерфейс аудио кодека

ac97_bus          3104   1 snd_ac97_codec                           →Шина аудио кодека

snd_pcm_oss       40512  0                                          →Эмуляция OSS

snd_mixer_oss     16640  1 snd_pcm_oss                              →Управление громкостью OSS

snd_pcm           73316  3 snd_intel8x0,snd_ac97_codec,snd_pcm_oss  →Уровень ядра

snd_timer         22148  1 snd_pcm                                  →Уровень ядра

snd               50820  6 snd_intel8x0,snd_ac97_codec,snd_pcm_oss, →Уровень ядра

                           snd_mixer_oss,snd_pcm,snd_timer

soundcore         8960   1 snd                                      →Уровень ядра

snd_page_alloc    10344  2 snd_intel8x0,snd_pcm                     →Уровень ядра

 

 

Предыдущая  Содержание  Следующая