Звуковая подсистема 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 →Уровень ядра
|
Предыдущая Содержание Следующая |