C
ChIlL
НЛО опубликовал
Руководство Gentoo Linux ALSA
1. Введение
Что такое ALSA?
ALSA, или Advanced Linux Sound Architecture — Продвинутая Звуковая Архитектура Linux, обеспечивает аудио- и MIDI- (Musical Instrument Digital Interface — Цифровой Интерфейс Музыкальных Инструментов) функциональность в операционной системе Linux. ALSA является основной звуковой подсистемой в ядрах 2.6, заменившей собой OSS (Open Sound System - Открытая Звуковая Система), которая использовалась в ядрах 2.4.
Главные преимущества ALSA заключены в эффективной поддержке всех типов аудиоинтерфейсов, начиная от обычного пользователя и заканчивая профессиональным звуковым оборудованием, в безопасности с потоками и мультипроцессорными системами, в обратной совместимости с OSS и библиотеке alsa-lib пользовательского уровня для простой разработки приложений.
ALSA в Gentoo
Одним из преимуществ Gentoo является, то пользователю предоставляется максимальный контроль над установкой/настройкой системы. ALSA в Gentoo следует этому принципу. Есть два способа осуществить поддержку ALSA в вашей системе. Мы подробно рассмотрим их в следующей главе.
2. Устновка ALSA
Параметры
Предупреждение: Способы, описываемые ниже, несовместимы между собой. У вас не может быть скомпилированная в ядре ALSA и одновременно установленный media-sound/alsa-driver. Это приведет к краху.
Есть две возможности для установки ALSA:
Использование ALSA, предоставляемой вашим ядром. Это предпочтительный и рекомендуемый метод.
Использование пакета media-sound/alsa-driver, предоставляемого Gentoo.
Рассмотрим подробнее оба варианта перед тем, как окончательно выбрать один.
Вот преимущества и недостатки использования ALSA, предоставляемой ядром:
ALSA в ядре за и против
+ Хорошая стабильность интегрированных в ядро драйверов
+ Одно решение, никаких повторных команд emerge
- Может быть немного устаревшей по сравнению с alsa-driver
А если вы выберете alsa-driver, то:
Драйверы ALSA за и против
+ Последние драйверы от Проекта ALSA
- Каждая пересборка ядра требует повторной установки alsa-driver
- Определенные параметры конфигурации ядра дожны быть отключены
Итак...
Главное отличие между использованием alsa-driver и ALSA, идущей вместе с ядром, в том, что версия alsa-driver в основном немного новей, чем версия в ядре. Так как нет огромной разницы между ними, вы можете попробовать ALSA, идущую вместе с ядром, как простое в использовании решение. Перед тем, как сообщить в Gentoo Bugzilla о любой проблеме, связанной со звуком, пожалуйста, попробуйте воспроизвести ее с использованием alsa-driver и отправьте отчет об ошибке вне зависимости от результата.
Перед тем, как вы начнете
Вне зависимости от выбранного вами способа установки, вам необходимо узнать какие драйвера использует ваша карта. В большинстве случаев, звуковые карты (встроенные и подключаемые) основаны на PCI и lspci поможет вам раскопать необходимую информацию. Сделайте emerge sys-apps/pciutils чтобы получить lspci, если вы еще не установили этот пакет. Если у вас звуковая карта с USB, lsusb из sys-apps/usbutils может вам помочь. Карт ISA попробуйте sys-apps/isapnptools. Также следующие страницы могут помочь владельцам звуковых карт, основанных на ISA.
Страница ISAPNPTOOLS
Статья о PnP в LinuxJournal
TLDP Sound HOWTO
Примечание: Чтобы было проще объяснять, в оставшейся части руководства мы предположим, что у пользователя звуковая карта, основанная на PCI.
Теперь мы попробуем найти информацию о звуковой карте.
Листинг 2.1: Подробности звуковой карты
# lspci -v | grep -i audio
0000:00:0a.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 06)
Теперь мы знаем, что звуковая карта, установленная в компьютере, — Sound Blaster Live!, и производителем является Creative Labs. Зайдем на страницу ALSA Soundcard Matrix и выберем select Creative Labs из выпадающего списка. В ответ вы получите страницу, содержащую таблицу продуктов Creative Labs, из которой вы можете узнать, что SB Live! использует модуль emu10k1. Эта информация нам и нужна. Если вам нужна более подробная информация, то вы можете перейти по ссылке "Details" на страницу о emu10k1.
Использование ALSA, доступного из вашего ядра
Если вы один из тех, кто идет по пути наименьшего сопротивления, как и я, то этот способ для вас.
Примечание: Начиная с выпуска 2005.0, Gentoo Linux использует 2.6 в качестве основного ядра. Если не используете намеренно профиль с ядром 2.4, пакет gentoo-sources для большинства архитектур должен быть ядром из ветки 2.6. Пожалуйста, проверьте, что у вас ядро из ветки 2.6. Этот способ не применим для ядра 2.4.
А теперь давайте сконфигурируем ядро для включения ALSA.
Важно: Пользователи genkernel должны запустить genkernel --menuconfig all и следовать инструкциям из раздела Параметры ядра для ALSA.
Листинг 2.2: Heading over to the source
# cd /usr/src/linux
# make menuconfig
Примечание: В примере выше предполагается, что символическая ссылка /usr/src/linux указывает на исходные коды используемого вами ядра. Пожалуйста, удостоверьтесь в этом перед тем, как продолжить.
Теперь мы включим некоторые параметры в конфигурации ядра 2.6, чтобы обеспечить поддержку ALSA для нашей звуковой карты.
Пожалуйста, отметьте, что для простоты все примеры показывают, что ALSA будет собираться в качестве модулей. Это благоразумно, потому что в дальнейшем это позволит использовать alsaconf, с помощью которого будет удобно настраивать звуковую карту. Пожалуйста, не пропустите раздел Конфигурация/uri>. Если вы все же выбираете встроенные параметры, удостоверьтесь, что вносите правильные изменения в конфигурацию.
Листинг 2.3: Параметры ядра для ALSA
Device Drivers --->
Sound --->
(Поддержка должна быть включена)
<M> Sound card support
(Убедитесь, что OSS отключена)
Open Sound System --->
< > Open Sound System (DEPRECATED)
(Вернитесь на шаг назад и войдите в раздел ALSA)
Advanced Linux Sound Architecture --->
<M> Advanced Linux Sound Architecture
(Выберите, если вам нужен MIDI sequencing и routing)
<M> Sequencer support
(Поддержка старых /dev/mixer* и /dev/dsp*. Рекомендуется.)
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
(Теперь вы можете выбирать поддерживаемые устройства. Обычно в
системе есть только одна звуковая карта. Если у вас их несколько, включите
поддержу для них всех.)
(Для тестирования и разработки, обычным пользователям не нужен,
но если вы знаете, что делаете...)
Generic devices --->
(Для звуковых карт ISA)
ISA devices --->
(Если у вас Gravis, выберите этот параметр)
<M> Gravis UltraSound Extreme
(Перейдите на один уровень назад и войдите в раздел PCI-устройств.
Большинство современных звуковых карт основаны на PCI)
PCI devices --->
(Теперь выберем драйвер emu10k1 для нашей карты)
<M> Emu10k1 (SB Live!, Audigy, E-mu APS)
(Или для карты Intel)
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
(А может у вас карта на чипсете VIA?)
<M> VIA 82C686A/B, 8233/8235 AC97 Controller
(Вернитесь на один уровень назад и выберите, если у вас звуковая карта USB)
USB Devices --->
Теперь параметры вашего ядра установлены, и вы можете (пере)собрать ядро. Поддержка ALSA для вашей карты будет доступной после того, как вы перезагрузитесь с новым ядром. Не забудьте обновить конфигурацию вашего начального загрузчика, чтобы использовать недавно собранное ядро. Теперь, если все работает, как должно, вы можете продолжить с утилит ALSA.
Использование драйверов ALSA из пакета
Итак, вы выбрали использование alsa-driver. Тогда начнем. Есть несколько причин того, чтобы были скомпилирован только тот драйвер, который необходим вашей карте. Хотя в этом нет особой необходимости, будут убраны ненужные драйверы, которые в другом случае собирались бы.
Если вы не знаете, какие драйверы для звуковой карты вам могут понадобиться, пожалуйста, ознакомьтесь с разделом lspci этого руководства. Как только вы узнаете имя драйвера (emu10k1 в нашем примере), отредактируйте /etc/make.conf, добавив переменную ALSA_CARDS.
Листинг 2.4: Добавление ALSA_CARDS в make.conf
(Для одной звуковой карты)
ALSA_CARDS="emu10k1"
(Для нескольких карт разделите названия пробелами)
ALSA_CARDS="emu10k1 via82xx"
Если вы уже скомпилировали свое ядро и хотите использовать alsa-driver, пожалуйста удостоверьтесь в следующем перед тем, как продолжить, иначе alsa-driver, скорее всего не установиться. Следующий список поможет вам провести проверку.
Примечание: Пользователи genkernel могут продолжить с установки alsa-driver, так как конфигурация их обновленного ядра по умолчанию соответствует нижеперечисленному.
CONFIG_SOUND is set. (Общая поддержка звука включена)
CONFIG_SOUND_PRIME is not set. (Встроенная поддержка OSS отключена)
CONFIG_SND is not set. (Встроенная поддержка ALSA отключена)
Символическая ссылка /usr/src/linux отражает то ядро, для которого вы хотите осуществить поддержку ALSA.
Листинг 2.5: .config checks
(Проверяем, что символическая ссылка указывает на нужное
ядро.)
# cd /usr/src/linux
# grep SOUND .config
(Первый пункт выполнен)
CONFIG_SOUND=y
(Второй пункт выполнен)
CONFIG_SOUND_PRIME is not set
# grep SND .config
(Третий пункт выполнен)
CONFIG_SND is not set
Теперь вы готовы набрать магические слова... нет, не абракадабру.
Листинг 2.6: Установка alsa-driver
# emerge alsa-driver
Важно: Пожалуйста, запомните, что вам придется запускать emerge alsa-driver каждый раз после очередной (пере)сборки ядра, так как предыдущие драйверы удаляются.
3. Настройка/тестирование ALSA
Утилиты ALSA
alsa-utils, содержащие множество очень полезных программ, в том числе и сценарий инициализации ALSA, составляют неотъемлемую часть ALSA. Поэтому мы настоятельно советуем вам установить alsa-utils
Листинг 3.1: Установка alsa-utils
# emerge alsa-utils
Примечание: Если вы включили поддержку ALSA в вашем ядре и собрали ее не в качестве модулей, пожалуйста, перейдите в раздел Сценарий инициализации ALSA. Все что вам осталось — настроить ALSA. Это может быть сделано очень просто при помощи alsaconf — утилиты, входящей в состав alsa-utils.
Настройка
Примечание: Пожалуйста, завершите все программы, которые могут обратиться к звуковой карте во время работы alsaconf.
Самый простой способ настроить вашу звуковую карту — запустить alsaconf. Просто наберите alsaconf в терминале с правами root.
Листинг 3.2: Запуск alsaconf
# alsaconf
Вы увидите опрятный интерфейс программы, которая автоматически опробует ваши устройства и попробует найти вашу звуковую карту. Вас попросят выбрать звуковую карту из списка. Как только это будет сделано, вас спросят разрешения автоматически сделать необходимые изменения в /etc/modules.d/alsa. Также будут изменены настройки громкости на оптимальный уровень, выполнится modules-update и запустится сервис /etc/init.d/alsasound. После того, как alsaconf закончит работу, вы сможете продолжить с настройки сценария инициализации ALSA.
Сценарий инициализации ALSA
Мы почти закончили настройку. Вне зависимости от выбранного вам способа установки ALSA, вам понадобится что-то, что будет загружать модули или инициализировать ALSA и восстанавливать настройки громкости при загрузке системы. Сценарий инициализации ALSA, называемый alsasound, сделает это все для вас. Добавьте его в загрузочный уровень запуска.
Листинг 3.3: Добавление ALSA в загрузочный уровень запуска
# rc-update add alsasound boot
* alsasound added to runlevel boot
* rc-update complete.
Далее, проверьте файл /etc/conf.d/alsasound и убедитесь, что переменная SAVE_ON_STOP установлена в значение yes. Это сохранит ваши настройки звука при выключении системы.
Группа audio
Перед тем как начать тестировать, необходимо сделать одну последнюю важную вещь. Главное правило в операционных системах *nix гласит: «Не работай с правами root, если в этом нет необходимости». Сейчас это правило будет выполнено
. Каким образом? Ну, большую часть времени вы будете работать под учетной записью пользователя и захотите слушать музыку или иметь доступ к звуковой карте. Чтобы это было так, вы должны быть в группе audio. Сейчас мы добавим пользователей в эту группу, чтобы у них не было проблем со звуком. Мы воспользуемся gpasswd, так что вы должны иметь права root, чтобы сделать это.
Листинг 3.4: Добавление пользователей в группу audio
(Замените <имя_пользователя> на необходимое имя)
# gpasswd -a <имя_пользователя> audio
Adding user <имя_пользователя> to group audio
Проверка громкости!
Мы выполнили все необходимые настройки и подготовку, а теперь заставим ALSA работать. Если запускали утилиту alsaconf, вы можете пропустить этот шаг, так как alsaconf уже все сделал за вас.
Листинг 3.5: Запуск сервиса
(для ALSA в качестве модулей)
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Loading: snd-card-0 ... [ ok ]
* Loading: snd-pcm-oss ... [ ok ]
* Loading: snd-seq ... [ ok ]
* Loading: snd-emu10k1-synth ... [ ok ]
* Loading: snd-seq-midi ... [ ok ]
* Restoring Mixer Levels ... [ ok ]
(для ALSA, встроенной в ядро)
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Restoring Mixer Levels ... [ ok ]
Теперь эти необходимые вещи выполнены, и нам надо проверить громкость, потому что по умолчанию звук выключен. Для этого случая мы воспользуемся alsamixer.
Листинг 3.6: Запуск alsamixer
(Откройте в терминале. Будут отображены только необходимые настройки)
# alsamixer
Важно: Если у вас проблемы с запуском alsamixer и вы получаете ошибки, подобные этой: «alsamixer: function snd_ctl_open failed for default: No such file or directory», то, скорее всего, проблема в инициализации устройств демоном udev. Запустите killall udevd; udevstart для перезагрузки устройств в /dev и попробуйте снова alsamixer. Это должно решить проблему.
Вот так может выглядеть микшер ALSA при первом запуске. Обратите внимание, что уровни каналов Master и PCM занижены и что под ними буквы MM. Это означает, что они заглушены. Если вы попробуете что-нибудь проиграть с таким состоянием alsamixer, то не услышите ничего из ваших динамиков.
Рисунок 3.1: Главное окно микшера ALSA, каналы заглушены
Для начала, включим каналы и установим необходимые уровни громкости.
Предупреждение: Оба канала Master и PCM должны быть включены и установлены в слышимый уровень громкости, если вы хотите услышать что-то из ваших динамиков.
Для перемещения между каналами используйте клавиши влево и вправо. (<- и ->).
Чтобы заглушить/включить канал, выберите его, например Master, и нажмите клавишу m.
Чтобы увеличить или уменьшить уровень громкости, используйте клавиши вверх и вниз.
Примечание: Будьте осторожны при установке значений для Bass и Treble. Обычно для обоих оптимально значение 50. Слишком высокие значения Bass могут вызвать дребезжание динамиков, неспособных воспроизводить глубокие басы.
После того, как вы все сделаете, ваш микшер ALSA должен выглядеть, как это показано ниже. Заметьте, что вместо MM — 00 и уровни громкости в оптимальном значении.
Рисунок 3.2: Микшер ALSA готов зажигать
Проверка звука!
Раздражительный способ проверить работу вашей звуковой карты заключается в слышимости из ваших динамиков статических шумов. Это не очень-то приятно, но зато теперь вы знаете, что звуковая карта настроена и работает.
Листинг 3.7: Слушаем статику
# cat /dev/urandom > /dev/dsp
Примечание: Устройство /dev/dsp является символической ссылкой на устройство /dev/sound/dsp и должно быть автоматически создано. Попробуйте перенаправить вывод на /dev/sound/dsp, если вы получаете ошибку «No such file or directory».
Вы должны услышать статический шум. Нажмите Ctrl + C для остановки. Если вы ничего не слышите, то сейчас самое время вернуться назад, проверить/отследить все проблемы и решить их.
Наконец-то. Музыка. Если все прошло замечательно, то теперь вы сможете слушать хорошую музыку. Быстрый способ убедиться в этом — воспользоваться консольной командой наподобие media-sound/madplay. Вы также можете использовать что-нибудь более известное, например mpg123 или xmms. Если вы поклонник формата OGG, используйте программу ogg123 из media-sound/vorbis-tools. Используйте любой удобный для вас плеер. Как всегда, emerge — то, что вам надо.
Листинг 3.8: Получение программ
(Установка необходимых приложений)
# emerge madplay mpg123 xmms
(Для проигрывания ogg-файлов)
# emerge vorbis-tools
А теперь проиграем ваш любимый саундтрек...
Листинг 3.9: Проигрывание музыки
# madplay -v /mnt/shyam/Music/Paul\ Oakenfold\ -\ Dread\ Rock.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
Title: Dread Rock
Artist: Paul Oakenfold
Album: Matrix Reloaded
Year: 2003
Genre: Soundtrack
Soundtrack
00:04:19 Layer III, 160 kbps, 44100 Hz, joint stereo (MS), no CRC
# ogg123 Paul\ Oakenfold\ -\ Dread\ Rock.ogg
Audio Device: Advanced Linux Sound Architecture (ALSA) output
Playing: Paul Oakenfold - Dread Rock.ogg
Ogg Vorbis stream: 2 channel, 44100 Hz
Genre: Soundtrack
Transcoded: mp3;160
Title: Dread Rock
Artist: Paul Oakenfold
Date: 2003
Album: Matrix Reloaded
Time: 00:11.31 [04:28.75] of 04:40.06 (200.6 kbps) Output Buffer 96.9%
ALSA и USE
Теперь вы можете добавить USE-флаг alsa в файл /etc/make.conf, чтобы гарантировать, что приложения, поддерживающие ALSA, будут компилироваться вместе с нею. На некоторых платформах, как x86 и amd64, флаг включен по умолчанию.
Проблемы?
Если по каким-либо причинам вы не слышите звука, сначала проверьте настройки alsamixer. 80% всех проблем заключаются в заглушенных каналах или низкой громкости. Также проверьте звуковой апплет вашего оконного менеджера и удостоверьтесь, что громкости каналов установлены на слышимом уровне.
/proc — ваш друг, товарищ и брат. И, в таком случае, /proc/asound — ваш лучший друг. Мы просто бегло просмотрим, как много информации доступно здесь для нас.
Листинг 3.10: Развлечение с /proc/asound
(Перво-наперво, если /proc/asound/cards отображает вашу карту, то ALSA
распознала вашу звуковую карту.)
# cat /proc/asound/cards
0 [Live ]: EMU10K1 - Sound Blaster Live!
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
(Если вы, как и я, не включали поддержку ALSA в ядре и использовали
alsa-driver, то это отобразит текущую версию ALSA)
# cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version 1.0.8 (Thu Jan 13 09:39:32 2005 UTC).
(Подробности эмуляции OSS в ALSA )
# cat /proc/asound/oss/sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.8 emulation code)
Kernel: Linux airwolf.zion 2.6.11ac1 #2 Wed May 4 00:35:08 IST 2005 i686
Config options: 0
Installed drivers:
Type 10: ALSA emulation
Card config:
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
Audio devices:
0: EMU10K1 (DUPLEX)
Synth devices: NOT ENABLED IN CONFIG
Midi devices:
0: EMU10K1 MPU-401 (UART)
Timers:
7: system timer
Mixers:
0: SigmaTel STAC9721/23
Другой очень распространенной проблемой среди пользователей является странная ошибка «Unknown symbol in module» («Неизвестный символ в модуле»). Пример ее появления показан ниже.
Листинг 3.11: Ошибка неизвестного символа в модуле
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Loading: snd-card-0 ... [ ok ]
* Loading: snd-pcm-oss ...
WARNING: Error inserting snd_mixer_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-mixer-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg) FATAL: Error inserting
snd_pcm_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-pcm-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg)
[ !! ]
* Loading: snd-mixer-oss ...
FATAL: Error inserting snd_mixer_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-mixer-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg)
[ !! ]
* Loading: snd-seq ... [ ok ]
* Loading: snd-emu10k1-synth ... [ ok ]
* Loading: snd-seq-midi ... [ ok ]
* Restoring Mixer Levels ... [ ok ]
А если просмотреть вывод dmesg, то, скорее всего, можно увидеть следующее:
Листинг 3.12: Вывод dmesg
(Показаны только соответствующие части вывода)
# dmesg | less
ACPI: PCI Interrupt 0000:02:06.0[A] -> Link [APC3] -> GSI 18 (level, low) ->
IRQ 209
snd_mixer_oss: Unknown symbol snd_unregister_oss_device
snd_mixer_oss: Unknown symbol snd_register_oss_device
snd_mixer_oss: Unknown symbol snd_mixer_oss_notify_callback
snd_mixer_oss: Unknown symbol snd_oss_info_register
snd_pcm_oss: Unknown symbol snd_unregister_oss_device
snd_pcm_oss: Unknown symbol snd_register_oss_device
snd_pcm_oss: Unknown symbol snd_mixer_oss_ioctl_card
snd_pcm_oss: Unknown symbol snd_oss_info_register
snd_mixer_oss: Unknown symbol snd_unregister_oss_device
snd_mixer_oss: Unknown symbol snd_register_oss_device
snd_mixer_oss: Unknown symbol snd_mixer_oss_notify_callback
snd_mixer_oss: Unknown symbol snd_oss_info_register
Эта проблема возникает из-за попытки переключиться с alsa-driver на встроенную в ядре ALSA. Когда вы удаляете alsa-driver, то файлы модулей сохраняются системой защиты конфигурации. Поэтому, когда вы переходите на встроенные в ядро драйверы, попытка modprobe выдаст вам смесь модулей из alsa-driver и встроеных в ядро, порождая рассмотренные ошибки.
Решение очень простое. Просто удалите вызывающий проблемы каталог после удаления alsa-driver. Проверьте, что удаляете модули правильной версии ядра!
Листинг 3.13: Удаление модулей alsa-driver
(Замените KERNELVER вашей версией ядра)
# rm -rf /lib/modules/KERNELVER/alsa-driver
4. Другие возможности ALSA
Настройка поддержки MIDI
Если ваша карта имеет встроенный MIDI синтезатор и вы хотите слушать *.mid файлы, установите awesfx, содержащий основной набор утилит для управления драйвером AWE32. Сначала нам надо установить его. Если у вас нет синтезатора, вы можете использовать виртуальный. Пожалуйста, обратитесь к разделу Виртуальные синтезаторы для более детальной информации.
Листинг 4.1: Установка awesfx
# emerge awesfx
Примечание: Вам понадобиться скопировать файлы сэмплов SoundFont (SF2) с компакт-диска вашей звуковой карты или из установленных Windows в каталог /usr/share/sounds/sf2/. Для примера, файл сэмплов для карты Creative SBLive! может называться 8MBGMSFX.SF2.
После копирования файлов сэмплов мы сможем проигрывать midi-файлы. Также вы можете добавить команду asfxload в /etc/conf.d/local.start, благодаря чему сэмплы будут загружены при каждой загрузке системы.
Примечание: Пути, начинающиеся с /mnt, использованные ниже, не применимы для вашего компьютера. Они являются примерами. Пожалуйста, будьте осторожны при изменении путей на подходящие для вашей системы.
Листинг 4.2: Загрузка сэмплов
(сначала копируем файл сэмплов)
# cp /mnt/win2k/Program\ Files/CreativeSBLive2k/SFBank/8MBGMSFX.SF2 /usr/share/sounds/sf2/
(или берем его из компакт-диска SoundBlaster)
# cp /mnt/cdrom/AUDIO/ENGLISH/SFBANK/8MBGMSFX.SF2 /usr/share/sounds/sf2/
(загружаем определенный набор сэмплов)
# asfxload /usr/share/sounds/sf2/8MBGMSFX.SF2
Теперь вы можете проигрывать midi-файлы, используя программу наподобие aplaymidi. Запустите aplaymidi -l чтобы получить список доступных портов, а затем задействуйте один из них для проигрывания файла.
Листинг 4.3: Проигрывание MIDI
(Проверка открытых портов)
# aplaymidi -l
Port Client name Port name
64:0 EMU10K1 MPU-401 (UART) EMU10K1 MPU-401 (UART)
65:0 Emu10k1 WaveTable Emu10k1 Port 0
65:1 Emu10k1 WaveTable Emu10k1 Port 1
65:2 Emu10k1 WaveTable Emu10k1 Port 2
65:3 Emu10k1 WaveTable Emu10k1 Port 3
(Используем порт и проигрываем mid-файл)
# aplaymidi --port=65:0 /mnt/shyam/music/midi/mi2.mid
Виртуальные синтезаторы
Если у вашей карты отсутствует встроенный синтезатор, вы можете использовать виртуальный, например timidity++. Установка проста.
Листинг 4.4: Установка timidity++
# emerge timidity++
Чтобы timidity проигрывал звуки, ему нужен набор сэмплов SoundFont. Если у вас его нет, установите timidity-eawpatches или timidity-shompatches, которые предоставят некоторые сэмплы. У вас может быть несколько наборов установленных сэмплов, и вы можете поместить их в /usr/share/timidity/. Для переключения между разными конфигурациями timidity, вы должны будете использовать утилиту timidity-update из пакета timidity++.
Листинг 4.5: Установка сэмплов
# emerge timidity-eawpatches
# timidity-update -g -s eawpatches
(или)
# emerge timidity-shompatches
# timidity-update -g -s shompatches
Не забудьте добавить timidity в основной уровень запуска.
Листинг 4.6: Добавление timidity в основной уровень запуска
# rc-update add timidity default
# /etc/init.d/timidity start
Теперь вы можете попробовать проиграть MIDI.
Утилиты и Firmware
Для некоторых звуковых карт могут быть полезны утилиты из пакетов alsa-tools и alsa-firmware. Если вам нужен пакет alsa-tools, проверьте, что определили в переменной ALSA_TOOLS в файле /etc/make.conf нужные вам утилиты. Для примера:
Листинг 4.7: Выбор утилит ALSA в /etc/make.conf
ALSA_TOOLS="as10k1 ac3dec"
Если переменная ALSA_TOOLS не определена, то будут собраны все доступные утилиты. Теперь установите пакет alsa-tools (и/или alsa-firmware):
Листинг 4.8: Установка утилит ALSA
# emerge alsa-tools
Огромное спасибо вам всем...
Всем, кто принимал участие в написании ранних версий руководства Gentoo ALSA: Vincent Verleye, Grant Goodyear, Arcady Genkin, Jeremy Huddleston, John P. Davis, Sven Vermeulen, Benny Chuang, Tiemo Kieft и Erwin. А также Dr][aM за перевод ранней версии руководства на русский язык.
1. Введение
Что такое ALSA?
ALSA, или Advanced Linux Sound Architecture — Продвинутая Звуковая Архитектура Linux, обеспечивает аудио- и MIDI- (Musical Instrument Digital Interface — Цифровой Интерфейс Музыкальных Инструментов) функциональность в операционной системе Linux. ALSA является основной звуковой подсистемой в ядрах 2.6, заменившей собой OSS (Open Sound System - Открытая Звуковая Система), которая использовалась в ядрах 2.4.
Главные преимущества ALSA заключены в эффективной поддержке всех типов аудиоинтерфейсов, начиная от обычного пользователя и заканчивая профессиональным звуковым оборудованием, в безопасности с потоками и мультипроцессорными системами, в обратной совместимости с OSS и библиотеке alsa-lib пользовательского уровня для простой разработки приложений.
ALSA в Gentoo
Одним из преимуществ Gentoo является, то пользователю предоставляется максимальный контроль над установкой/настройкой системы. ALSA в Gentoo следует этому принципу. Есть два способа осуществить поддержку ALSA в вашей системе. Мы подробно рассмотрим их в следующей главе.
2. Устновка ALSA
Параметры
Предупреждение: Способы, описываемые ниже, несовместимы между собой. У вас не может быть скомпилированная в ядре ALSA и одновременно установленный media-sound/alsa-driver. Это приведет к краху.
Есть две возможности для установки ALSA:
Использование ALSA, предоставляемой вашим ядром. Это предпочтительный и рекомендуемый метод.
Использование пакета media-sound/alsa-driver, предоставляемого Gentoo.
Рассмотрим подробнее оба варианта перед тем, как окончательно выбрать один.
Вот преимущества и недостатки использования ALSA, предоставляемой ядром:
ALSA в ядре за и против
+ Хорошая стабильность интегрированных в ядро драйверов
+ Одно решение, никаких повторных команд emerge
- Может быть немного устаревшей по сравнению с alsa-driver
А если вы выберете alsa-driver, то:
Драйверы ALSA за и против
+ Последние драйверы от Проекта ALSA
- Каждая пересборка ядра требует повторной установки alsa-driver
- Определенные параметры конфигурации ядра дожны быть отключены
Итак...
Главное отличие между использованием alsa-driver и ALSA, идущей вместе с ядром, в том, что версия alsa-driver в основном немного новей, чем версия в ядре. Так как нет огромной разницы между ними, вы можете попробовать ALSA, идущую вместе с ядром, как простое в использовании решение. Перед тем, как сообщить в Gentoo Bugzilla о любой проблеме, связанной со звуком, пожалуйста, попробуйте воспроизвести ее с использованием alsa-driver и отправьте отчет об ошибке вне зависимости от результата.
Перед тем, как вы начнете
Вне зависимости от выбранного вами способа установки, вам необходимо узнать какие драйвера использует ваша карта. В большинстве случаев, звуковые карты (встроенные и подключаемые) основаны на PCI и lspci поможет вам раскопать необходимую информацию. Сделайте emerge sys-apps/pciutils чтобы получить lspci, если вы еще не установили этот пакет. Если у вас звуковая карта с USB, lsusb из sys-apps/usbutils может вам помочь. Карт ISA попробуйте sys-apps/isapnptools. Также следующие страницы могут помочь владельцам звуковых карт, основанных на ISA.
Страница ISAPNPTOOLS
Статья о PnP в LinuxJournal
TLDP Sound HOWTO
Примечание: Чтобы было проще объяснять, в оставшейся части руководства мы предположим, что у пользователя звуковая карта, основанная на PCI.
Теперь мы попробуем найти информацию о звуковой карте.
Листинг 2.1: Подробности звуковой карты
# lspci -v | grep -i audio
0000:00:0a.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 06)
Теперь мы знаем, что звуковая карта, установленная в компьютере, — Sound Blaster Live!, и производителем является Creative Labs. Зайдем на страницу ALSA Soundcard Matrix и выберем select Creative Labs из выпадающего списка. В ответ вы получите страницу, содержащую таблицу продуктов Creative Labs, из которой вы можете узнать, что SB Live! использует модуль emu10k1. Эта информация нам и нужна. Если вам нужна более подробная информация, то вы можете перейти по ссылке "Details" на страницу о emu10k1.
Использование ALSA, доступного из вашего ядра
Если вы один из тех, кто идет по пути наименьшего сопротивления, как и я, то этот способ для вас.
Примечание: Начиная с выпуска 2005.0, Gentoo Linux использует 2.6 в качестве основного ядра. Если не используете намеренно профиль с ядром 2.4, пакет gentoo-sources для большинства архитектур должен быть ядром из ветки 2.6. Пожалуйста, проверьте, что у вас ядро из ветки 2.6. Этот способ не применим для ядра 2.4.
А теперь давайте сконфигурируем ядро для включения ALSA.
Важно: Пользователи genkernel должны запустить genkernel --menuconfig all и следовать инструкциям из раздела Параметры ядра для ALSA.
Листинг 2.2: Heading over to the source
# cd /usr/src/linux
# make menuconfig
Примечание: В примере выше предполагается, что символическая ссылка /usr/src/linux указывает на исходные коды используемого вами ядра. Пожалуйста, удостоверьтесь в этом перед тем, как продолжить.
Теперь мы включим некоторые параметры в конфигурации ядра 2.6, чтобы обеспечить поддержку ALSA для нашей звуковой карты.
Пожалуйста, отметьте, что для простоты все примеры показывают, что ALSA будет собираться в качестве модулей. Это благоразумно, потому что в дальнейшем это позволит использовать alsaconf, с помощью которого будет удобно настраивать звуковую карту. Пожалуйста, не пропустите раздел Конфигурация/uri>. Если вы все же выбираете встроенные параметры, удостоверьтесь, что вносите правильные изменения в конфигурацию.
Листинг 2.3: Параметры ядра для ALSA
Device Drivers --->
Sound --->
(Поддержка должна быть включена)
<M> Sound card support
(Убедитесь, что OSS отключена)
Open Sound System --->
< > Open Sound System (DEPRECATED)
(Вернитесь на шаг назад и войдите в раздел ALSA)
Advanced Linux Sound Architecture --->
<M> Advanced Linux Sound Architecture
(Выберите, если вам нужен MIDI sequencing и routing)
<M> Sequencer support
(Поддержка старых /dev/mixer* и /dev/dsp*. Рекомендуется.)
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
(Теперь вы можете выбирать поддерживаемые устройства. Обычно в
системе есть только одна звуковая карта. Если у вас их несколько, включите
поддержу для них всех.)
(Для тестирования и разработки, обычным пользователям не нужен,
но если вы знаете, что делаете...)
Generic devices --->
(Для звуковых карт ISA)
ISA devices --->
(Если у вас Gravis, выберите этот параметр)
<M> Gravis UltraSound Extreme
(Перейдите на один уровень назад и войдите в раздел PCI-устройств.
Большинство современных звуковых карт основаны на PCI)
PCI devices --->
(Теперь выберем драйвер emu10k1 для нашей карты)
<M> Emu10k1 (SB Live!, Audigy, E-mu APS)
(Или для карты Intel)
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
(А может у вас карта на чипсете VIA?)
<M> VIA 82C686A/B, 8233/8235 AC97 Controller
(Вернитесь на один уровень назад и выберите, если у вас звуковая карта USB)
USB Devices --->
Теперь параметры вашего ядра установлены, и вы можете (пере)собрать ядро. Поддержка ALSA для вашей карты будет доступной после того, как вы перезагрузитесь с новым ядром. Не забудьте обновить конфигурацию вашего начального загрузчика, чтобы использовать недавно собранное ядро. Теперь, если все работает, как должно, вы можете продолжить с утилит ALSA.
Использование драйверов ALSA из пакета
Итак, вы выбрали использование alsa-driver. Тогда начнем. Есть несколько причин того, чтобы были скомпилирован только тот драйвер, который необходим вашей карте. Хотя в этом нет особой необходимости, будут убраны ненужные драйверы, которые в другом случае собирались бы.
Если вы не знаете, какие драйверы для звуковой карты вам могут понадобиться, пожалуйста, ознакомьтесь с разделом lspci этого руководства. Как только вы узнаете имя драйвера (emu10k1 в нашем примере), отредактируйте /etc/make.conf, добавив переменную ALSA_CARDS.
Листинг 2.4: Добавление ALSA_CARDS в make.conf
(Для одной звуковой карты)
ALSA_CARDS="emu10k1"
(Для нескольких карт разделите названия пробелами)
ALSA_CARDS="emu10k1 via82xx"
Если вы уже скомпилировали свое ядро и хотите использовать alsa-driver, пожалуйста удостоверьтесь в следующем перед тем, как продолжить, иначе alsa-driver, скорее всего не установиться. Следующий список поможет вам провести проверку.
Примечание: Пользователи genkernel могут продолжить с установки alsa-driver, так как конфигурация их обновленного ядра по умолчанию соответствует нижеперечисленному.
CONFIG_SOUND is set. (Общая поддержка звука включена)
CONFIG_SOUND_PRIME is not set. (Встроенная поддержка OSS отключена)
CONFIG_SND is not set. (Встроенная поддержка ALSA отключена)
Символическая ссылка /usr/src/linux отражает то ядро, для которого вы хотите осуществить поддержку ALSA.
Листинг 2.5: .config checks
(Проверяем, что символическая ссылка указывает на нужное
ядро.)
# cd /usr/src/linux
# grep SOUND .config
(Первый пункт выполнен)
CONFIG_SOUND=y
(Второй пункт выполнен)
CONFIG_SOUND_PRIME is not set
# grep SND .config
(Третий пункт выполнен)
CONFIG_SND is not set
Теперь вы готовы набрать магические слова... нет, не абракадабру.
Листинг 2.6: Установка alsa-driver
# emerge alsa-driver
Важно: Пожалуйста, запомните, что вам придется запускать emerge alsa-driver каждый раз после очередной (пере)сборки ядра, так как предыдущие драйверы удаляются.
3. Настройка/тестирование ALSA
Утилиты ALSA
alsa-utils, содержащие множество очень полезных программ, в том числе и сценарий инициализации ALSA, составляют неотъемлемую часть ALSA. Поэтому мы настоятельно советуем вам установить alsa-utils
Листинг 3.1: Установка alsa-utils
# emerge alsa-utils
Примечание: Если вы включили поддержку ALSA в вашем ядре и собрали ее не в качестве модулей, пожалуйста, перейдите в раздел Сценарий инициализации ALSA. Все что вам осталось — настроить ALSA. Это может быть сделано очень просто при помощи alsaconf — утилиты, входящей в состав alsa-utils.
Настройка
Примечание: Пожалуйста, завершите все программы, которые могут обратиться к звуковой карте во время работы alsaconf.
Самый простой способ настроить вашу звуковую карту — запустить alsaconf. Просто наберите alsaconf в терминале с правами root.
Листинг 3.2: Запуск alsaconf
# alsaconf
Вы увидите опрятный интерфейс программы, которая автоматически опробует ваши устройства и попробует найти вашу звуковую карту. Вас попросят выбрать звуковую карту из списка. Как только это будет сделано, вас спросят разрешения автоматически сделать необходимые изменения в /etc/modules.d/alsa. Также будут изменены настройки громкости на оптимальный уровень, выполнится modules-update и запустится сервис /etc/init.d/alsasound. После того, как alsaconf закончит работу, вы сможете продолжить с настройки сценария инициализации ALSA.
Сценарий инициализации ALSA
Мы почти закончили настройку. Вне зависимости от выбранного вам способа установки ALSA, вам понадобится что-то, что будет загружать модули или инициализировать ALSA и восстанавливать настройки громкости при загрузке системы. Сценарий инициализации ALSA, называемый alsasound, сделает это все для вас. Добавьте его в загрузочный уровень запуска.
Листинг 3.3: Добавление ALSA в загрузочный уровень запуска
# rc-update add alsasound boot
* alsasound added to runlevel boot
* rc-update complete.
Далее, проверьте файл /etc/conf.d/alsasound и убедитесь, что переменная SAVE_ON_STOP установлена в значение yes. Это сохранит ваши настройки звука при выключении системы.
Группа audio
Перед тем как начать тестировать, необходимо сделать одну последнюю важную вещь. Главное правило в операционных системах *nix гласит: «Не работай с правами root, если в этом нет необходимости». Сейчас это правило будет выполнено

Листинг 3.4: Добавление пользователей в группу audio
(Замените <имя_пользователя> на необходимое имя)
# gpasswd -a <имя_пользователя> audio
Adding user <имя_пользователя> to group audio
Проверка громкости!
Мы выполнили все необходимые настройки и подготовку, а теперь заставим ALSA работать. Если запускали утилиту alsaconf, вы можете пропустить этот шаг, так как alsaconf уже все сделал за вас.
Листинг 3.5: Запуск сервиса
(для ALSA в качестве модулей)
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Loading: snd-card-0 ... [ ok ]
* Loading: snd-pcm-oss ... [ ok ]
* Loading: snd-seq ... [ ok ]
* Loading: snd-emu10k1-synth ... [ ok ]
* Loading: snd-seq-midi ... [ ok ]
* Restoring Mixer Levels ... [ ok ]
(для ALSA, встроенной в ядро)
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Restoring Mixer Levels ... [ ok ]
Теперь эти необходимые вещи выполнены, и нам надо проверить громкость, потому что по умолчанию звук выключен. Для этого случая мы воспользуемся alsamixer.
Листинг 3.6: Запуск alsamixer
(Откройте в терминале. Будут отображены только необходимые настройки)
# alsamixer
Важно: Если у вас проблемы с запуском alsamixer и вы получаете ошибки, подобные этой: «alsamixer: function snd_ctl_open failed for default: No such file or directory», то, скорее всего, проблема в инициализации устройств демоном udev. Запустите killall udevd; udevstart для перезагрузки устройств в /dev и попробуйте снова alsamixer. Это должно решить проблему.
Вот так может выглядеть микшер ALSA при первом запуске. Обратите внимание, что уровни каналов Master и PCM занижены и что под ними буквы MM. Это означает, что они заглушены. Если вы попробуете что-нибудь проиграть с таким состоянием alsamixer, то не услышите ничего из ваших динамиков.
Рисунок 3.1: Главное окно микшера ALSA, каналы заглушены
Для начала, включим каналы и установим необходимые уровни громкости.
Предупреждение: Оба канала Master и PCM должны быть включены и установлены в слышимый уровень громкости, если вы хотите услышать что-то из ваших динамиков.
Для перемещения между каналами используйте клавиши влево и вправо. (<- и ->).
Чтобы заглушить/включить канал, выберите его, например Master, и нажмите клавишу m.
Чтобы увеличить или уменьшить уровень громкости, используйте клавиши вверх и вниз.
Примечание: Будьте осторожны при установке значений для Bass и Treble. Обычно для обоих оптимально значение 50. Слишком высокие значения Bass могут вызвать дребезжание динамиков, неспособных воспроизводить глубокие басы.
После того, как вы все сделаете, ваш микшер ALSA должен выглядеть, как это показано ниже. Заметьте, что вместо MM — 00 и уровни громкости в оптимальном значении.
Рисунок 3.2: Микшер ALSA готов зажигать
Проверка звука!
Раздражительный способ проверить работу вашей звуковой карты заключается в слышимости из ваших динамиков статических шумов. Это не очень-то приятно, но зато теперь вы знаете, что звуковая карта настроена и работает.
Листинг 3.7: Слушаем статику
# cat /dev/urandom > /dev/dsp
Примечание: Устройство /dev/dsp является символической ссылкой на устройство /dev/sound/dsp и должно быть автоматически создано. Попробуйте перенаправить вывод на /dev/sound/dsp, если вы получаете ошибку «No such file or directory».
Вы должны услышать статический шум. Нажмите Ctrl + C для остановки. Если вы ничего не слышите, то сейчас самое время вернуться назад, проверить/отследить все проблемы и решить их.
Наконец-то. Музыка. Если все прошло замечательно, то теперь вы сможете слушать хорошую музыку. Быстрый способ убедиться в этом — воспользоваться консольной командой наподобие media-sound/madplay. Вы также можете использовать что-нибудь более известное, например mpg123 или xmms. Если вы поклонник формата OGG, используйте программу ogg123 из media-sound/vorbis-tools. Используйте любой удобный для вас плеер. Как всегда, emerge — то, что вам надо.
Листинг 3.8: Получение программ
(Установка необходимых приложений)
# emerge madplay mpg123 xmms
(Для проигрывания ogg-файлов)
# emerge vorbis-tools
А теперь проиграем ваш любимый саундтрек...
Листинг 3.9: Проигрывание музыки
# madplay -v /mnt/shyam/Music/Paul\ Oakenfold\ -\ Dread\ Rock.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
Title: Dread Rock
Artist: Paul Oakenfold
Album: Matrix Reloaded
Year: 2003
Genre: Soundtrack
Soundtrack
00:04:19 Layer III, 160 kbps, 44100 Hz, joint stereo (MS), no CRC
# ogg123 Paul\ Oakenfold\ -\ Dread\ Rock.ogg
Audio Device: Advanced Linux Sound Architecture (ALSA) output
Playing: Paul Oakenfold - Dread Rock.ogg
Ogg Vorbis stream: 2 channel, 44100 Hz
Genre: Soundtrack
Transcoded: mp3;160
Title: Dread Rock
Artist: Paul Oakenfold
Date: 2003
Album: Matrix Reloaded
Time: 00:11.31 [04:28.75] of 04:40.06 (200.6 kbps) Output Buffer 96.9%
ALSA и USE
Теперь вы можете добавить USE-флаг alsa в файл /etc/make.conf, чтобы гарантировать, что приложения, поддерживающие ALSA, будут компилироваться вместе с нею. На некоторых платформах, как x86 и amd64, флаг включен по умолчанию.
Проблемы?
Если по каким-либо причинам вы не слышите звука, сначала проверьте настройки alsamixer. 80% всех проблем заключаются в заглушенных каналах или низкой громкости. Также проверьте звуковой апплет вашего оконного менеджера и удостоверьтесь, что громкости каналов установлены на слышимом уровне.
/proc — ваш друг, товарищ и брат. И, в таком случае, /proc/asound — ваш лучший друг. Мы просто бегло просмотрим, как много информации доступно здесь для нас.
Листинг 3.10: Развлечение с /proc/asound
(Перво-наперво, если /proc/asound/cards отображает вашу карту, то ALSA
распознала вашу звуковую карту.)
# cat /proc/asound/cards
0 [Live ]: EMU10K1 - Sound Blaster Live!
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
(Если вы, как и я, не включали поддержку ALSA в ядре и использовали
alsa-driver, то это отобразит текущую версию ALSA)
# cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version 1.0.8 (Thu Jan 13 09:39:32 2005 UTC).
(Подробности эмуляции OSS в ALSA )
# cat /proc/asound/oss/sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.8 emulation code)
Kernel: Linux airwolf.zion 2.6.11ac1 #2 Wed May 4 00:35:08 IST 2005 i686
Config options: 0
Installed drivers:
Type 10: ALSA emulation
Card config:
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
Audio devices:
0: EMU10K1 (DUPLEX)
Synth devices: NOT ENABLED IN CONFIG
Midi devices:
0: EMU10K1 MPU-401 (UART)
Timers:
7: system timer
Mixers:
0: SigmaTel STAC9721/23
Другой очень распространенной проблемой среди пользователей является странная ошибка «Unknown symbol in module» («Неизвестный символ в модуле»). Пример ее появления показан ниже.
Листинг 3.11: Ошибка неизвестного символа в модуле
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Loading: snd-card-0 ... [ ok ]
* Loading: snd-pcm-oss ...
WARNING: Error inserting snd_mixer_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-mixer-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg) FATAL: Error inserting
snd_pcm_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-pcm-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg)
[ !! ]
* Loading: snd-mixer-oss ...
FATAL: Error inserting snd_mixer_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-mixer-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg)
[ !! ]
* Loading: snd-seq ... [ ok ]
* Loading: snd-emu10k1-synth ... [ ok ]
* Loading: snd-seq-midi ... [ ok ]
* Restoring Mixer Levels ... [ ok ]
А если просмотреть вывод dmesg, то, скорее всего, можно увидеть следующее:
Листинг 3.12: Вывод dmesg
(Показаны только соответствующие части вывода)
# dmesg | less
ACPI: PCI Interrupt 0000:02:06.0[A] -> Link [APC3] -> GSI 18 (level, low) ->
IRQ 209
snd_mixer_oss: Unknown symbol snd_unregister_oss_device
snd_mixer_oss: Unknown symbol snd_register_oss_device
snd_mixer_oss: Unknown symbol snd_mixer_oss_notify_callback
snd_mixer_oss: Unknown symbol snd_oss_info_register
snd_pcm_oss: Unknown symbol snd_unregister_oss_device
snd_pcm_oss: Unknown symbol snd_register_oss_device
snd_pcm_oss: Unknown symbol snd_mixer_oss_ioctl_card
snd_pcm_oss: Unknown symbol snd_oss_info_register
snd_mixer_oss: Unknown symbol snd_unregister_oss_device
snd_mixer_oss: Unknown symbol snd_register_oss_device
snd_mixer_oss: Unknown symbol snd_mixer_oss_notify_callback
snd_mixer_oss: Unknown symbol snd_oss_info_register
Эта проблема возникает из-за попытки переключиться с alsa-driver на встроенную в ядре ALSA. Когда вы удаляете alsa-driver, то файлы модулей сохраняются системой защиты конфигурации. Поэтому, когда вы переходите на встроенные в ядро драйверы, попытка modprobe выдаст вам смесь модулей из alsa-driver и встроеных в ядро, порождая рассмотренные ошибки.
Решение очень простое. Просто удалите вызывающий проблемы каталог после удаления alsa-driver. Проверьте, что удаляете модули правильной версии ядра!
Листинг 3.13: Удаление модулей alsa-driver
(Замените KERNELVER вашей версией ядра)
# rm -rf /lib/modules/KERNELVER/alsa-driver
4. Другие возможности ALSA
Настройка поддержки MIDI
Если ваша карта имеет встроенный MIDI синтезатор и вы хотите слушать *.mid файлы, установите awesfx, содержащий основной набор утилит для управления драйвером AWE32. Сначала нам надо установить его. Если у вас нет синтезатора, вы можете использовать виртуальный. Пожалуйста, обратитесь к разделу Виртуальные синтезаторы для более детальной информации.
Листинг 4.1: Установка awesfx
# emerge awesfx
Примечание: Вам понадобиться скопировать файлы сэмплов SoundFont (SF2) с компакт-диска вашей звуковой карты или из установленных Windows в каталог /usr/share/sounds/sf2/. Для примера, файл сэмплов для карты Creative SBLive! может называться 8MBGMSFX.SF2.
После копирования файлов сэмплов мы сможем проигрывать midi-файлы. Также вы можете добавить команду asfxload в /etc/conf.d/local.start, благодаря чему сэмплы будут загружены при каждой загрузке системы.
Примечание: Пути, начинающиеся с /mnt, использованные ниже, не применимы для вашего компьютера. Они являются примерами. Пожалуйста, будьте осторожны при изменении путей на подходящие для вашей системы.
Листинг 4.2: Загрузка сэмплов
(сначала копируем файл сэмплов)
# cp /mnt/win2k/Program\ Files/CreativeSBLive2k/SFBank/8MBGMSFX.SF2 /usr/share/sounds/sf2/
(или берем его из компакт-диска SoundBlaster)
# cp /mnt/cdrom/AUDIO/ENGLISH/SFBANK/8MBGMSFX.SF2 /usr/share/sounds/sf2/
(загружаем определенный набор сэмплов)
# asfxload /usr/share/sounds/sf2/8MBGMSFX.SF2
Теперь вы можете проигрывать midi-файлы, используя программу наподобие aplaymidi. Запустите aplaymidi -l чтобы получить список доступных портов, а затем задействуйте один из них для проигрывания файла.
Листинг 4.3: Проигрывание MIDI
(Проверка открытых портов)
# aplaymidi -l
Port Client name Port name
64:0 EMU10K1 MPU-401 (UART) EMU10K1 MPU-401 (UART)
65:0 Emu10k1 WaveTable Emu10k1 Port 0
65:1 Emu10k1 WaveTable Emu10k1 Port 1
65:2 Emu10k1 WaveTable Emu10k1 Port 2
65:3 Emu10k1 WaveTable Emu10k1 Port 3
(Используем порт и проигрываем mid-файл)
# aplaymidi --port=65:0 /mnt/shyam/music/midi/mi2.mid
Виртуальные синтезаторы
Если у вашей карты отсутствует встроенный синтезатор, вы можете использовать виртуальный, например timidity++. Установка проста.
Листинг 4.4: Установка timidity++
# emerge timidity++
Чтобы timidity проигрывал звуки, ему нужен набор сэмплов SoundFont. Если у вас его нет, установите timidity-eawpatches или timidity-shompatches, которые предоставят некоторые сэмплы. У вас может быть несколько наборов установленных сэмплов, и вы можете поместить их в /usr/share/timidity/. Для переключения между разными конфигурациями timidity, вы должны будете использовать утилиту timidity-update из пакета timidity++.
Листинг 4.5: Установка сэмплов
# emerge timidity-eawpatches
# timidity-update -g -s eawpatches
(или)
# emerge timidity-shompatches
# timidity-update -g -s shompatches
Не забудьте добавить timidity в основной уровень запуска.
Листинг 4.6: Добавление timidity в основной уровень запуска
# rc-update add timidity default
# /etc/init.d/timidity start
Теперь вы можете попробовать проиграть MIDI.
Утилиты и Firmware
Для некоторых звуковых карт могут быть полезны утилиты из пакетов alsa-tools и alsa-firmware. Если вам нужен пакет alsa-tools, проверьте, что определили в переменной ALSA_TOOLS в файле /etc/make.conf нужные вам утилиты. Для примера:
Листинг 4.7: Выбор утилит ALSA в /etc/make.conf
ALSA_TOOLS="as10k1 ac3dec"
Если переменная ALSA_TOOLS не определена, то будут собраны все доступные утилиты. Теперь установите пакет alsa-tools (и/или alsa-firmware):
Листинг 4.8: Установка утилит ALSA
# emerge alsa-tools
Огромное спасибо вам всем...
Всем, кто принимал участие в написании ранних версий руководства Gentoo ALSA: Vincent Verleye, Grant Goodyear, Arcady Genkin, Jeremy Huddleston, John P. Davis, Sven Vermeulen, Benny Chuang, Tiemo Kieft и Erwin. А также Dr][aM за перевод ранней версии руководства на русский язык.