# C# 스크립트에서 오디오 탭 사용

> How to add Audio Taps through C# scripts.

이 섹션에서는 에디터 UI가 아닌 스크립트를 통해 오디오 탭을 추가하는 방법을 설명합니다.

## 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`를 추가합니다. 다양한 사용 사례에 대한 변경 없이 [`VivoxCaptureSourceTap`](https://docs.unity3d.com/Packages/com.unity.services.vivox@latest/index.html?subfolder=/api/Unity.Services.Vivox.AudioTaps.VivoxCaptureSourceTap.html)의 예에 사용된 오디오 탭을 전환할 수 있습니다.

> **Note:**
>
> 이 예에서는 [오디오 탭 파라미터](./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)를 사용하여 참가자 탭의 오디오를 음소거할 수 있습니다.

## 오디오 탭 상태 모니터링##monitoring-audio-tap-status

오디오 탭에는 생성된 오디오 탭의 상태를 모니터링하기 위해 노출된 파라미터 TapId가 있습니다. 탭을 생성한 후 TapId의 값은 0보다 크거나 같아야 합니다. 이는 오류가 없음을 의미합니다. 다음은 탭을 생성하고 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에만 적용됩니다. 제공된 참가자 이름에서 참가자 URI를 찾을 수 없습니다.
* **-1051** : 탭에서 Vivox에 등록을 시도했지만 VivoxService가 초기화되지 않았습니다. 오디오 탭을 초기화하기 전에 VivoxService를 초기화해야 합니다.
* **-1052** : 탭에서 잘못된 채널 이름으로 Vivox에 등록을 시도했습니다. 채널 이름을 올바르게 설정해야 합니다.
