Звуковая подсистема Linux |
Предыдущая Содержание Следующая |
![]() |
Улучшенная Архитектура Звука 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).
Чтобы получить более полное представление об архитектуре звукового уровня 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 →Уровень ядра
|
Предыдущая Содержание Следующая |