7

ALSA を使用して PCM サンプルを再生します。この関数で PCM ストリームを開きます。

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

現在、名前パラメーターとして「デフォルト」を使用しています。他のデバイスを選択できるようにしたいと思います。私が理解できないのは、他の使用可能なデバイスの名前を特定する方法です。

システムに USB マイクを接続すると、aplay と amixer が新しいデバイスを検出するようです。そのデバイスの名前を特定するにはどうすればよいですか? それぞれの名前で利用可能なデバイスのリストを取得する ALSA 関数はありますか?

4

3 に答える 3

14

デバイスの列挙には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);
于 2011-07-29T08:01:32.990 に答える
4

これは、使用可能なすべてのオーディオ デバイスの機能と名前について知る必要がある、Linux/Unix プロジェクトに対する私の最初の要件でした。次に、これらのデバイスを使用して、オーディオをキャプチャして再生する必要があります。私がやったことは非常に簡単です。Linux の alsa ユーティリティを介してデバイスを検索するために使用される linux/unix コマンドがあります。

それは:

aplay -l

今私がしたことは、alsa でこのように出力するプログラムを作成することです。

みんなの助けを借りて、(.so) ライブラリと、このライブラリを C++ で使用する方法を示すサンプル アプリケーションを作成しました。

私のライブラリの出力は次のようになります-

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

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

Duplex Alsa Audio を備えた IdeaAudio ライブラリのドキュメントで利用できます。

于 2013-08-01T12:23:36.587 に答える