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 使用,但有可能降低音质。

示例

中有一个高质量的 Steam 语音 API 实施示例。可在 voicechat.cpp/h 文件中找到相关内容。

需要帮助?

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