О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

28.07.2008

FreeBSD и звук

2002 г

Да и можно слушать Баха
Даже плавая в дерьме.
Тимур Шаов

Для прослушивания музыки во FreeBSD 5-й ветки необходимости в перекомпиляции ядра может и не быть - к ядру GENERIC прилагается комплект модулей для большинства распространенных аудиочипов. Список оных можно посмотреть в каталоге /boot/kernel (если ядро после инсталляции системы не пересобиралось) или в /boot/kernel.old (если эту процедуру уже успели проделать). Модули поддержки аудиоустройств имеют вид snd_*.ko.

Среди всяких разных "*" можно увидеть такие чипы, как Ensoniq137X (на них основаны обычно карты, известные под именем Sound Blaster AWE128), Solo, Maestro и т.д. (включая, конечно же, SB8 и SB16). Есть модули и для поддержки встроенного звука Intel'овских и VIA'шных чипсетов (AC'97; правда, не знаю, как они относятся к мостам ICH4/5 последних i845 и i865/i875 - буду признателен за информацию по сему предмету), а также универсальный модуль для большинства PCI-карт. Полный список чипов, поддержка которых доступна в виде модулей, можно просмотреть в дереве исходников ядра:

$ ls /usr/src/sys/modules/sound/driver

Для версии 5.X вывод этой команды будет (исключая make-файлы) примерно следующим:

ad1816/
als4000/
cmi/
cs4281/
csa/
driver/
ds1/
emu10k1/
es137x/
ess/
fm801/
ich/
maestro/
maestro3/
mss/
neomagic/
sb16/
sb8/
sbc/
solo/
t4dwave/
uaudio/
via8233/
via82c686/
vibes/

Так что если нет желания пересобирать ядро, а желание слушать музыку, напротив, есть, достаточно подгрузить соответствующий модуль командой kldload, например, для SBAWE128 это будет выглядеть так:

$ kldload /boot/kernel/snd_es137x.ko

Процесс загрузки модуля поддержки звука можно автоматизировать, отредактировав файл /boot/loader.conf. Как именно - легко догадаться, просмотрев "эталонный" файл /boot/defaults/loader.conf - точнее, его секцию Sound modules.

Однако, по моему скромному мнению, процесс перекомпиляции ядра все равно неизбежен при индивидуальной настройке FreeBSD. И потому не вижу причин, почему бы благородному дону (и тем более благородной донье) не встроить поддержку звука непосредственно в ядро. Тем более, что для большинства PCI-карт на распространенных аудиочипах для этого достаточно одной строки

device          pcm

Некоторые сложности могут возникнуть при настройке старых, в том числе высококлассных, ISA-карт. Лично я с ними дела не имел, и потому собственными впечатлениями поделиться не могу. Однако этот вопрос очень подробно описан на странице Андрея Лаврентьева, к коей и предлагаю обратиться заинтересованным лицам.

Из сказанного ясно, что общение со звуком во FreeBSD на элементарном уровне не требует каких-либо хитроумных манипуляций с ALSA-драйверами, как в Linux. Возможно, правда, что и результат оказывается несколько хуже, но для не принадлежащих к числу записных меломанов - вполне удовлетворительный (то есть удовлетворяющим кондициям).

Что же касается средств для того, чтобы воспользоваться достижениями аудиостроительства, то есть звуковых плееров всякого рода, - их есть в портах FreeBSD. Причем - ничуть не меньше, чем в любом дистрибутиве Linux, в чем легко убедиться командой

$ /usr/ports/audio

в выводе которой можно увидеть все mpeg-плееры, от простых консольных mpg123 и mpg321 до xmms со всеми его наворотами, проигрыватели CD, средства их о-grab'ления и конвертации. Так что останавливаться на этом не буду, тем паче что в своей книжке я уделил этому вопросу, думается, должное внимание.

Однако за время, прошедшее с ее написания, изрядную популярность приобрел истинно свободный аудиоформат - OGG. Так вот, для работы с ним во FreeBSD можно обнаружить порт vorbis-tools, включающий средства для для кодирования (oggenc) и декодирования (например, в raw-формат, - oggdec) ogg-файлов, получения информации об оных (ogginfo) и редактирования комментариев (vorbiscomment), расщепления записанного ogg-потока на отдельные части (vcut) и, конечно же, воспроизведения ogg-музыки (ogg123).

Последняя программа унаследовала от своего mpeg-прототипа не только имя, но и простоту использования: команда

$ ogg123 /path/*

воспроизведет подряд все ogg-файлы из указанного каталога, причем, в отличие от mpg123, рекурсивно включая и вложенные подкаталоги. Последнего можно избежать, задав аргумент команды в виде маски /path/*.ogg.

Процесс получения ogg-файлов (коими Сеть пока не перегружена) столь же прост:

$ oggenc *.wav

Превратит все wav'ы текущего каталога в ogg'и. Впрочем, никто не запрещает задать имя входного и выходного файла явным образом. Разумеется, имеется вдоволь опций, задающих битрейт, уровень качества, вставку комментариев и т.д. Однако даже при умолчальных настройках качество получаемого аудио вполне нормальное.

Чего еще не хватает для счастья FreeBSD-юзеру? Ну конечно же, проигрывателя аудио в Real-формате. Но это - тема отдельного разговора.