我刚进入ALSA和linux,
如何在记录路径上使用ALSA插件将X个频道混合到一个频道中?
和
如何使用alsamixer为每个通道控制音量?
我正在调查http://www.alsa-project.org/alsa-doc/alsa-libAPI,但没有找到合适的东西,所以在这里询问。请指导我正确的方向,示例代码或教程。我也看过SO,但我得到了关于游戏路径的信息。
您需要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
首先,从一个允许多个录制客户端的设备开始:
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 ] ]
}