0

アプリケーションから VLC を実行して、DirectShow オーディオ キャプチャ デバイスからキャプチャおよびエンコードしています。VLC は、エンコードされたデータを STDOUT 経由でアプリケーションに送信します。DirectShow オーディオ キャプチャ デバイスを列挙する方法が必要です。残念ながら、VLC はこれに対して GUI 以外の方法を提供していないようです。

デバイス名のリストを取得する簡単な方法を探しているときに、オーディオ キャプチャ デバイスにちなんで子キーの名前が付けられている次のレジストリ キーを見つけました。

  • HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum 64-bit\{33D9A762-90C8-11D0-BD43-00A0C911CE86}
  • HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum\{33D9A762-90C8-11D0-BD43-00A0C911CE86}

このレジストリの場所は、他のマシンと最近のバージョンの DirectX で同じ場所にあることが保証されていますか? 大量の DirectX コードを実装する以外に、DirectShow オーディオ デバイス名のリストを取得する方法はありますか? (おそらく、診断ツールの何らかの出力によるものです。)

4

1 に答える 1

1

DirectShow (DirectX の一部ではなく、Windows コア API) デバイスのリストは、要求に応じて特定のカテゴリ (この場合はオーディオ入力デバイスCLSID_AudioInputDeviceCategory) をリストする列挙子によって提供されます。これがGUID問題であり、レジストリにはそこにあるすべてのデバイスのエントリが含まれているとは限りません。代わりに、列挙子は API を介してプログラムでデバイスのリストを提供し、さまざまな種類の使用可能なデバイスを組み合わせます。

明確に定義された/文書化された方法で列挙順序に影響を与える方法はありません。

デバイスを列挙する最も簡単な方法は、Windows SDK GraphEdt.exe ツール、またはその優れた代替オプション GraphStudio/ GraphStudioNextです。Ctrl+F次に、カテゴリを選択します。

ここに画像の説明を入力

また、 EnumerateAudioCaptureFilterCapabilitiesコマンド ライン ツール (ソース コード) を使用して、デバイスとその機能を列挙することもできます。この場合、「フレンドリ名」行にデバイスが列挙順に一覧表示されます。

Moniker Display Name: @device:cm:{33D9A762-90C8-11D0-BD43-00A0C911CE86}\Stereo Mix (Realtek High Defini
Friendly Name: Stereo Mix (Realtek High Defini
  Pin: Capture
    Capability Count: 23
    Capability 0:
    AM_MEDIA_TYPE:
      .bFixedSizeSamples: 1
      .bTemporalCompression: 0
      .lSampleSize: 4
      .cbFormat: 18
    WAVEFORMATEX:
      .wFormatTag: 1
      .nChannels: 2
      .nSamplesPerSec: 44100
      .nAvgBytesPerSec: 176400
      .nBlockAlign: 4
      .wBitsPerSample: 16
      .cbSize: 0

関心のあるデバイスをリストの一番上に配置するなど、順序に影響を与えるには、API フックしか考えられません。これは可能ですが、標準システムの動作が変更されるため、広く使用することはお勧めしません。

于 2013-08-18T06:42:26.853 に答える