2013-02-11 346 views
2

我試圖在Linux應用程序中使用alsa api將我的應用程序中的麥克風靜音。 我使用下面的代碼用於與體積= 0改變音量:ALSA - 使用alsa api(linux)更改c代碼中的麥克風增益

long min, max; 
snd_mixer_t *handle; 
snd_mixer_selem_id_t *sid; 
const char *card = "default"; 
const char *selem_name = "Capture"; 
snd_mixer_open(&handle, 0); 
snd_mixer_attach(handle, card); 
snd_mixer_selem_register(handle, NULL, NULL); 
snd_mixer_load(handle); 
snd_mixer_selem_id_alloca(&sid); 
snd_mixer_selem_id_set_index(sid, 0); 
snd_mixer_selem_id_set_name(sid, selem_name); 
snd_mixer_elem_t* elem = snd_mixer_find_selem(handle, sid); 
snd_mixer_selem_get_capture_volume_range(elem, &min, &max); 
snd_mixer_selem_set_capture_volume_all(elem, volume * max/100); 
snd_mixer_close(handle); 

這工作和alsamixer中捕捉容積被減小到零。 但我也想使用api將麥克風增益更改爲0dB,我似乎不知道如何實現此目標。

謝謝

編輯:謝謝CL。有效。但我的代碼不能再粘貼7個小時了。

回答

0

此代碼:

const char *selem_name = "Capture"; 
snd_mixer_selem_id_set_index(sid, 0); 
snd_mixer_selem_id_set_name(sid, selem_name); 

選擇命名爲 「Capture」 的第一控制。

將名稱更改爲您機器上麥克風增益的控件。

如果該控件的類型不是數字而是枚舉,則必須使用snd_mixer_selem_set_enum_item()來更改其值。