> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting Voice Chat

> Troubleshoot PlayFab Party voice chat problems using chat indicators, audio device diagnostics, and mute state checks to fix players who can't hear each other.

두 플레이어가 함께 채팅하려고 하지만 한 명 또는 두 명 모두가 서로의 소리를 들을 수 없다면, 다음 문제 해결 단계를 시도해 보세요.

## 채팅 표시기 확인

PlayFab Party의 채팅 표시기를 사용하여 오디오 문제를 해결할 수 있습니다.

`PartyLocalChatControl::GetLocalChatIndicator()`를 사용하여 로컬 채팅 컨트롤의 순간 오디오 상태를 확인하세요. 정상적인 채팅 컨트롤은 라이브러리가 마이크 입력에서 음성을 감지하는지 여부에 따라 `PartyLocalChatControlChatIndicator::Silent` 또는 `PartyLocalChatControlChatIndicator::Talking`을 반환합니다.

* `PartyLocalChatControlChatIndicator::AudioInputMuted`가 반환되면, 채팅 컨트롤의 아웃바운드 오디오 스트림이 이전에 `PartyLocalChatControl::SetAudioInputMuted(true)` 호출을 통해 음소거되었음을 의미하며, `PartyLocalChatControl::SetAudioInputMuted(false)`를 호출하여 음소거를 해제해야 합니다.

* `PartyLocalChatControlChatIndicator::NoAudioInput`이 반환되면, 로컬 채팅 컨트롤의 오디오 입력이 `PartyLocalChatControl::SetAudioInputMuted()` 호출로 설정된 적이 없거나, 오디오 입력이 초기화에 실패한 경우입니다. 오디오 입력 초기화 실패를 진단하는 팁은 다음 [섹션](#verify-that-the-audio-device-is-successfully-initialized)을 계속 진행하세요.

`PartyLocalChatControl::GetChatIndicator()`를 사용하여 로컬 채팅 컨트롤을 기준으로 원격 채팅 컨트롤의 오디오 입력 상태를 확인하세요.

* 오디오를 들을 수 있을 것으로 예상했는데 `PartyChatControlChatIndicator::Silent`가 반환되면, 원격 오디오 장치에 문제가 있거나 원격 장치의 채팅 권한이 이 채팅 컨트롤로 오디오를 보내도록 구성되지 않았을 수 있습니다. 이러한 상황이라면 다음 [섹션](#verify-that-the-chat-controls-have-the-right-chat-permissions)을 계속 진행하세요.

* `PartyChatControlChatIndicator::Talking`이 반환되지만 여전히 오디오를 들을 수 없다면, 로컬 오디오 출력 장치에 문제가 있을 수 있습니다. 오디오 장치가 정상인지 확인하는 방법을 배우려면 다음 [섹션](#verify-that-the-audio-device-is-successfully-initialized)을 계속 진행하세요.

* `PartyChatControlChatIndicator::IncomingVoiceDisabled`가 반환되면, 로컬 채팅 컨트롤이 원격 채팅 컨트롤로부터의 오디오를 허용하도록 채팅 권한이 구성되지 않았다는 의미입니다. [채팅 권한](#verify-that-the-chat-controls-have-the-right-chat-permissions) 섹션을 계속 진행하세요.

* `PartyChatControlChatIndicator::IncomingCommunicationsMuted`가 반환되면, 이는 이전 `PartyLocalChatControl::SetIncomingAudioMuted()` 호출을 통해 수신 오디오가 음소거되었음을 의미합니다. `PartyLocalChatControl::SetIncomingAudioMuted()`를 호출하여 원격 채팅 컨트롤의 음소거를 해제하세요.

## 오디오 장치가 성공적으로 초기화되었는지 확인

`PartyLocalChatControl::SetAudioInput()` 또는 `PartyLocalChatControl::SetAudioOutput()`을 호출한 직후 `PartyLocalChatAudioInputChangedStateChange` 또는 `PartyLocalChatAudioOutputChangedStateChange`가 발생합니다. 이 두 상태 변경 모두 오디오 장치와 관련된 문제를 해결하는 데 도움이 될 수 있는 정보를 포함합니다. 이러한 상태 변경에는 오디오 장치의 상태에 대한 정보를 제공하는 `PartyAudioInputState` 필드와 `PartyAudioOutputState` 필드가 포함됩니다. 오디오 장치의 상태가 `Initialized`가 아니면, PlayFab Party가 원하는 오디오 장치를 사용할 수 없었다는 의미입니다. 상태 변경의 `errorDetail` 필드도 상황에 대한 추가 정보를 얻는 데 사용할 수 있습니다. `PartyManager::GetErrorMessage()`를 호출하여 오류 세부 정보를 사람이 읽을 수 있는 형태로 얻을 수 있습니다.

<Note>
  기본적으로 채팅 컨트롤은 어떠한 오디오 장치와도 연결되어 있지 않습니다. 모든 채팅 컨트롤에서 `PartyLocalChatControl::SetAudioInput()`과 `PartyLocalChatControl::SetAudioOutput()`을 호출하세요.
</Note>

## 채팅 컨트롤에 올바른 채팅 권한이 있는지 확인

`PartyLocalChatControl::GetPermissions()`를 사용하여 두 채팅 컨트롤 간의 `PartyChatPermissionOptions`를 조회하세요. 예를 들어, 사용자 Alice가 다른 사용자 Bob의 소리를 들을 수 없다면, Alice가 Bob으로부터 오디오를 받을 권한이 있는지, 그리고 Bob이 Alice에게 오디오를 보낼 권한이 있는지 확인해야 합니다.

Alice의 장치에서:

```cpp theme={null}
PartyChatPermissionOptions chatPermissions;
PartyError error = localChatControlAlice->GetPermissions(remoteChatControlBob, &chatPermissions);
if (PARTY_SUCCEEDED(error))
{
    if (static_cast<bool>(chatPermissions & PartyChatPermissionOptions::ReceiveAudio))
    {
        printf("Alice can receive audio from Bob!");
    }
}
```

Bob의 장치에서:

```cpp theme={null}
PartyChatPermissionOptions chatPermissions;
PartyError error = localChatControlBob->GetPermissions(remoteChatControlAlice, &chatPermissions);
if (PARTY_SUCCEEDED(error))
{
    if (static_cast<bool>(chatPermissions & PartyChatPermissionOptions::SendAudio))
    {
        printf("Bob can send audio to Alice!");
    }
}
```

## Windows에서 기본 장치와 기본 통신 장치 확인

Windows에서 오디오와 관련해 자주 혼동되는 지점은 기본 장치와 기본 통신 장치의 개념입니다. Windows는 두 개념을 모두 지원하며 서로 다른 장치가 될 수 있습니다. PlayFab Party는 설계상 `AudioDeviceSelectionType::SystemDefault`가 `PartyLocalChatControl::SetAudioInput` 또는 `PartyLocalChatControl::SetAudioOutput`에 전달될 때 Windows 버전의 라이브러리에서 기본 통신 장치를 사용합니다. 문제 해결과 테스트는 항상 기본 통신 장치를 기준으로 수행해야 합니다.
