Steamworks 文献库
Steam 语音
Steam 语音 API 是一组让您从用户麦克风录制音频的函数, 可用于实现语音聊天或语音命令系统。

语音聊天集成

游戏内语音聊天可通过以下步骤实现:

  • 录音
    首先调用 ISteamUser::StartVoiceRecording 开始用用户麦克风录音。可在用户按下按键通话键开始时调用。如果麦克风始终会进行录音,则在游戏会话开始时调用。 根据游戏情况两者各有优劣,但能够给玩家选择始终开启或按键通话是最理想的。 但绝大多数情况下默认始终开启并非一个好做法。如果游戏支持四位以上玩家,那么我们绝不建议始终开启。 玩家松开按键通话键或游戏会话结束时,可调用 ISteamUser::StopVoiceRecording 停止录音。

    如用户正在使用按键通话键进行语音聊天,可在开始和结束录音时调用 ISteamFriends::SetInGameVoiceSpeaking 对用户通过 Steam 好友 UI 进行的任何语音聊天实施静音。 理想状况下可给玩家选择启用/禁用此功能。

    开始录音后可每帧调用 ISteamUser::GetAvailableVoice 来检查是否有可用的压缩语音数据。 如有,需调用 ISteamUser::GetVoice 从麦克风获得最新的音频数据。
  • 发送
    获得语音数据后,您应该会想将其发送给其他玩家。 Steam 语音 API 无法提供直接发送方法,但可通过您选择的网络库实现。 Steam 对等网络 API 即是一个上佳选择。
  • 接收
    目标用户收到语音数据后可调用 ISteamUser::DecompressVoice 将压缩数据转回音频。
    另一个选择是您也许希望在调用 ISteamUser::DecompressVoice 前使用 ISteamUser::GetVoiceOptimalSampleRate 来获得 Steam 语音解压缩器的采样率。这样可以减少 CPU 使用,但有可能降低音质。

示例

Steamworks API 示例应用程序(SpaceWar)中有一个高品质的 Steam 语音 API 实现示例。 可在 voicechat.cpp/h 文件中找到相关内容。

需要帮助?

请访问 Steamworks 开发者讨论区搜寻他人提过的问题,或提出自己的问题。