我刚进入ALSA和linux,
如何使用记录路径上的ALSA插件将X通道混合到单个通道中?
和
如何使用alsamixer为每个频道控制音量?
我正在研究http://www.alsa-project.org/alsa-doc/alsa-lib API,但没有找到合适的东西,因此在这里提出。请指导我正确的方向,示例代码或教程。我也看了SO,但我得到了播放路径的信息。
答案 0 :(得分:1)
你需要dmix插件。 它安静易用。 在/etc/asound.conf中
pcm.<device_name> {
type dmix # plugin type
ipc_key 321456 # any unique value through /etc/asound.conf
slave {
pcm "hw:0,0" # Sound card name
format S32_LE # That is you format
rate 44100 # Sampling rate
channels 2 # You channels count
}
}
重新启动后,您应该能够从不同位置打开设备,alsa将混合其输出。 这里有一些关于它的文档:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
答案 1 :(得分:0)
首先,从允许多个录制客户端的设备开始:
pcm.snooped {
type dsnoop
slave.pcm "hw:0" # or whatever
}
然后提取单个频道:
pcm.channel1 {
type route
slave {
pcm snooped
channels 2
}
ttable [ [ 1 0 ] ]
}
pcm.channel2 {
type route
slave {
pcm snooped
channels 2
}
ttable [ [ 0 1 ] ]
}
然后在每个上加softvol
:
pcm.channel1_softvol {
type softvol
slave.pcm channel1
control.name "Channel 1 Capture Volume"
}
pcm.channel2_softvol {
type softvol
slave.pcm channel2
control.name "Channel 2 Capture Volume"
}
然后将它们合并到一个设备中:
pcm.mixed_with_volumes {
type multi
slaves {
a { pcm channel1_softvol channels 1 }
b { pcm channel2_softvol channels 1 }
}
bindings [
{ slave a channel 0 }
{ slave b channel 0 }
]
}
...并使用plug
插件将频道混合在一起:
pcm.my_device {
type plug
slave.pcm mixed_with_volumes
ttable [ [ 0.5 0.5 ] ]
}