testh 发表于 2013-04-08 17:18

如何使用alsa实现多通道的设备?

本帖最后由 testh 于 2013-04-08 17:19 编辑

目前已经实现了两个设备,pcmC0D0p和pcmC0D1p,每个设备有两个通道。想把这2个物理设备虚拟成一个有4个通道的虚拟设备。通过查资料,现将配置文件asoundrc修改为如下:pcm.!default{
type hw
card 0
}

ctl.!default{
type hw
card 0
}

#################################
## create a virtul device which has 4 channels for playback.
#################################
pcm.multi_playback{
type multi;
slaves.a.pcm "hw:0,0";
slaves.a.channels 2;
slaves.b.pcm "hw:0,1";
slaves.b.channels 2;
bindings.0.slave a;
bindings.0.channel 0;
bindings.1.slave a;
bindings.1.channel 1;
bindings.2.slave b;
bindings.2.channel 0;
bindings.3.slave b;
bindings.3.channel 1;
}

ctl.multi_playback{
type hw;
card 0;
}

pcm.ttable{
type route;
slave.pcm "multi_playback";
slave.channels 4;
ttable.0.0 1;
ttable.1.1 1;
ttable.2.2 1;
ttable.3.3 1;
}

ctl.ttable {
type hw;
card 0;
}但是,当加入了pcm.multi_playback之后的代码后,连打开default都会出现段错误,打开multi_playback时也会有段错误,两种情况的段错误地点为:
zz,vname=

zz

zz

zz,name=

zz

zz,vname=

Segmentation fault

#

跟踪代码发现是使用dlsym从libasound.so.2.0.0调用__snd_pcm_multi_open_dlsym_pcm_001()接口时出现的问题。
所用的alsa-lib 和driver均是1.0.24版本。
另外,奇怪的是,我将这个配置文件放在PC的ubuntu上,用同样的alsa-lib和测试程序就没有段错误。
有朋友遇到过这种情况吗?
页: [1]
查看完整版本: 如何使用alsa实现多通道的设备?