当前位置: 首页 > news >正文

Unity接入GVoice腾讯实时语音

Unity接入GVoice腾讯实时语音

  • 一、介绍
  • 二、注册GVoice创建项目语音服务
    • 1.创建项目
    • 2.申请语音权限
    • 3.项目管理查看SDK初始化的一些参数和基本信息
    • 4.GVoice检测
  • 三、SDK下载
    • SDK是分为两种类型:
      • 独立版
      • 集成板
    • SDK放入Unity工程中
  • 四、语音代码写法
  • 五、GVoice踩坑
    • 语音权限问题
    • 打包问题
  • 六、总结

一、介绍

最近在做一个实时竞技类游戏,类似于王者荣耀类型的MOBA类实时联网游戏。针对战斗和组队界面需要加入语音的方便大家进行交流,看了几家语音价格也都是参差不齐最后选择的是腾讯的GVoice(价格很低折合费用下来一人一天0.012元),这个也是我们目前用的最合适的。后面我会把完整流程写下来并且把我踩的坑也讲一下,感谢大家的支持。

二、注册GVoice创建项目语音服务

GVoice官网
先进行账号注册,这里我就不过多提示了,直接进入开启服务的申请和创建项目。

进入控制台是这个样子的,右上角是创建新项目
在这里插入图片描述

1.创建项目

根据下属图进行对应的创建即可
在这里插入图片描述
创建之后进入创建项目的控制台如下图
在这里插入图片描述

2.申请语音权限

在这里插入图片描述
点击进入之后进行申请
在这里插入图片描述
申请之后可以找客服对接一下,让他帮你快速通过

3.项目管理查看SDK初始化的一些参数和基本信息

项目管理会弹出来界面有你需要的一些信息
在这里插入图片描述

4.GVoice检测

开通这个语音服务之后可以查看这个语音的检测在这里插入图片描述
在这里插入图片描述

三、SDK下载

GVoice的独立版官方文档,文档中有一些常规的错误和一些解决方案,当然这不是全部的坑都在里面,所有的API和调用方法是可以看的,踩的坑还是五花八门的,后面在继续说坑的问题。
GVoice的集成板官方文档
在这里插入图片描述

SDK是分为两种类型:

独立版

独立版是需要自己下载SDK拖到Unity项目中,这也是我尝试的方法,推荐这个方法。这里我也是主要讲一下独立版SDK的接入。

集成板

集成板则是需要在UnityStore中去关注下载这个sdk,在Unity中用PackageManager进行安装SDK,这里的安装方法我就不仔细说了,在Store中搜索GVoice找到腾讯加的插件下载安装到项目中即可。

SDK放入Unity工程中

SDK分为海外版和国内版,SDK连接下载。
打开网页下载自己对应的版本如下图
在这里插入图片描述
下载解压完成之后如下图
在这里插入图片描述
将上面两个文件夹放入到Unity中
在这里插入图片描述

四、语音代码写法

这里可以参考我上面的官方独立版API,里面写的更全面一些,这里我只接入了小队语音,还有一些高级的玩法我们没有用到就没有接入。

这是我创建的测试工程UI和使用到的一些API如下图
在这里插入图片描述
代码如下我就不过多解释了备注都加了差不多应该都能看明白,SDK的appId和appKey在自己创建的项目中的控制台中找一下,然后下面可以参考我写的一些小队语音的常规操作API,如果想要接入其他的API功能可以在官方的API中在查找一下

using gcloud_voice;
using System;
using UnityEngine;
using static gcloud_voice.IGCloudVoice;public class SDKInit : MonoBehaviour
{IGCloudVoice sVoiceEngine;// Start is called before the first frame updatevoid Start(){sVoiceEngine = GCloudVoice.GetEngine();//接入时请将"AppID"替换为开通业务时从管理控制台获取的 AppIDstring appID = "**********";//接入时请将"AppKey"替换为开通业务时从管理控制台获取的 AppKeystring appkey = "*******************************";// 接入时替换为玩家唯一标识符//string openID = "970001";string openID = DateTime.Now.ToString();int AppInfoID = sVoiceEngine.SetAppInfo(appID, appkey, openID);Debug.LogError("AppInfoID = " + AppInfoID);int InitId = sVoiceEngine.Init();Debug.LogError("InitId = " + InitId);sVoiceEngine.OnJoinRoomComplete += JoinRoomCompleteHandler;}// Update is called once per framevoid Update(){if (sVoiceEngine != null){sVoiceEngine.Poll();}if (Input.GetKeyDown(KeyCode.Space)) {GetRoomNumber();}}public void GetRoomNumber() {string roomName = "abc";int memNum = 8;RoomMembers[] memberlist = new RoomMembers[memNum];sVoiceEngine.GetRoomMembers(roomName, memberlist, memNum);Debug.LogError("memberlist.Length = " + memberlist.Length);Debug.LogError("memberlist[0].memberid = " + memberlist[0].memberid);}public void StartTeamRoom() {sVoiceEngine.SetMode(GCloudVoiceMode.RealTime);string mRoomName = "abc";int mTimeOut = 10000;sVoiceEngine.JoinTeamRoom(mRoomName, mTimeOut);}void JoinRoomCompleteHandler(GCloudVoiceCompleteCode code, string roomName, int memberID) {Debug.LogError("code = " + code);Debug.LogError("roomName = " + roomName);Debug.LogError("memberID = " + memberID);}/// <summary>/// 暂停语音/// </summary>public void VoiceEnginePause() {sVoiceEngine.Pause();   }/// <summary>/// 继续语音/// </summary>public void VoiceEngineResume(){sVoiceEngine.Resume();}/// <summary>/// 打开麦克风/// </summary>public void VoiceOpenMic() {sVoiceEngine.OpenMic();}/// <summary>/// 关闭麦克风/// </summary>public void VoiceCloseMic() {sVoiceEngine.CloseMic();}/// <summary>/// 打开扬声器/// </summary>public void VoiceOpenSpeaker() {sVoiceEngine.OpenSpeaker();}/// <summary>/// 关闭扬声器/// </summary>public void VoiceCloseSpeaker() {sVoiceEngine.CloseSpeaker();}
}

注意这个测试只能在Window编辑器下去跑,在Android编辑器模式下是跑不了的,需要修改一下他原来GCloudVoice的代码如下图所示,将原来的宏定义修改如下(不会影响原来打包之后的安卓手机运行)
在这里插入图片描述

五、GVoice踩坑

语音权限问题

这里我开始测试的时候是用的编辑器做的测试,这种情况下就需要电脑的麦的权限是开启的,开始我的电脑麦的权限是关闭的情况下运行的发现没有声音以为是插件接入的有问题,在开启语音的过程中在开启麦的权限也是不行的(这里只针对编辑器和电脑端),这里测试的环境必须是先确保麦的权限是开启的在运行Unity去初始化SDK。
这里还有一点是如果你退出的时候没有自己退出房间和关闭麦他是不会自己退出的,等于说你在取消Unity的运行也会有声音,除非你把Unity关闭这样才能退出这个语音房间,不然只能你手动退出。

打包问题

如果是2020以上的Unity需要将Plugin下的含有.jar的父级文件夹加上后缀.androidlib如下图(加入之后才能识别.jar的文件,打包到手机平台才能没有问题 官方文档标记)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
如果没有加后缀上面打包出现的手机端运行报错如下
4111官方文档解释是SDK初始化为成功
请添加图片描述

六、总结

上述是我在接入GVoiceSDK时遇到的一些问题和完整流程的整理,有误区的地方希望指正,感谢大家的支持和关注。

相关文章:

Unity接入GVoice腾讯实时语音

Unity接入GVoice腾讯实时语音 一、介绍二、注册GVoice创建项目语音服务1.创建项目2.申请语音权限3.项目管理查看SDK初始化的一些参数和基本信息4.GVoice检测 三、SDK下载SDK是分为两种类型&#xff1a;独立版集成板 SDK放入Unity工程中 四、语音代码写法五、GVoice踩坑语音权限…...

【Spring基础】从0开始学习Spring(2)

前言 在上篇文章&#xff0c;我已经讲了Spring中最核心的知识点&#xff1a;IoC&#xff08;控制反转&#xff09;以及DI&#xff08;依赖注入&#xff09;。这篇文章&#xff0c;我将讲一下关于Spring框架中的其它比较琐碎但是又还是挺重要的知识点&#xff0c;因此&#xff…...

cesium mapboxgl+threebox glb 朝向问题

一、3Dbuilder打开glb 二、cesium在pitch和heading都为0的情况下&#xff0c;不设置模型的朝向 三、mapboxglthreebox在pitch和bearing都为0的情况下&#xff0c;不设置模型的朝向 四、对于地图默认视角&#xff0c;cesium设置pitch-90、heading0的时候和mapboxglthreebox设置p…...

LeetCode 打家劫舍

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…...

单片机的50个电路

单片机 电源 声音模块 收音机 485 蓝牙 光耦 can 光敏电阻 单片机 矩阵 单片机电路 时钟 ADC 接口电路 红外发射 显示模块 红外接收 蜂鸣器驱动 流水灯 usb供电 烧录电路 数码管 EEPROM LCD1602电路 数码管 max485 红外开关 译码器 移位寄存器 步进电机控制 复位电路 下载电路 …...

JVM 性能调优- 五种内存溢出(5)

在介绍之前先简单介绍下 直接内存(Direct Memory)和堆内存(Heap Memory): 关系: 直接内存并不是Java虚拟机的一部分,它是通过Java的NIO库中的ByteBuffer来分配和管理的。直接内存通常由操作系统的本地内存(Native Memory)提供支持。堆内存是Java虚拟机的一部分,用于存…...

【SQL高频基础】1141.查询近30天活跃用户数

题目&#xff1a; 表&#xff1a;Activity ------------------------ | Column Name | Type | ------------------------ | user_id | int | | session_id | int | | activity_date | date | | activity_type | enum | ------------------------…...

基于spring cloud alibaba的微服务平台架构规划

平台基础能力规划&#xff08;继续完善更新…&#xff09; 一、统一网关服务&#xff08;独立服务&#xff09; 二、统一登录鉴权系统管理&#xff08;独立服务&#xff09; 1.统一登录 2.统一鉴权 3.身份管理 用户管理 角色管理 业务系统和菜单管理 部门管理 岗位管理 字典管…...

leetcode(滑动窗口)3.无重复字符的最长字串(C++详细题解)DAY2

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示…...

Android13 系统源码适配安装可卸载的三方apk应用

Android13 系统源码适配安装可卸载的三方apk应用 文章目录 Android13 系统源码适配安装可卸载的三方apk应用一、前言二、Android 系统运行后默认安装三方apk实现1、Android 系统默认安装三方apk实现主要思路2、Android 系统默认安装三方apk具体实现&#xff08;1&#xff09;准…...

flutter使用qr_code_scanner扫描二维码

qr_code_scanner仓库地址&#xff1a;qr_code_scanner | Flutter Package 需要添加android和ios的相机权限和本地相册权限&#xff1a; android中添加权限: 在android\app\build.gradle中修改&#xff1a;minSdkVersion 20 并且在android/app/src/main/AndroidManifest.xml中…...

黑马Java——集合进阶(List、Set、泛型、树)

一、集合的体系结构 1、单列集合&#xff08;Collection&#xff09; 二、Collection集合 1、Collection常见方法 1.1代码实现&#xff1a; import java.util.ArrayList; import java.util.Collection;public class A01_CollectionDemo1 {public static void main(String[] a…...

TS项目实战二:网页计算器

使用ts实现网页计算器工具&#xff0c;实现计算器相关功能&#xff0c;使用tsify进行项目编译&#xff0c;引入Browserify实现web界面中直接使用模块加载服务。   源码下载&#xff1a;点击下载 讲解视频 TS实战项目四&#xff1a;计算器项目创建 TS实战项目五&#xff1a;B…...

MySQL的ACID、死锁、MVCC问题

1 ACID ACID代表原子性&#xff08;atomicity&#xff09;、一致性&#xff08;consistency&#xff09;、隔离性&#xff08;isolation&#xff09;和持久性&#xff08;durability&#xff09;。一个确保数据安全的事务处理系统&#xff0c;必须满足这些密切相关的标准。 原…...

Docker 可视化工具

1、Portainer 概念介绍 Portainer是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 Portainer分为开源社区版&#xff08;CE版&#xff09;和商用版&#xff08;BE版/EE版&#xff09;。 Porta…...

【C++】友元:友元函数与友元类

一、友元 友元&#xff08;friend&#xff09;是C中的一种特殊关系&#xff0c;用于在类之间共享访问权限。通过将一个函数或类声明为另一个类的友元&#xff0c;我们可以允许友元访问声明类的非公有成员。 二、友元函数 问题&#xff1a;现在尝试去重载operator<<&am…...

linux之wsl2安装远程桌面

0. 安装后的效果 1. wsl中打开terminal并安装库 sudo apt-get purge xrdp sudo apt install -y xrdp sudo apt install -y xfce4 sudo apt install -y xfce4-goodies 2.优化显示 sudo sed -i s/max_bpp32/#max_bpp32\nmax_bpp128/g /etc/xrdp/xrdp.ini sudo sed -i s/xserverbp…...

如何以管理员身份删除node_modules文件

今天拉项目&#xff0c;然后需要安装依赖&#xff0c;但是一直报错&#xff0c;如下&#xff1a; 去搜这个问题会让把node_modules文件先删掉 再去安装依赖。我在删除的过程中会说请以管理员身份来删除。 那么windows如何以管理员身份删除node_modules文件呢&#xff1f; wi…...

【Linux】环境基础开发工具的使用之gdb详解(三)

前言&#xff1a;上一篇文章中我们讲解了Linux下的gcc与g的使用&#xff0c;今天我们将进一步的学习gdb与makefile来帮我们更好的理解与使用基础开发工具。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的深度刨析 &#x1f448; …...

SpringBoot源码解读与原理分析(二十四)IOC容器的刷新(五)

文章目录 7.11 初始化所有剩下的单实例bean对象7.11.1 beanFactory.preInstantiateSingletons7.11.2 getBean7.11.2.1 别名的解析处理7.11.2.2 判断是否已注册过7.11.2.3 创建前的检查7.11.2.4 标记准备创建的bean对象7.11.2.5 合并BeanDefinition7.11.2.6 bean对象的创建7.11.…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...