ALSA asoundrc官方文档

原文地址 http://www.alsa-project.org/main/index.php/Asoundrc


Why asoundrc?

.asoundrc和asound.conf对于ALSA能供正确工作不是必需的。大部分应用都可以在没有他们的情况下正常运行。这两个文件用来提供特定的额外功能,比如在alsa-lig层进行路由和采样率转换。


The .asoundrc file

这个文件为你提供更多对card/device的高级控制。.asoundrc文件包含各种卡的定义,使得你可以在alsa-lib层访问pcm plugins。允许你做很多神奇的事情:比如把多块卡合为一块,或者访问多通道卡的多个I/Os


Where does asoundrc live?

asoundrc文件一般存放在用户home目录下

~/.asoundrc

从下面这个文件包含进来

/usr/share/alsa/alsa.conf

当然也可以使用对所有用户生效的配置文件

/etc/asound.conf

当启动一个alsa应用时,这两个配置文件都会被加载。

下面是最基本的配置定义。


The default plugin

在当前用户的home目录下创建一个.asoundrc文件

vi ~/.asoundrc

写入如下内容,并保存文件

pcm.!default {
    type hw
    card 0
}

ctl.!default {
    type hw
    card 0
}

关键词default在ALSA lib API中定义为hw:0,0(缺省声卡的缺省设备)。标识 “!default”将覆盖ALSA lib API中定义的default

现在你可以测试如下:

aplay -D default test.wav


The naming of PCM devices

一个典型的asoundrc以'PCM hw type'开始。这使得ALSA应用可以通过一个名字访问虚拟的声卡设备(plugin或者slave)。如果没有它,那么我们必须通过hw:0,0或者default这种形式来访问soundcard(s)/device(s),如下

aplay -D hw:0,0 test.wav

关键字hw后面的两个数字表示声卡号和设备号。

第一项通常从0开始。比如ALSA中pcm 设备(物理I/O channels)的表示方法,从pcm0c(capture)和pcm0p(playback)开始


The Control device

一块卡的控制设备使得我们可以编程修改卡的各种控制。对于大部分卡都包括mixer(但是有些卡没有mixer)。然而,他们仍然有其他的控制可能被像JACK这样的程序访问。比如digital I/O sync 指示器,sample clock source switch 等等。


Aliases

使用”PCM hw type“ 还可以定义设备别名。语法如下:

pcm.NAME {
    type hw
    card INT/STR
    [device] INT
    [subdevice] INT
    mmap_emulation BOOL
}

例如,下面给出第一个声卡的别名

pcm.primary {
    type hw
    card 0
    device 0
}

现在你可以通过别名primary 访问第一个声卡。

aplay -D primary test.wav

Plugins

Q: 什么是plugins

A: 在ALSA中,PCM plugins扩展了PCM设备的功能和features。plugin可以自动的不可思议的执行工作,比如命名设备,采样率转换,通道间的采样复制,写入文件,联合多个声卡/设备做多inputs/outputs。使用多通道声卡/设备以及其他功能等着你去发掘。使用这些plugins,你需要创建一个虚拟的slave设备。

plugins和选项的完整列表,参照alsa-lib documentation。下面是简单介绍。

一个非常简单的slave定义如下

pcm_slave.sltest {
    pcm "hw:1,0"
}

这里定义了一个slave。这里仅仅定义了你的声音设备的一个别名。稍微难以理解的是 'pcm types'参数必须定义在slave-definition-block。让我们先设置一个rate-converter

pcm_slave.sl2 {
    pcm "hw:0,0"
    rate 48000
}

pcm.rate_convert {
    type rate
    slave sl2
}

在play时将自动的转换采样率到44.1kHz。虽然这个功能并不是很实用,因为大部分players会转换到声卡支持的采样转换率,但是有时你可能想把采样率转换为较低的静态采样率。

为了方便,我们可以重写未如下嵌套定义

pcm.rate_convert {
    type rate
    slave {
        pcm "hw:0,0"
        rate 48000
    }
}

使用pcm type plug 可以生成一个更复杂的转换工具,语法如下

type plug                #format adjusted PCM
slave STR                #slave name
# or
slave {
    pcm STR              #dslave definition
    #or
    pcm {}               #slave pcm definition
    [format STR]         #slave format
    [channel INT]
    [rate INT]
}
route policy STR

ttable {
    CCHANNEL {
        SCHANNEL REAL
    }
}

我们可以定义一个complex_convert如下:

pcm_slave.sl3 {
    pcm "hw:0,0"
    format S16_LE
    channels 1
    rate 16000
}

pcm.complex_convert {
    type plug
    slave sl3
}

调用方是如下

aplay -vD complex_convert test.wav

在播放的时候你将转换为采样格式:S16_LE,1 channel和16kHz采样。使用-v选项调用aplay可以显示文件的原始设置。


Software mixing

软件混音可以在同一个设备上同时播放多个声音文件。在linux环境中有很多方法可以执行软件混音。通常需要一个server,比如ARTSD,ESD,JACK..等等,这个列表会很长因此应用经常困惑该使用哪一个

dmix

现在ALSA有了一个叫dmix(direct mixing)的本地plugin。它使得软件混音变得非常简单,不需要再为安装或者卸载新应用而烦恼。

这个plugin有个非常有意思并且可能很有用的功能,它和default plugin名结合到一块。理论上意味着所有的本地应用都共享声音设备。虽然实际上没有多少applications会利用这个功能。

pcm.!default {
    type plug
    slave.pcm "dmixer"
}

pcm.dmixer {
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:0,0"
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 44100
    }
    bindings {
        0 0
        1 1
    }
}

ctl.dmixer {
    type hw
    card 0
}

试着播放如下:

aplay -f cd -D default test.

注意,dmix PCM name已经在全局配置文件/usr/share/alsa/alsa.conf中定义了

这个设备缺省的采样率是48000Hz,可以用如下方式改变:

aplay -D "plug:'dmix:RATE=44100'" test.wav

dsnoop

dmix plugin是把多个输出流混音到一起。如果你想要使用多个input,那么使用dsnoop plugin


JACK plugin


VIrtual multi channel devices



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值