2016-10-21 5 views
1

私は簡単なスタジオ録音アプリケーションを作ろうとしています。 私は複数のサウンド入力デバイスを持っており、それらを同時にすべて録音したいと思います。物理オーディオ入力チャンネルのリストを見つけるには?

すべての物理オーディオ入力を検出するにはどうすればよいですか?

私はsounddevice.query_devices()を使用する場合、私は仮想デバイスとデータを含まない仮想入力チャンネル、多くのの多くを得る:

>>> sd.query_devices() 

    0 HDA Intel PCH: HDMI 0 (hw:0,3), ALSA (0 in, 8 out) 
    1 HDA Intel PCH: HDMI 1 (hw:0,7), ALSA (0 in, 8 out) 
    2 HDA Intel PCH: HDMI 2 (hw:0,8), ALSA (0 in, 8 out) 
    3 hdmi, ALSA (0 in, 8 out) 
    4 pulse, ALSA (32 in, 32 out) 
* 5 default, ALSA (32 in, 32 out) 
    6 /dev/dsp, OSS (16 in, 16 out) 

私は実際のデバイスに興味を持って、そして本当の思い入力チャンネル。にPulseAudioは、またはPortAudioを照会するためのいずれかの方法があります

$ pacmd 
>>> list-sources 
... 
    channel map: front-left,front-right 
       Stereo 

私はpacmdとマイクデバイスを照会して、list-sources私は、デバイスはモノラルであっても、ステレオを与える2つのチャネルが取得する場合入力チャンネルを物理的に取得しますか?そしてそれらのパラメータ(サンプルレートなどを選ぶことができるように)

+0

PortAudioでは可能ではないと思います。デバイス名で '(hw:X、Y)'をスキャンしようとすることもできますが、表示したいデバイスと正確に一致するかどうかはわかりません。 – Matthias

+0

ありがとう!それを簡単にする他のAPIがあるのだろうか? –

+0

私はそれがPulseAudioで可能であることが分かった。 –

答えて

1

PulseAudioでもっと複雑なことをするのが最善のようです。ここで私はexample programへのリンクを見つけました。まずpa_mainloop_new、およびpa_mainloop_get_apiでイベントループを初期化

  1. : 残念ながら、それは1つがに必要とする複雑なAPIです。
  2. pa_context_new,pa_context_connect、およびpa_context_set_state_callbackという新しいコンテキストを作成します。
  3. コンテキストコールバックでは、コンテキストの初期化を認識し、列挙を開始します(pa_context_get_source_info_listまたはpa_context_get_sink_info_list)。
  4. 列挙自体はコールバックによっても実行されます。

幸いにも、それはすべての主要なプラットフォーム(私はLinuxとMacOS Xを使用しました)でサポートされているようです。インターフェイスの範囲を考えれば、私はおそらく私の将来のすべてのオーディオプロジェクトにPulseAudioを使用し続けます。

関連する問題