我剛進入ALSA和Linux,如何做X通道混合成單一通道
如何做X渠道混入使用記錄路徑上ALSA插件單通道?
和
如何使用命令alsamixer針對每個信道來控制音量?
我正在調查http://www.alsa-project.org/alsa-doc/alsa-lib API,但沒有找到任何合適的,因此在這裏問。請指導我正確的方向,示例代碼或教程。我也看過,但我在播放路徑上獲得信息。
我剛進入ALSA和Linux,如何做X通道混合成單一通道
如何做X渠道混入使用記錄路徑上ALSA插件單通道?
和
如何使用命令alsamixer針對每個信道來控制音量?
我正在調查http://www.alsa-project.org/alsa-doc/alsa-lib API,但沒有找到任何合適的,因此在這裏問。請指導我正確的方向,示例代碼或教程。我也看過,但我在播放路徑上獲得信息。
您需要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
'dmix'與錄音無關。 – 2014-09-26 11:50:16
JRC,是的,它適用於任何數量的渠道,我從來沒有使用音量,但你可以試試這個http://stackoverflow.com/questions/6787318/set-alsa-master-volume-from-c -code – 2014-09-26 12:58:14
@JRC這是一個單獨的問題,不應該在另一個問題的評論中被問到。 – 2014-11-11 09:03:43
首先,先從設備,它允許多個記錄的客戶:
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 ] ]
}
你自動獲得格式轉換。 'softvol'插件只支持兩個通道。 – 2014-09-26 10:32:04
您需要兩個獨立的'softvol'插件。 – 2014-10-07 06:48:26
'softvol'混音器控制可以像任何其他混音器控制一樣進行訪問。 – 2014-10-07 07:00:39