2014-09-26 28 views
3

我剛進入ALSA和Linux,如何做X通道混合成單一通道

如何做X渠道混入使用記錄路徑上ALSA插件單通道?

如何使用命令alsamixer針對每個信道來控制音量?

我正在調查http://www.alsa-project.org/alsa-doc/alsa-lib API,但沒有找到任何合適的,因此在這裏問。請指導我正確的方向,示例代碼或教程。我也看過,但我在播放路徑上獲得信息。

+1

你自動獲得格式轉換。 'softvol'插件只支持兩個通道。 – 2014-09-26 10:32:04

+0

您需要兩個獨立的'softvol'插件。 – 2014-10-07 06:48:26

+0

'softvol'混音器控制可以像任何其他混音器控制一樣進行訪問。 – 2014-10-07 07:00:39

回答

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

+0

'dmix'與錄音​​無關。 – 2014-09-26 11:50:16

+0

JRC,是的,它適用於任何數量的渠道,我從來沒有使用音量,但你可以試試這個http://stackoverflow.com/questions/6787318/set-alsa-master-volume-from-c -code – 2014-09-26 12:58:14

+0

@JRC這是一個單獨的問題,不應該在另一個問題的評論中被問到。 – 2014-11-11 09:03:43

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 ] ] 
}