Files
VRCT/src-python/docs/modules/device_manager.md
misyaguziya 5efa9c37d6 Add documentation for modules and runtime instructions
- Created detailed documentation for the device_manager, model, model_extra, osc, overlay, overlay_image, transcription, translation, transliteration, utils, watchdog, and websocket modules.
- Added a comprehensive run events payloads document outlining the payloads sent during various run events in the controller.
- Included runtime instructions and dependencies for setting up the project in a Windows environment.
- Introduced a mypy configuration file to manage type checking and ignore errors in specific modules temporarily.
2025-10-09 13:11:59 +09:00

4.1 KiB
Raw Blame History

device_manager.py — デバイス検出と監視overwrite

目的: システムのマイク/スピーカー(主に Windows の WASAPIを列挙し、変更を監視してコールバックで通知する DeviceManager シングルトンを提供します。

主要コンポーネント:

  • class Client(MMNotificationClient)

    • オーディオデバイスのシステムイベント(追加/削除/デフォルト変更)を受け取り、監視ループの再起動をトリガーします。
  • class DeviceManager

    • シングルトンインスタンス: device_manager

    • 主要プロパティ:

      • mic_devices (dict): {host_name: [device_info, ...]}
      • default_mic_device (dict): {'host': {...}, 'device': {...}}
      • speaker_devices (list): [device_info, ...]
      • default_speaker_device (dict)
      • 各種 prev_/update_flag_: 差分検出用
      • callback 関連プロパティ: callback_default_mic_device, callback_mic_device_list, など多数
    • 主要メソッド (抜粋):

      • update() -> None: PyAudio を利用してホスト毎の入力デバイスとループバック(スピーカー)を列挙し内部状態を更新します。
      • checkUpdate() -> bool: 前回値との差分を計算して変更フラグを返します。
      • monitoring() -> None: pycaw/MMNotificationClient を使った長時間監視ループ。変化を検出すると各コールバックを呼び出す。
      • startMonitoring() / stopMonitoring()
      • getMicDevices() / getDefaultMicDevice() / getSpeakerDevices() / getDefaultSpeakerDevice()
      • forceUpdateAndSetMicDevices() / forceUpdateAndSetSpeakerDevices()

コールバックAPI:

  • setCallbackMicDeviceList(callback) — マイクデバイスリスト変更時に呼ばれる
  • setCallbackDefaultMicDevice(callback) — デフォルトマイク変更時に呼ばれる
  • setCallbackProcessBeforeUpdateMicDevices(callback) / setCallbackProcessAfterUpdateMicDevices(callback) — 更新前後のフック

例:

from device_manager import device_manager

def on_default_mic(host_name, device_name):
    print('Default mic changed:', host_name, device_name)

device_manager.setCallbackDefaultMicDevice(on_default_mic)
device_manager.forceUpdateAndSetMicDevices()

注意点:

  • Windows 固有のモジュールPyAudio paWASAPI, pycawに依存します。クロスプラットフォーム対応が必要な場合は別実装が必要です。
  • 監視スレッドは永続的に動作するため、アプリケーション終了時は stopMonitoring() を呼んで安全に停止してください。

詳細設計

目的: ローカルの入力マイクと出力ループバックから抽出されたスピーカーデバイスを列挙し、変更を監視してコールバックで通知する。Windows の WASAPI 等に依存。

主要クラス/関数:

  • class Client(MMNotificationClient)

    • Audio デバイスの変更イベントを受けると loop = False にして監視ループを再起動させる設計。
  • class DeviceManager

    • シングルトン: device_manager = DeviceManager()
    • 主要属性:
      • mic_devices: {host: [device_info...]}
      • default_mic_device: {host, device}
      • speaker_devices: [device_info...]
      • default_speaker_device: {device}
      • 各種 prev_, update_flag_: 差分検出のために保持
      • コールバック属性: callback_default_mic_device, callback_host_list など
    • 主要メソッド:
      • update(): PyAudio を使ってホストごとにデバイス列挙。Loopback デバイスを speaker_devices に集める。
      • monitoring(): MMNotificationClient と組み合わせてデバイスの変化を検出し、コールバックを発行
      • set/clear Callback 系: UI や Controller が登録して自動選択や再起動をトリガーできる
      • forceUpdateAndSetMicDevices / forceUpdateAndSetSpeakerDevices: 即時更新とコールバック通知

注意点:

  • Windows 固有の処理paWASAPI, pycawに依存する。
  • デバイス取得はリソースに依存するので try/except で例外を吸収し errorLogging() を呼ぶ。