alsa配置

来源:互联网 发布:java环境产量配置 编辑:程序博客网 时间:2024/06/05 05:23

alsa配置 (by hanlray(at)hotmail.com)

alsa

alsa的配置文件是alsa.conf,一般在/usr/share/alsa目录下,通常包括在alsa library包中。不应该用alsa.conf来进行配置,因为该文件会随着package版本的变化而更新,而应该使用/etc/asound和~/.asoundrc,因为alsa.conf引入了这两个文件。合乎linux系统的一般原则,/etc/asound做系统范围的配置,~/.asoundrc做用户特定配置。

通常板载声卡都是不支持硬件混音的,因此多个应用是无法同时输出声音的,alsa library提供了一个叫做dmix的plugin实现了软件混音。alsa 1.09rc2及其以上版本的默认配置在声卡不支持硬件混音的情况下会用dmix来实现软件混音,因此可能是不需要做混音配置的。如果混音不工作,可以试试以下配置:

pcm.!default { type plug slave.pcm "dmix" }
default是缺省的输出设备名,使用alsa的应用程序通常使用该设备放音,default缺省指向hw:0,0,即第一个声卡的第一个设备,这里通过!号重新定义使之指向dmix,因此所有使用default的应用程序都会输出声音到dmix,从而实现混音。

 

dmix本身只支持一个配置,配置项包括rate(缺省值48000)、format(S16)、channels(2)、period_time(125000),但是可以创建多个dmix定义。一个dmix定义的例子:

pcm.dmixer { type dmix ipc_key 1024 ipc_key_add_uid true slave { pcm "hw:0,0" period_size 1024 buffer_size 8192 rate 48000 } bindings { 0 0 1 1 } }
ipc_key指定唯一的IPC key,对每个不同的dmix定义该值必须唯一,因为定义的dmix设备将使用该key来创建shared memory.

 

ipc_key_add_uid设置为true会把该值加入一个集合,用来防止ipc_key冲突

怎么知道定义的设备是否有效呢?aslaplayer是个好工具,如:

alsaplayer -o alsa -d dmixer music.mp3

可以测试上面定义的dmixer是否工作

只有多个放音的程序使用同一个混音设备时,混音才会有效,因此以下命令会失败:

alsaplayer -o alsa -d dmixer music.mp3 & alsaplayer -o alsa -d dmix music1.mp3

esd

esd是一个软件混音程序,主要包括两部分:
  • 一个名为esd的daemon程序
  • 使用esd library的各个esd应用

esd应用通过esd library把自己的音频流发送至esd daemon,esd daemon接受各个esd应用的音频流进行混音,使用声卡设备放音。

显然dmix是更好的解决方案,不过当前有些程序还是使用esd的,比如gnome,在使用dmix作为混音器的情况下,如何使这些程序也能够正常输出呢?只要使esd daemon使用dmix设备输出即可:

  • 首先确认使用的是alsa的esd library(debian的package为libesd-alsa0),而不是oss的esd library
  • 启动esd daemon的时候指定使用alsa dmix设备。修改/etc/esound/esd.conf为:
    [esd] auto_spawn=1 spawn_options=-terminate -nobeeps -as 2 -d default spawn_wait_ms=100
    auto_spawn必须设为1,表示当esd应用放音的时候如果esd daemon没有运行则自动启动它,只有auto spawn的esd daemon才会使用spawn_options来作为启动参数,spawn_options中用-d指定default作为设备名,default应该是被重定义过一个dmix设备。