2011-07-28 162 views
4

我使用ALSA播放PCM樣本。我打開這個功能的PCM流:查找我可以用ALSA播放PCM的所有設備

int snd_pcm_open(snd_pcm_t** pcmp, 
     const char* name, 
     snd_pcm_stream_t stream, 
     int mode); 

我目前使用「默認」作爲名稱參數。我希望能夠選擇其他設備。我無法理解的是我如何確定其他可用設備的名稱。

我將USB麥克風連接到我的系統,並且aplay和amixer似乎檢測到新設備。我如何確定該設備的名稱?是否有任何ALSA功能來獲取可用設備列表及其各自的名稱?

回答

7

我想你可以使用snd_device_name_hint來枚舉設備。 這裏是一個例子。注意我沒有編譯它!

char **hints; 
/* Enumerate sound devices */ 
int err = snd_device_name_hint(-1, "pcm", (void***)&hints); 
if (err != 0) 
    return;//Error! Just return 

char** n = hints; 
while (*n != NULL) { 

    char *name = snd_device_name_get_hint(*n, "NAME"); 

    if (name != NULL && 0 != strcmp("null", name)) { 
     //Copy name to another buffer and then free it 
     free(name); 
    } 
    n++; 
}//End of while 

//Free hint buffer too 
snd_device_name_free_hint((void**)hints); 
2

這是我第一次需要linux/unix項目,我需要知道所有可用的音頻設備功能和名稱。然後我需要使用這些設備來捕獲和回放音頻。我所做的很簡單。有一個linux/unix命令用於在Linux中通過alsa實用程序查找設備。

是:

aplay -l 

現在我所做的只是讓程序通過ALSA給予了像,因爲這。

爲了大家的幫助,我製作了一個(.so)庫和一個示例應用程序,演示瞭如何在C++中使用此庫。

我的媒體庫的輸出是喜歡 -

[[email protected]~]# ./IdeaAudioEngineTest 
HDA Intel plughw:0,0 
HDA Intel plughw:0,2 
USB Audio Device plughw:1,0 

該庫還可以採集和回放實時的音頻數據。

它可與IdeaAudio library with Duplex Alsa Audio

+0

嗨:)文件的lib看起來不錯,但沒有任何Java包裝呢? – user390525

+0

對不起,目前我們沒有它。 –

+0

好吧然後;你知道如何獲得揚聲器或耳機路徑;我嘗試了很多次,但路徑如hw:0,0甚至hw:0,1總是返回麥克風:(我有雙工插孔,支持耳機或麥克風... – user390525

相關問題