2011-07-28 24 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); 

私は現在、名前パラメータとして "default"を使用しています。私は他のデバイスを選択できるようにしたいと思います。私が理解できないのは、他の利用可能なデバイスの名前が何であるかを判断する方法です。

自分のシステムにUSBマイクを接続しました。そのため、ディスプレイとアンプリファイアが新しいデバイスを検出したようです。そのデバイスの名前はどのようにして確認できますか?利用可能なデバイスのリストをそれぞれの名前で取得する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プロジェクトの最初の要件でした。次に、これらのデバイスを使用して、オーディオをキャプチャし、plabackする必要があります。私がやったことはかなり単純です。 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 

like-あるこのライブラリは、リアルタイムのオーディオデータをキャプチャして再生することができます。

それはIdeaAudio library with Duplex Alsa Audio

+0

こんにちはのドキュメントで使用できます:) libには良さそうに見えますが、それのために任意のJavaラッパーはありますか? – user390525

+0

申し訳ありませんが、現在はありません。 –

+0

[OK]をクリックします。スピーカーやヘッドフォンのパスを取得する方法を知っていますか?私は何度も試してみましたが、hw:0,0やhw:0,1のようなパスは常にマイクを返します:(私はヘッドフォンとマイクの両方をサポートするデュプレックスジャックを持っています... – user390525