# オーディオデバイスの管理

> Allow players to select audio input and output devices.

Vivox SDK では、システムのデフォルトのオーディオ入出力デバイスが自動的に使用されます。この動作をオーバーライドして、グループ音声チャットに使用するオーディオデバイスを、ゲームで使用されるオーディオデバイスとは別にユーザーが選択できるようにすることができます。

このオーバーライドを実行するには、利用可能なデバイスのリストをユーザーに表示するユーザーインターフェースをそのゲームにビルドし、ユーザーがそこからデバイスを選択できるようにします。このユーザーインターフェースを InputDevices と OutputDevices 用にビルドし、`VivoxService.Instance.AvailableInputDevices` と `VivoxService.Instance.AvailableOutputDevices` を利用して `VivoxInputDevices` または `VivoxOutputDevices` のどちらかの ReadOnlyCollection を返し、UI にこれらのデバイスの名前を設定します。

このユーザーインターフェースを `VivoxService.Instance.AvailableInputDevicesChanged` および `VivoxService.Instance.AvailableOutputDevicesChanged` アクションにサブスクライブし、`VivoxService.Instance.AvailableInputDevices` および `VivoxService.Instance.AvailableOutputDevices` からの新しいリストでこの UI を更新して、AudioDevices のリストから追加または削除をキャッチする必要があります。

ユーザーがリストからデバイスを選択したら、V`ivoxService.Instance.SetActiveInputDeviceAsync(VivoxInputDevice device)` を使用して入力デバイスを設定するか、`VivoxService.Instance.SetActiveOutputDeviceAsync(VivoxOutputDevice device)` を使用して出力デバイスを設定します。

以下の例は、リストから選択された後のオーディオデバイスをどのように設定する必要があるかを示しています。これには、オーディオデバイスがまだデバイスのリスト上にあることを確認して、ユーザーインターフェースのロード中にオーディオデバイスに変更がなかったことを確認するためのチェックも含まれています。

```cs
async void SetVivoxInputDeviceAsync(VivoxInputDevice device)
{
    if(VivoxService.Instance.AvailableInputDevices.Contains(device))
    {
        await VivoxService.Instance.SetActiveInputDeviceAsync(device);
    }
}

await void SetVivoxOutputDeviceAsync(VivoxInputDevice device)
{
    if(VivoxService.Instance.AvailableOutputDevices.Contains(device))
    {
        await VivoxService.Instance.SetActiveOutputDeviceAsync(device);
    }
}
```

ChatChannelSample には、`AudioDeviceSettings.cs` 内の AudioDevice リストを制御する UI オブジェクトの例があります。

## 有効なデバイスを識別する##identify-effective-device

参加者は、音声チャットを使用するときにアクティブなデバイスとして `Default System Device` や `Default Communication Device` のような仮想デバイスを使用できます。場合によっては、例えばデバイス固有のバグをトラブルシューティングしようとするときなど、仮想デバイスが表す物理デバイスの情報が必要になります。

物理デバイスは Vivox SDK 内で有効なデバイスとして認識されます。

Vivox SDK に含まれるプロパティとイベントが、有効な入力および出力デバイスをチェックし、それらの変更をサブスクライブします。

```cs
VivoxService.Instance.EffectiveInputDeviceChanged;
VivoxService.Instance.EffectiveOutputDeviceChanged;

VivoxService.Instance.EffectiveInputDevice;
VivoxService.Instance.EffectiveOutputDevice;
```

例えば、プレイヤーが `Default System Device` をゲーム内入力デバイスとして選択すると、システム設定内で `Default System Device` として設定されている基礎となるマイクが、実際に使用されるデバイスになります。この状況で、`VivoxService.Instance.EffectiveInputDevice` は、使用されている実際の入力デバイスを表すオブジェクトを返します。図は、Chat Channel Sample でのしくみを示しています。


**Effective Device が表示されている Chat Channel Sample のオーディオデバイス選択メニューのスクリーンショット。:**
![Effective Device が表示されている Chat Channel Sample のオーディオデバイス選択メニューのスクリーンショット。](/api/media?file=/vivox-unity/media/images/unity-effective-device-example.png)

使用可能なデバイスリストまたはアクティブなデバイスが変わらない場合でも、有効なデバイスは変わる可能性があります。例えば、ユーザーが `Default System Device` を Windows マシンの System Settings (システム設定) で調整する場合です。このケースでは、使用可能なデバイスリストもアクティブなデバイスも変わりませんが、有効なデバイスは変わります。`Default System Device` によって使用される実際のデバイスが変わるためです。
