# C# スクリプトで Audio Tap を使用する

> How to add Audio Taps through C# scripts.

このセクションでは、エディターの UI ではなく、スクリプトを使用して Audio Tap を追加する方法についての情報を示します。

## Capture Source Tap と Channel Audio Tap##capture-source-and-channel-audio-taps

C# スクリプトを使用して、Capture Source Tap と Channel Audio Tap をシーンに追加できます。以下は、スクリプトを使用して Vivox Channel Audio Tap のオーディオにエコー効果を追加する方法の例です。

```text
private GameObject _channelAudioGameObject;

public void AddChannelAudioEffect()
{
    // Create the GameObject
    _channelAudioGameObject = new GameObject("ChannelAudioGameObject");
    // Add the Tap to it
    _channelAudioGameObject.AddComponent<VivoxChannelAudioTap>();
    // Also add an echo filter, for example
    _channelAudioGameObject.AddComponent<AudioEchoFilter>();
}
```

空のゲームオブジェクトを作成し、[`VivoxChannelAudioTap`](https://docs.unity3d.com/Packages/com.unity.services.vivox@latest/index.html?subfolder=/api/Unity.Services.Vivox.AudioTaps.VivoxChannelAudioTap.html) と Unity から提供される `AudioEchoFilter` を追加して、すべてのオーディオにエコーを適用します。何も変更を加えなくても、この例で使用されている Audio Tap を [`VivoxCaptureSourceTap`](https://docs.unity3d.com/Packages/com.unity.services.vivox@latest/index.html?subfolder=/api/Unity.Services.Vivox.AudioTaps.VivoxCaptureSourceTap.html) に切り替えることでさまざまなユースケースに対応できます。

> **Note:**
>
> この例では、[Audio Tap のパラメーター](./tap-component-parameters.md) は一切変更されていません。

## Participant Tap のスクリプト##participant-tap-scripts

Participant Tap は、VivoxParticipant クラスの [`CreateVivoxParticipantTap`](https://docs.unity3d.com/Packages/com.unity.services.vivox@latest/index.html?subfolder=/api/Unity.Services.Vivox.VivoxParticipant.html#methods) メソッドを使用してスクリプトで簡単に作成できます。`VivoxService.Instance.ParticipantAddedToChannel` メッセージにサブスクライブすると、参加者がチャンネルに参加するたびにコールバックが届くようになります。次に、提供された VivoxParticipant オブジェクトで `CreateVivoxParticipantTap` を呼び出すと、特定の参加者のオーディオを取得する準備ができた Vivox Participant Tap を含む、新しい参加者用のゲームオブジェクトが作成されます。

以下の例は、`ParticipantAddedToChannel` にサブスクライブし、それぞれの新しいチャンネル参加者に対してエコー効果を追加する方法を示しています。

```cs
using Unity.Services.Vivox;
using UnityEngine;

public class ParticipantHandler : MonoBehaviour
{
    void Start()
    {
        VivoxService.Instance.ParticipantAddedToChannel += AddParticipantEffect;
    }

    void AddParticipantEffect(VivoxParticipant participant)
    {
        var gameObject = participant.CreateVivoxParticipantTap("MyNewGameObject");
        gameObject.AddComponent<AudioEchoFilter>();
    }
}
```

上のスクリプト例では、作成されたオブジェクトが削除されていないことに注意してください。必要に応じて、特定のチャンネルメンバーに対してのみタップを作成するロジックを追加できます。

[`CreateVivoxParticipantTap`](https://docs.unity3d.com/Packages/com.unity.services.vivox@latest/index.html?subfolder=/api/Unity.Services.Vivox.VivoxParticipant.html#methods) メソッドを使用して作成された Vivox Participant Tap ゲームオブジェクトの生存期間は、VivoxParticipant の生存期間に関連付けられます。つまり、参加者がチャンネルから退出するか、ローカルプレイヤーがサインアウトすると、ゲームオブジェクトは自動的に破棄されます。また、`VivoxParticipant.DestroyVivoxParticipantTap` を呼び出して、任意の Vivox 参加者の Participant Tap を明示的に破棄することもできます。

> **Note:**
>
> [Silence In Final Mix パラメーター](./tap-component-parameters.md) を使用して、参加者のタップのオーディオをミュートすることができます。

## Audio Tap のステータスの監視##monitoring-audio-tap-status

Audio Tap には、作成した Audio Tap のステータスを監視するための公開パラメーター TapId があります。Tap の作成後、TapId の値は、エラーがなかったことを意味する 0 以上の値になる必要があります。以下は、Tap を作成し、TapId の値が期待どおりの値であることを確認する例です。

```cs
private GameObject _channelAudioGameObject;

public void AddChannelAudioEffect()
{
    // Create the GameObject
    _channelAudioGameObject = new GameObject("ChannelAudioGameObject");
    // Add the Tap to it
    var tap = _channelAudioGameObject.AddComponent<VivoxChannelAudioTap>();
    if (tap.TapId < 0)
    {
        Destroy(_channelAudioGameObject); // Destroy the GameObject, since the status is not valid
        Debug.LogError($"Failed to create VivoxChannelAudioTap");
        return;
    } else {
        Debug.Log("There was no error creating VivoxChannelAudioTap");
    }
}
```

TapId が 0 より小さい値の場合、その値がエラーのトラブルシューティングに役立ちます。表示される可能性がある値と、そのエラー理由を以下に示します。

* **-1** :タップは現在、未登録です。これは、タップがインスタンス化されているが、まだ Vivox に登録されていない場合に発生する可能性があります。例えば、チャンネルが自動的に取得されるのを待機しているためです。
* **-1010** :タップは登録されていません。
* **-1011** :無効な参加者名でタップを登録しようとしました。
* **-1012** :無効なチャンネル名でタップを登録しようとしました。
* **-1050** :Vivox Participant Tap にのみ適用されます。指定された参加者名からは Participant URI が見つかりませんでした。
* **-1051** :タップを Vivox に登録しようとしましたが、VivoxService が初期化されませんでした。Audio Tap を初期化する前に、必ず VivoxService を初期化してください。
* **-1052** :無効なチャンネル名でタップを Vivox に登録しようとしました。チャンネル名を正しく設定してください。
