UniVoice
Unity的可扩展语音聊天/VoIP解决方案。
特性
-
👥 群组语音聊天
- 多个用户可以加入聊天室并交换音频。
- 提供按用户静音音频的API
-
📦 即插即用
- 大多数用例无需编写音频和网络代码
- 支持多种网络类型,包括PUN2和WLAN
-
🎛️ 可定制
- UniVoice本质上是一系列接口的集合,你可以自行实现
- 更多信息请参见下方的自定义部分
安装
推荐通过npmjs.org上名为com.adrenak.univoice
的UniVoice UPM包进行安装
-
添加带有UniVoice作用域的NPM注册表。为此,请转到
编辑/项目设置/包管理器
,添加URL为https://registry.npmjs.org
的NPM作用域注册表,并添加com.adrenak.univoice
作为作用域。 -
从NPM注册表安装包。为此,请转到
窗口/包管理器
并刷新包。在我的注册表
视图中选择(位于左上角,默认选择是Unity注册表
),找到UniVoice并点击安装。安装后,该包也会显示在项目中
视图中。
使用方法
创建聊天室代理
要能够托管和加入语音聊天室,你需要一个ChatroomAgent
实例。
var agent = new ChatroomAgent(IChatroomNetwork network, IAudioInput audioInput, IAudioOutputFactory audioOutputFactory);
托管和加入聊天室
agent.Network
是使用UniVoice最常访问的对象。
// 托管聊天室
agent.Network.HostChatroom(optional_data);
// 加入现有聊天室
agent.Network.JoinChatroom(optional_data);
// 离开聊天室
agent.Network.LeaveChatroom(optional_data);
// 关闭聊天室
agent.Network.CloseChatroom(optional_data);
可以通过agent.Network.CurrentMode
访问ChatroomAgent
的当前模式,这将返回一个ChatroomAgentMode
枚举对象,可能的值有:
Unconnected
:代理既不是主机,也不是聊天室的客人Host
:代理当前正在托管聊天室Guest
:代理当前是聊天室的客人
与用户交互
聊天室中的每个人都由主机分配一个ID。每个人都有一个包含其他用户ID的列表。UniVoice中的ID是一个C#short
类型,在聊天室中对每个成员都是唯一的。
获取你的ID:
short myID = agent.Network.OwnID;
获取聊天室中其他用户的列表:
short others = agent.Network.PeerIDs
要将聊天室中的所有人静音,使用agent.MuteOthers = true;
,设置为false
取消静音。这将停止聊天室中每个用户的音频。
要对聊天室中的所有人将自己静音,使用agent.MuteSelf = true;
,设置为false
取消静音。这将停止向聊天室中的用户发送你的音频。
要静音特定用户,首先获取该用户的设置对象:
agent.PeerSettings[id].muteThem = true; // 其中id属于你想要静音的用户
如果你想对特定用户将自己静音,使用:
agent.PeerSettings[id].muteSelf = true; // 其中id属于你不想让他听到你的用户
事件
agent.Network
提供了几个网络相关的事件。请参考API参考了解它们。
⚙️ 自定义
UniVoice是一个即插即用的解决方案,带有几个预先存在的模块。最常见的用例(可能是3D/空间音频群组聊天)不需要你自己编写任何音频或网络代码。
但它也为你提供了扩展和修改的方法。
🎤 音频输入
UniVoice对音频输入源不做限制。这意味着它不关心从哪里获取音频。它只关心获取音频数据,让你可以自由地更改它获取音频的来源。
- 传输实时麦克风输入
- 通过读取磁盘上的mp3文件发送音频
- 发送视频文件的音轨
- 发送游戏内音频
最常见的输入源是实时麦克风输入。如果这是你所需要的,这里有一个基于UniMic的官方输入实现可用。
IAudioInput
接口API参考在这里
🔊 音频输出
UniVoice也对音频输出不做限制。这意味着它不关心你如何处理从其他用户接收到的音频。它只是给你数据然后忘记它,由你决定如何使用它。
- 你可以使用AudioSource在Unity中播放它
- 你可以将它保存到磁盘
- 你可以将它用作语音转文本的输入
- 将它流式传输到服务器
最常见的输出源是在你的应用程序内播放。这里有一个官方输出实现,可以在Unity AudioSource上播放用户音频可用
创建音频输出需要实现两个接口。它们是IAudioOutput
和IAudioOutputFactory
🌐 网络
你猜对了。UniVoice对网络不做限制。这意味着它不关心音频如何在用户之间交换。它只需要一个实现了IChatroomNetwork
接口的网络实现,这允许你将其适配到不同类型的网络基础设施。
- 你可以通过WLAN发送音频
- 或者webrtc
- 或者流行的网络解决方案提供商,如Photon
- 或者你自己的自定义后端解决方案
创建你自己的网络需要你实现IChatroomNetwork
接口
文档和示例
目前没有手册。API参考请访问http://www.vatsalambastha.com/univoice
许可和支持
本项目采用MIT许可。
不保证更新和维护,项目由原开发者在空闲时间维护。欢迎社区贡献。
可以安排商业咨询和开发,但取决于时间安排和可用性。
联系方式
开发者Vatsal Ambastha可以通过以下链接联系: