2013-02-07 103 views
0

我一直在通過adb外殼在Android設備上運行的本機linux程序中捕獲音頻。因爲我似乎只得到(非常安靜)的噪音,即沒有實際的信號(有趣的是,一個類似的Android/Java程序沒有顯示有輸入信號),我執行了alsa_amixer,它有一個條目看起來像是正確的:ALSA - 取消靜音設備?

Simple mixer control 'Capture',0 
    Capabilities: cvolume cswitch penum 
    Capture channels: Front Left - Front Right 
    Limits: Capture 0 - 63 
    Front Left: Capture 31 [49%] [0.00dB] [off] 
    Front Right: Capture 31 [49%] [0.00dB] [off] 

「off」。這將解釋噪音。 因此,我查找了如何使用alsa_amixer取消靜音通道的示例,我發現了諸如「49%上」或「49%取消靜音」等參數的不同建議,或者只是「取消靜音」,其中任何一個都不起作用。 (如果音量%被省略,則表示「無效的命令!」,否則,音量被設置,但開啓/取消靜音被忽略)

我還搜索瞭如何以編程方式做到這一點需要做,雖然手動方法現在會有所幫助),但在那裏並不算太幸運。 我發現這聽起來像這樣的唯一的ALSA lib命令是「snd_mixer_selem_set_capture_switch_all」,但文檔沒有一天參數(1/0不打開/關閉,我試過;))

+0

這都適用於普通的Linux。也許Android有一個殘缺的alsa構建。 –

+0

... set_capture_switch_all? 我把它叫做「Capture」,其值爲1. 程序崩潰了,我把它作爲控制檯輸出: ALSA lib external/alsa-lib/src/conf.c:4487:(parse_args)未知參數1,ALSA lib external/alsa-lib/src/conf.c:4620:(snd_config_expand)解析參數錯誤:無此文件或目錄, ALSA lib external/alsa-lib/src/control/control.c:902(snd_ctl_open_noupdate ) CTL hw無效:0,0 – user1847129

+0

[This here program](http://pastebin.com/index/9HZFC9dJ)適用於我。 –

回答

0

通過alsa_amixer設置這些東西的手動方法確實有效 - 但只有當android是使用'BoardConfigCommon.mk'修改的,在條目:BOARD_USES_ALSA_AUDIO:= false而不是true時才生成。

是的,這可能會禁用Android的ALSA,這就是爲什麼它不再幹擾調音臺設置。

給你的android程序員在那裏,請注意,這是一個非常利基的用例,當然,這是我的原始文章的預期開始。 這不是大多數人想要做的。 我只是碰巧用不尋常的方式在這裏的Android設備;-)

0

只是發佈的代碼作爲問題提供者建議,也不喜歡外部鏈接。

#include <alsa/asoundlib.h> 


int main() 
{ 
    snd_mixer_t *handle; 
    snd_mixer_selem_id_t *sid; 

    snd_mixer_open(&handle, 0); 
    snd_mixer_attach(handle, "default"); 
    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, "Capture"); 
    snd_mixer_elem_t* elem = snd_mixer_find_selem(handle, sid); 

    snd_mixer_selem_set_capture_switch_all(elem, 0); 
    snd_mixer_selem_set_capture_dB_all(elem, 0, 0); 

    snd_mixer_close(handle); 
}