> ## 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.

# 语音聊天故障排除

> 使用聊天指示器、音频设备诊断和静音状态检查排查 PlayFab Party 语音聊天问题，以修复玩家彼此听不到声音的情况。

如果两个玩家试图一起聊天，但其中一个或两个都听不到对方的声音，请尝试这些故障排除步骤。

## 检查聊天指示器

可以使用 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 同时支持这两个概念，它们可以是不同的设备。按照设计，当将 `AudioDeviceSelectionType::SystemDefault` 传递给 `PartyLocalChatControl::SetAudioInput` 或 `PartyLocalChatControl::SetAudioOutput` 时，PlayFab Party 会在库的 Windows 版本中使用默认通信设备。故障排除和测试应始终针对默认通信设备执行。


## Related topics

- [故障排除](/zh-CN/services/xbox-services/develop/troubleshooting/index.md)
- [XBOX Live 服务 API 故障排除](/zh-CN/services/xbox-services/develop/troubleshooting/live-troubleshooting-apis.md)
- [登录和沙盒错误故障排除](/zh-CN/services/xbox-services/develop/troubleshooting/live-troubleshoot-sandboxes.md)
- [XBOX 服务登录故障排除](/zh-CN/services/xbox-services/fundamentals/identity/auth/live-troubleshooting-sign-in.md)
- [MPSD 邀请和活动故障排除指南](/zh-CN/services/xbox-services/multiplayer/mpsd/concepts/live-multiplayer-invite-troubleshooting.md)
