龙图游戏多媒体引擎 Unity版本接入说明

1. 集成SDK(两种方式)

1.1 直接导入unitypackage

Assets->Import Package-> CustomPackage…直接导入LTgmeSDK.unitypackage

1.2 手动拷贝资源文件到相应目录

将开发工具包中 Plugins 文件夹中的文件复制在 Unity 工程>Assets>Plugins 文件夹中
将开发工具包中 Scripts (LTBaseSDK、GMESDK)文件夹中的文件复制在 Unity 工程中存放代码的文件夹中

1.3 资源目录结构介绍

语音sdk目录结构

  1. 语音相关示例demo代码(仅作为接入参考)
  2. Editor里面的SettingsMacro.cs 用于设置宏定义(也可以在编辑器内自行手动设置)
  3. GMESDK三方插件库文件
  4. multiMedia龙图封装语音sdk文件,提供 API 接口。
  5. 不同平台库文件。

1.4 设置语音相关宏

1.执行菜单栏的脚本文件
editor设置宏

2.在File-Build Setting-player settings-other settings里面自行设置
build设置宏

1.5 接口实现注意事项

使用实时语音和离线语音时,代码需要继承LTGmeListener并由于在LTGmeListener里做了相关的事件监听和生命周期的调用。 则需要研发override 相关回调方法并实现游戏中相应的处理。

重要的生命周期需要override 并且调用base方法示例如下:

  1. public override void Awake()
  2. {
  3. base.Awake();
  4. }
  5. public override void Start()
  6. {
  7. base.Start();
  8. }
  9. public override void Update()
  10. {
  11. base.Update();
  12. }
  13. public override void OnApplicationFocus(bool focus)
  14. {
  15. base.OnApplicationFocus(focus);
  16. }
  17. public override void OnDestroy()
  18. {
  19. base.OnDestroy();
  20. }

具体用法可以参考demo !

2. 核心接口

不管实时语音还是离线语音都需要用到核心接口
例如使用了实时语音服务,同时也需要使用语音消息服务,只需要调用一次 Init 初始化接口
在使用 GME 的任何接口之前,都需要先调用 Init 接口。

2.1初始化sdk

2.1.1函数原型

  1. public abstract int Init(string sdkAppID, string openID);

2.1.2参数说明

参数 类型 含义
sdkAppId string 来自 腾讯云控制台 的 GME 服务提供的 AppID
openID string openID 只支持 Int64 类型(转为 string 传入)

2.1.3示例代码

  1. LTGmeSDK.GetInstance().Init(appid,openid);

2.2触发事件回调

通过在 update 里面周期的调用 Poll 可以触发事件回调。Poll 是 GME 的消息泵,GME 需要周期性的调用 Poll 接口触发事件回调。如果没有调用 Poll ,将会导致整个 SDK 服务运行异常。如果脚本没有继承MonoBehaviour 需要使用提供的EnginePollHelper 文件进行周期性的调用。

2.2.1函数原型

  1. public abstract int Poll();

2.2.2示例代码

  1. void Update()
  2. {
  3. LTGmeSDK.GetInstance().Poll();
  4. }

2.3系统暂停、系统恢复

当系统发生 Pause 事件时,需要同时通知引擎进行 Pause。例如在应用退后台时候(OnApplicationPause, isPause=True),如果不需要后台播放房间内声音,请调用 Pause 接口暂停整个 GME 服务。
当系统发生 Resume 事件时,需要同时通知引擎进行 Resume。Resume 接口只恢复实时语音

2.3.1函数原型

  1. public abstract int Pause()
  2. public abstract int Resume()

2.3.2示例代码

  1. private void OnApplicationFocus(bool focus)
  2. {
  3. Debug.Log(string.Format("OnApplicationFocus {0}", focus));
  4. if (focus)
  5. {
  6. LTGmeSDK.GetInstance().Resume();
  7. }
  8. else
  9. {
  10. LTGmeSDK.GetInstance().Pause();
  11. }
  12. }

2.4 反初始化SDK

反初始化 SDK,进入未初始化状态。如果游戏业务侧账号与 openid 是绑定的,那切换游戏账号需要反初始化 GME,再用新的 openid 初始化

2.4.1函数原型

  1. public abstract int Uninit()

2.4.2示例代码

  1. LTGmeSDK.GetInstance().Uninit();

3. 实时语音功能接口

3.1 鉴权信息

生成 AuthBuffer,用于相关功能的加密和鉴权

3.1.1函数原型

  1. QAVAuthBuffer GenAuthBuffer(int appId, string roomId, string openId, string key)

3.1.2参数说明

参数 类型 含义
appId int 来自腾讯云控制台的 AppID 号码。
roomId string 房间号,最大支持127字符。
openId string 用户标识。与 Init 时候的 openID 相同。
key string 来自腾讯云 控制台 的权限密钥。

3.1.3示例代码

  1. byte[] authBuffer = LTGmeSDK.GetInstance().GetAuthBuffer(UserConfig.GetAppID(), sRoomID,UserConfig.GetUserID(), UserConfig.GetAuthKey());

3.2加入房间

用生成的鉴权信息进房,加入房间默认不打开麦克风及扬声器

3.2.1函数原型

  1. EnterRoom(string roomId, int roomType, byte[] authBuffer)

3.2.2参数说明

参数 类型 含义
roomId string 房间号,最大支持127字符
roomType Int 进房只需填 1流畅音质 进房后可以修改
authBuffer Byte[] 鉴权码

3.2.3示例代码

  1. LTGmeSDK.GetInstance().EnterRoom(sRoomID, roomtype, authBuffer);

3.2.4注意事项

请使用 1:流畅音质 作为房间类型参数进入房间。非流畅音质进房会有错误提示,无法进房。进房后可以通过接口修改音质

  1. public enum LTGMERoomType
  2. {
  3. ROOM_TYPE_FLUENCY = 1,//流畅音质
  4. ROOM_TYPE_STANDARD = 2,//标准音质
  5. ROOM_TYPE_HIGHQUALITY = 3,//高清音质
  6. };

3.3加入房间事件的回调

加入房间完成后会通过回调返回进房结果,监听进房结果事件后进行处理。如果回调为成功,即此时进房成功,开始进行计费

3.3.1函数原型

  1. //callback
  2. public abstract void onEnterRoomSuccess();
  3. public abstract void onEnterRoomFailed(int err, string errInfo);

3.3.2示例代码

  1. public override void onEnterRoomFailed(int err, string errInfo)
  2. {
  3. Debug.Log("onEnterRoomFailed err = "+ err +" errInfo = "+ errInfo);
  4. }
  5. public override void onEnterRoomSuccess()
  6. {
  7. Debug.Log("onEnterRoomSuccess");
  8. }

3.3.3错误码

错误码值 原因及建议方案
7006 鉴权失败原因
• AppID 不存在或者错误
• authbuff 鉴权错误
• 鉴权过期
• OpenId 不符合规范
7007 已经在其它房间
1001 已经在进房过程中,然后又重复了此操作。建议在进房回调返回之前不要再调用进房接口
1003 已经进房了在房间中,又调用一次进房接口
1101 确保已经初始化 SDK,确保 OpenId 是否符合规则,或者确保在同一线程调用接口,以及确保 Poll 接口正常调用

3.4退出房间

通过调用此接口可以退出所在房间。这是一个异步接口,返回值为 AV_OK (0)的时候代表异步投递成功。
如果应用中有退房后立即进房的场景,在接口调用流程上,开发者无需要等待 ExitRoom 的回调 RoomExitComplete 通知,只需直接调用接口。

3.4.1函数原型

  1. public void ExitRoom()

3.4.2示例代码

  1. LTGmeSDK.GetInstance().ExitRoom();

3.5退出房间回调

3.5.1函数原型

  1. public abstract void onExitRoomComplete();

3.5.2示例代码

  1. public override void onExitRoomComplete()
  2. {
  3. Debug.Log("onExitRoomComplete");
  4. }

3.6判断是否已经进入房间

通过调用此接口可以判断是否已经进入房间,返回值为 bool 类型。进房过程中调用无效果。

3.6.1函数原型

  1. public bool IsRoomEntered()

3.6.2示例代码

  1. LTGmeSDK.GetInstance().IsRoomEntered()

3.7快速切换房间

调用此接口快速切换实时语音房间。此接口在进房后调用。切换房间后,不重置设备,即如果在此房间已经是打开麦克风状态,在切换房间后也会是打开麦克风状态。

3.7.1接口原型

  1. public int SwitchRoom(string targetRoomID, byte[] authBuffer)

3.7.2参数说明

参数 类型 含义
targetRoomID String 将要进入的房间号
authBuffer byte[] 用将要进入的房间号生成的新鉴权

3.7.3接口示例

  1. byte[] authBuffer = LTGmeSDK.GetInstance().GetAuthBuffer(UserConfig.GetAppID(), sRoomID, UserConfig.GetUserID(), UserConfig.GetAuthKey());
  2. int ret = LTGmeSDK.GetInstance().SwitchRoom(sRoomID, authBuffer);

3.8快速切换房间的回调

3.8.1函数原型

  1. public abstract void onSwitchRoomSuccess();
  2. public abstract void onSwitchRoomFailed(string error_info);

3.8.2示例代码

  1. public override void onSwitchRoomFailed(string error_info)
  2. {
  3. Debug.Log("onSwitchRoomFailed info = "+ error_info);
  4. }
  5. public override void onSwitchRoomSuccess()
  6. {
  7. Debug.Log("onSwitchRoomSuccess ");
  8. }

3.9跨房连麦

调用此接口进行跨房连麦,此接口在进房后调用。调用接口后,本端可以与目标房间的目标 OpenID 用户进行连麦交流。
场景示例
a 用户在 A 房间中,b 用户在 B 房间中,a 用户可以通过跨房接口与 b 进行通话,A 房间中的用户 c 说话,B 房间的 b 与 d 无法听到;A 房间中的用户 c 只能听到 A 房间的声音以及 B 房间中 b 的声音,B 房间其他人说话 c 无法听到。

3.9.1函数原型

  1. /// <summary> 开启房间共享,与另外的房间中的 OpenID 进行连麦</summary>
  2. public abstract int StartRoomSharing(string targetRoomID, string targetOpenID, byte[] authBuffer);
  3. /// <summary> 结束已经开启的房间共享</summary>
  4. public abstract int StopRoomSharing();

3.9.2 参数说明

参数 类型 含义
targetRoomID String 将要连麦的房间号
targetOpenID String 将要连麦的目标 OpenID
authBuffer byte[] 保留标志位,只需填 NULL

3.9.3示例代码

  1. byte[] auth = null;
  2. LTGmeSDK.GetInstance().StartRoomSharing(targetRoomID, targetOpenID, auth);
  3. LTGmeSDK.GetInstance().StopRoomSharing();

3.10成员进房、说话状态通知

此接口适用于获取房间中说话的人并在 UI 中展示,以及有人进入、退出语音房间的一个通知。
该事件在状态变化才通知,状态不变化的情况下不通知

3.10.1函数原型

  1. public abstract void onEndPointEnter(string[] memberList);
  2. public abstract void onEndPointExit(string[] memberList);
  3. public abstract void onEndPointHasAudio(string[] memberList);
  4. public abstract void onEndPointNoAudio(string[] memberList);

3.10.2示例代码

  1. public override void onEndPointEnter(string[] memberList)
  2. {
  3. // 有成员进入房间,返回房间内所有的 openid
  4. //throw new System.NotImplementedException();
  5. RefreshMemberList(memberList,1);
  6. }
  7. public override void onEndPointExit(string[] memberList)
  8. {
  9. // 有成员退出房间,返回房间内所有的 openid
  10. //throw new System.NotImplementedException();
  11. RefreshMemberList(memberList,0);
  12. }
  13. public override void onEndPointHasAudio(string[] memberList)
  14. {
  15. //有成员发送音频包,返回房间内说话的所有的 openid
  16. throw new System.NotImplementedException();
  17. }
  18. public override void onEndPointNoAudio(string[] memberList)
  19. {
  20. //有成员停止发送音频包,返回房间内停止说话的所有的 openid
  21. throw new System.NotImplementedException();
  22. }

3.11房间中禁言

将某个 ID 加入音频数据黑名单,即不接受某人的语音, 只对本端生效,不会影响其他端。返回值为 0 表示调用成功。例如 :A,B,C 都在同一个房间开麦说话:
• 如果 A 设置了 C 的黑名单, 则 A 只能听见 B 的声音。
• B 因为没有设置黑名单, 仍旧可以听见 A 和 C 的声音。
• C 同样因为没有设置黑名单, 可以听见 A 和 B 的声音。
此接口适用于在语音房间中将某用户禁言的场景。

3.11.1函数原型

  1. public abstract int AddAudioBlackList(string openId);

3.11.2参数说明

参数 类型 含义
openId String 需添加黑名单的用户 openid

3.11.3示例代码

  1. LTGmeSDK.GetInstance().AddAudioBlackList(targetOpenID);

3.12移除禁言

将某个 Id 移除音频数据黑名单

3.12.1函数原型

  1. public abstract int RemoveAudioBlackList(string openId);

3.12.2参数说明

参数 类型 含义
openId String 需移除黑名单的用户 openid

3.12.3示例代码

  1. LTGmeSDK.GetInstance().RemoveAudioBlackList(targetOpenID);

3.13开启或关闭麦克风

此接口用来开启关闭麦克风。加入房间默认不打开麦克风及扬声器。

3.13.1函数原型

  1. public abstract int EnableMic(bool isEnabled);

3.13.2参数说明

参数 类型 含义
isEnabled boolean 如果需要打开麦克风,则传入的参数为 true,如果关闭麦克风,则参数为 false

3.13.3示例代码

  1. LTGmeSDK.GetInstance().EnableMic(value);

3.14麦克风状态获取

此接口用于获取麦克风状态,返回值0为关闭麦克风状态,返回值1为打开麦克风状态。

3.14.1函数原型

  1. public abstract int GetMicState();

3.14.2示例代码

  1. int state = LTGmeSDK.GetInstance().GetMicState();

3.15开启或关闭采集设备

此接口用来开启/关闭采集设备。加入房间默认不打开设备。
只能在进房后调用此接口,退房会自动关闭设备。
在移动端,打开采集设备通常会伴随权限申请,音量类型调整等操作。

3.15.1函数原型

  1. public abstract int EnableAudioCaptureDevice (bool enabled);

3.15.2参数说明

参数 类型 含义
isEnabled bool 如果需要打开采集设备,则传入的参数为 true,如果关闭采集设备,则参数为 false

3.15.3示例代码

  1. //打开采集设备
  2. LTGmeSDK.GetInstance().EnableAudioCaptureDevice(true);

3.16采集设备状态获取

此接口用于采集设备状态获取。

3.16.1函数原型

  1. public abstract bool IsAudioCaptureDeviceEnabled();

3.16.2示例代码

  1. bool IsAudioCaptureDevice = LTGmeSDK.GetInstance().IsAudioCaptureDeviceEnabled();

3.17打开或关闭音频上行

此接口用于打开/关闭音频上行。如果采集设备已经打开,那么会发送采集到的音频数据。如果采集设备没有打开,那么仍旧无声。采集设备的打开关闭请参见接口 EnableAudioCaptureDevice。

3.17.1函数原型

  1. public abstract int EnableAudioSend(bool isEnabled);

3.17.2参数说明

参数 类型 含义
isEnabled bool 如果需要打开音频上行,则传入的参数为 true,如果关闭音频上行,则参数为 false

3.17.3示例代码

  1. LTGmeSDK.GetInstance().EnableAudioSend(true);

3.18音频上行状态获取

此接口用于音频上行状态获取。

3.18.1函数原型

  1. public abstract bool IsAudioSendEnabled();

3.18.2示例代码

  1. bool IsAudioSend = LTGmeSDK.GetInstance().IsAudioSendEnabled();

3.19获取麦克风实时音量

此接口用于获取麦克风实时音量,返回值为 int 类型。建议20ms获取一次。值域为0 - 100,通过此接口可以获取到麦克风采集到的实时音量情况。此接口不适用于语音消息服务。

3.19.1函数原型

  1. public abstract int GetMicLevel();

3.19.2示例代码

  1. LTGmeSDK.GetInstance().GetAudioMicLevel()

3.20获取音频上行实时音量

此接口用于获取自己音频上行实时音量,返回值为 int 类型,取值范围为0 - 100。
此接口不适用于语音消息服务。

3.20.1函数原型

  1. public abstract int GetSendStreamLevel();

3.20.2示例代码

  1. int Level = LTGmeSDK.GetInstance().GetSendStreamLevel();

3.21设置麦克风软件音量

此接口用于设置麦克风的音量。参数 volume 用于设置麦克风的音量,相当于对采集的声音做衰减或增益,当数值为0的时候表示静音,当数值为100的时候表示音量不增不减,默认数值为100。此接口不适用于语音消息服务。

3.21.1函数原型

  1. public abstract int SetMicVolume(int volume);

3.21.2参数说明

参数 类型 含义
volume int 设置音量,范围0 - 200

3.21.3示例代码

  1. LTGmeSDK.GetInstance().SetAudioMicVolume(int.Parse(volume));

3.22获取麦克风软件音量

此接口用于获取麦克风的音量。返回值为一个int类型数值,返回值为101代表没调用过接口 SetMicVolume。此接口不适用于语音消息服务。

3.22.1函数原型

  1. public abstract int GetMicVolume();

3.22.2示例代码

  1. LTGmeSDK.GetInstance().GetAudioMicVolume()

3.23开启或关闭扬声器

此接口用于开启关闭扬声器。

3.23.1函数原型

  1. public abstract int EnableSpeaker(bool isEnabled);

3.23.2参数说明

参数 类型 含义
isEnabled bool 如果需要关闭扬声器,则传入的参数为 false,如果打开扬声器,则参数为 true

3.23.3示例代码

  1. LTGmeSDK.GetInstance().EnableSpeaker(value);

3.24扬声器状态获取

此接口用于扬声器状态获取。返回值0为关闭扬声器状态,返回值1为打开扬声器状态。

3.24.1函数原型

  1. public abstract int GetSpeakerState();

3.24.2示例代码

  1. int ret = LTGmeSDK.GetInstance().GetSpeakerState();

3.25开启或关闭播放设备

此接口用于开启关闭播放设备。

3.25.1函数原型

  1. public abstract int EnableAudioPlayDevice (bool enabled);

3.25.2参数说明

参数 类型 含义
isEnabled bool 如果需要关闭播放设备,则传入的参数为 false,如果打开播放设备,则参数为 true

3.25.3示例代码

  1. //打开播放设备
  2. LTGmeSDK.GetInstance().EnableAudioPlayDevice(true);

3.26播放设备状态获取

此接口用于播放设备状态获取。

3.26.1函数原型

  1. public abstract bool IsAudioPlayDeviceEnabled();

3.26.2示例代码

  1. bool IsAudioPlayDevice = LTGmeSDK.GetInstance().IsAudioPlayDeviceEnabled();

3.27打开或关闭音频下行

此接口用于打开/关闭音频下行。如果播放设备已经打开,那么会播放房间里其他人的音频数据。如果播放设备没有打开,那么仍旧无声。播放设备的打开关闭参见接口请参见 EnableAudioPlayDevice。

3.27.1函数原型

  1. public abstract int EnableAudioRecv(bool isEnabled);

3.27.2参数说明

参数 类型 含义
isEnabled bool 如果需要打开音频下行,则传入的参数为 true,如果关闭音频下行,则参数为 false

3.27.3示例代码

  1. LTGmeSDK.GetInstance().EnableAudioRecv(true);

3.28音频下行状态获取

此接口用于音频下行状态获取。

3.28.1函数原型

  1. public abstract bool IsAudioRecvEnabled();

3.28.2示例代码

  1. bool IsAudioRecv = LTGmeSDK.GetInstance().IsAudioRecvEnabled();

3.29获取扬声器实时音量

此接口用于获取扬声器实时音量。返回值为 int 类型数值,表示扬声器实时音量。建议20ms获取一次。

3.29.1函数原型

  1. public abstract int GetSpeakerLevel();

3.29.2示例代码

  1. LTGmeSDK.GetInstance().GetAudioSpeakerLevel()

3.30获取房间内其他成员下行实时音量

此接口用于获取房间内其他成员下行实时音量,返回值为 int 类型,取值范围为0 - 200。

3.30.1函数原型

  1. public abstract int GetRecvStreamLevel(string openId);

3.30.2参数说明

参数 类型 含义
openId string 房间其他成员的 openId

3.30.3示例代码

  1. int Level = LTGmeSDK.GetInstance().GetRecvStreamLevel(openId);

3.31设置扬声器的音量

此接口用于设置扬声器的音量。
参数 volume 用于设置扬声器的音量,当数值为0时,表示静音,当数值为100时,表示音量不增不减,默认数值为100。

3.31.1函数原型

  1. public abstract int SetSpeakerVolume(int volume);

3.31.2参数说明

参数 类型 含义
volume int 设置音量,范围0 - 200

3.31.3示例代码

  1. LTGmeSDK.GetInstance().SetAudioSpeakerVolume(int.Parse(volume));

3.32获取扬声器的音量

此接口用于获取扬声器的音量。返回值为 int 类型数值,代表扬声器的音量,返回值为101代表没调用过接口 SetSpeakerVolume。
Level 是实时音量,Volume 是扬声器的音量,最终声音音量 = Level × Volume %。例如实时音量是数值是100,此时 Volume 的数值是60,那么最终发出来的声音数值也是60。

3.32.1函数原型

  1. public abstract int GetSpeakerVolume();

3.32.2示例代码

  1. LTGmeSDK.GetInstance().GetAudioSpeakerVolume()

3.33动态设置房间内某成员音量

此接口用于设置房间内某成员的说话音量大小,此设置只在本端生效。

3.33.1函数原型

  1. public abstract int SetSpeakerVolumeByOpenID(string openid, int volume);

3.33.2参数说明

参数 类型 含义
openId string 某成员openid
volume int 期望的音量,范围为0-200,100表示无增强也无衰减

3.33.3示例代码

  1. LTGmeSDK.GetInstance().SetSpeakerVolumeByOpenID("openid",100);

3.34获取设置的声音百分比

调用此接口获取SetSpeakerVolumeByOpenID设置的能量值

3.34.1函数原型

  1. public abstract int GetSpeakerVolumeByOpenID(string openid);

3.34.2参数说明

参数 类型 含义
openId string 某成员openid

3.34.3示例代码

  1. int vol =LTGmeSDK.GetInstance().GetSpeakerVolumeByOpenID("openid");

3.35启动耳返

此接口用于启动耳返,需要 EnableLoopBack+EnableSpeaker 才可以听到自己声音。

3.35.1函数原型

  1. public abstract int EnableLoopBack(bool enable);

3.35.2参数说明

参数 类型 含义
enable bool 设置是否启动

3.35.3示例代码

  1. LTGmeSDK.GetInstance().EnableLoopBack(value);

3.36获取用户房间音频类型

注意进房间时必须是流畅音质 进房后可以修改音质
此接口用于获取用户房间音频类型,返回值为房间音频类型,返回值为0时代表获取用户房间音频类型发生错误,房间音频类型参考 EnterRoom 接口。

3.36.1函数原型

  1. public abstract int GetRoomType();

3.36.2示例代码

  1. LTGmeSDK.GetInstance().GetRoomType()

3.37房间音频类型修改

3.37.1函数原型

  1. public abstract int ChangeRoomType(int roomType);
  2. public enum LTGMERoomType
  3. {
  4. ROOM_TYPE_FLUENCY = 1,//流畅音质
  5. ROOM_TYPE_STANDARD = 2,//标准音质
  6. ROOM_TYPE_HIGHQUALITY = 3,//高清音质
  7. };

3.37.2示例代码

  1. LTGmeSDK.GetInstance().ChangeRoomType(roomtype);

3.38 修改房间音频类型回调

3.38.1函数原型

  1. public abstract void onRoomTypeChangedCallback(int roomtype);

3.38.2示例代码

  1. public override void onRoomTypeChangedCallback(int roomtype)
  2. {
  3. LTBaseSdkLog.LogWarning(string.Format("RoomTypeChanged current:{0}", roomtype));
  4. //throw new System.NotImplementedException();
  5. }

4. 语音消息及转文本

4.1生成鉴权信息

4.1.1函数原型

  1. public static byte[] GenAuthBuffer(int appId, string roomID, string openId, string key)

4.1.2参数说明

参数 类型 含义
appId int 来自腾讯云控制台的 AppId 号码。
roomId string 填null
openId string 用户标识。与 Init 时候的 OpenId相同。
key string 来自腾讯云 控制台 的权限密钥。

4.2应用鉴权

生成鉴权信息后,将鉴权赋值到 SDK 中。

4.2.1函数原型

  1. public abstract int ApplyPTTAuthbuffer (byte[] authBuffer);

4.2.2参数说明

参数 类型 含义
authBuffer byte[] 鉴权

4.2.3示例代码

  1. UserConfig.SetAppID(appid);
  2. UserConfig.SetUserID(openid);
  3. UserConfig.SetAuthKey(appkey);
  4. byte[] authBuffer = LTGmeSDK.GetInstance().GetAuthBuffer(UserConfig.GetAppID(), null, UserConfig.GetUserID(), UserConfig.GetAuthKey());
  5. LTGmeSDK.GetInstance().ApplyPTTAuthbuffer(authBuffer);

4.3启动流式语音识别

此接口用于启动流式语音识别,同时在回调中会有实时的语音转文字返回,可以指定语言进行识别,也可以将语音中识别到的信息翻译成指定的语言返回。停止录音调用 停止录制接口:StopRecording。

4.3.1函数原型

  1. public abstract int StartRecordingWithStreamingRecognition(string filePath);
  2. public abstract int StartRecordingWithStreamingRecognition(string filePath, string speechLanguage);
  3. public abstract int StartRecordingWithStreamingRecognition(string filePath, string speechLanguage, string translatelanguage);

4.3.2参数说明

参数 类型 含义
filePath String 存放的语音路径
speechLanguage String 识别成指定文字的语言参数,参数请参考 语音转文字的语言参数参考列表
filePath String 翻译成指定文字的语言参数,参数请参考 语音转文字的语言参数参考列表(此参数暂不可用,请填写与 speechLanguage 相同的参数)

4.3.3示例代码

  1. string recordPath = Application.streamingAssetsPath + string.Format("/{0}.silk", sUid++); LTGmeSDK.GetInstance().StartRecordingWithStreamingRecognition(recordPath,"cmn-Hans-CN","cmn-Hans-CN");

4.4流式语音识别的回调

4.4.1函数原型

  1. public abstract void onStreamingRecCompleteCallback(int code, string fileid, string filePath, string result);

4.4.2参数说明

消息名称 含义
code 用于判断流式语音识别是否成功的返回码
result 语音转文字识别的文本
filePath 录音存放的本地地址
fileid 录音在后台的 url 地址,录音在服务器存放 90 天。fileid 固定字段为 http://gme-v2-

4.4.3错误码

错误码 含义 处理方式
32775 流式语音转文本失败,但是录音成功 调用 UploadRecordedFile 接口上传录音,再调用 SpeechToText 接口进行语音转文字操作
32777 流式语音转文本失败,但是录音成功,上传成功 返回的信息中有上传成功的后台 url 地址,调用 SpeechToText 接口进行语音转文字操作
32786 流式语音转文本失败 在流式录制状态当中,请等待流式录制接口执行结果返回

4.4.4示例代码

  1. public override void onStreamingRecCompleteCallback(int code, string fileid, string filePath, string result)
  2. {
  3. if (code == 0)
  4. {
  5. //setBtnText(mStreamBtn, "流式");
  6. InputField field = transform.Find("recordFilePath").GetComponent<InputField>();
  7. field.text = filePath;
  8. field = transform.Find("downloadUrl").GetComponent<InputField>();
  9. field.text = fileid; // 有了fileid就可以进行转文字的操作
  10. field = transform.Find("convertTextResult").GetComponent<InputField>();
  11. field.text = result;
  12. Text tc = transform.Find("TextContent").GetComponent<Text>();
  13. tc.text = result;
  14. Debug.LogWarning("录制完成");
  15. }
  16. else if (code == -1)
  17. {
  18. Debug.LogWarning("录制失败:流式正在录制中");
  19. }
  20. else
  21. {
  22. if (code == 4103)
  23. {
  24. Debug.LogWarning("录制时长太短");
  25. }
  26. else if (code == 32775)
  27. {
  28. Debug.LogWarning(" 上传和翻译失败但是录音成功");
  29. //调用 UploadRecordedFile 接口上传录音,再调用 SpeechToText 接口进行语音转文字操作
  30. }
  31. else if (code == 32777)
  32. {
  33. Debug.LogWarning(" 翻译失败但是录音和上传成功");
  34. }
  35. else
  36. {
  37. Debug.LogWarning("录制失败:" + Convert.ToString(code));
  38. }
  39. }
  40. }

4.5启动录音

此接口用于启动录音。需要将录音文件上传后才可以进行语音转文字等操作。停止录音调用 StopRecording。

4.5.1函数原型

  1. public abstract int StartRecording(string filePath);

4.5.2参数说明

参数 类型 含义
fileDir string 存放的语音路径

4.5.3示例代码

  1. string recordPath = Application.streamingAssetsPath + string.Format("/{0}.silk", sUid++);
  2. int ret = LTGmeSDK.GetInstance().StartRecording(recordPath);

4.6停止录音

此接口用于停止录音。此接口为异步接口,停止录音后会有录音完成回调,成功之后录音文件才可用。

4.6.1函数原型

  1. public abstract int StopRecording();

4.6.2示例代码

  1. LTGmeSDK.GetInstance().StopRecording();

4.7启动录音的回调

停止录音调用StopRecording。停止录音后才有启动录音的回调。

4.7.1函数原型

  1. public abstract void onRecordFileCompleteCallback(int code, string filepath);

4.7.2参数说明

参数 类型 含义
code string 当 code 为 0 时,录制完成
filepath string 录制的存放地址,必须是可以访问到的路径,不可将 fileid 作为路径

4.7.3示例代码

  1. public override void onRecordFileCompleteCallback(int code, string filepath)
  2. {
  3. //throw new System.NotImplementedException();
  4. if (this == null)
  5. {
  6. return;
  7. }
  8. //setBtnText(mRecordBtn, "录制");
  9. if (code == 0)
  10. {
  11. InputField field = transform.Find("recordFilePath").GetComponent<InputField>();
  12. field.text = filepath;
  13. Debug.LogWarning("录制完成");
  14. }
  15. else
  16. {
  17. if (code == 4103)
  18. {
  19. Debug.LogWarning("录制时长太短");
  20. }
  21. else
  22. {
  23. Debug.LogWarning("录制失败:" + Convert.ToString(code));
  24. }
  25. }
  26. }

4.8暂停录音

此接口用于暂停录音。如需恢复录音请调用接口 ResumeRecording。

4.8.1函数原型

  1. public abstract int PauseRecording();

4.8.2示例代码

  1. LTGmeSDK.GetInstance().PauseRecording();

4.9恢复录音

4.9.1函数原型

  1. public abstract int ResumeRecording();

4.9.2示例代码

  1. LTGmeSDK.GetInstance().ResumeRecording();

4.10取消录音

4.10.1函数原型

  1. public abstract int CancelRecording();

4.10.2示例代码

  1. LTGmeSDK.GetInstance().CancelRecording();

4.11获取语音消息麦克风实时音量

此接口用于获取麦克风实时音量,返回值为 int 类型,值域为0 - 200。

4.11.1函数原型

  1. public abstract int GetMicLevel();

4.11.2示例代码

  1. LTGmeSDK.GetInstance().GetPttMicLevel()

4.12设置语音消息录制音量

此接口用于设置离线语音录制音量,值域为0 - 200。

4.12.1函数原型

  1. public abstract int SetMicVolume(int volume);

4.12.2示例代码

  1. LTGmeSDK.GetInstance().SetPttMicVolume(result)

4.13获取语音消息录制音量

此接口用于获取离线语音录制音量。返回值为 int 类型,值域为0 - 200。

4.13.1函数原型

  1. public abstract int GetMicVolume();

4.13.2示例代码

  1. LTGmeSDK.GetInstance().GetPttMicVolume()

4.14获取语音消息扬声器实时音量

此接口用于获取扬声器实时音量。返回值为 int 类型,值域为0 - 200。

4.14.1函数原型

  1. public abstract int GetSpeakerLevel();

4.14.2示例代码

  1. LTGmeSDK.GetInstance().GetPttSpeakerLevel()

4.15播放语音

此接口用于播放语音。

4.15.1函数原型

  1. public abstract int PlayRecordedFile(string filePath);
  2. public abstract int PlayRecordedFile(string filePath,int voiceType);

4.15.2参数说明

参数 类型 含义
filePath string 本地语音文件的路径
voicetype int 变声类型,请参考 变声接入文档

4.15.3代码示例

  1. LTGmeSDK.GetInstance().PlayRecordedFile(filepath);
  2. LTGmeSDK.GetInstance().PlayRecordedFileVoiceType(fileToPlay, vocicetype);

4.16播放语音的回调

4.16.1函数原型

  1. public abstract void onPlayFileCompleteCallback(int code, string filepath);

4.16.2参数说明

参数 类型 含义
code int 当 code 为0时,播放完成
filepath string 录制的存放地址

4.16.3代码示例

  1. public override void onPlayFileCompleteCallback(int code, string filepath)
  2. {
  3. //throw new System.NotImplementedException();
  4. if (this == null)
  5. {
  6. return;
  7. }
  8. mIsPlaying = false;
  9. //setBtnText(mPlayBtn, "播放");
  10. if (code != 0)
  11. {
  12. Debug.LogWarning("播放失败" + Convert.ToString(code));
  13. }
  14. }

4.17停止播放语音

此接口用于停止播放语音。停止播放语音也会有播放完成的回调。

4.17.1函数原型

  1. public abstract int StopPlayFile();

4.17.2示例代码

  1. LTGmeSDK.GetInstance().StopPlayFile();

4.18设置语音消息播放音量

此接口用于设置离线语音播放音量,值域为0 - 200。

4.18.1函数原型

  1. public abstract int SetSpeakerVolume(int volume);

4.18.2示例代码

  1. LTGmeSDK.GetInstance().SetPttSpeakerVolume(result);

4.19获取语音消息播放音量

此接口用于获取离线语音播放音量。返回值为 int 类型,值域为0 - 200。

4.19.1函数原型

  1. public abstract int GetSpeakerVolume();

4.19.2示例代码

  1. LTGmeSDK.GetInstance().GetPttSpeakerVolume()

4.20获取语音文件的大小

4.20.1函数原型

  1. public abstract int GetFileSize(string filePath);

4.20.2参数说明

参数 类型 含义
filePath String 语音文件的路径,此路径为本地路径

4.20.3示例代码

  1. LTGmeSDK.GetInstance().GetFileSize(filepath)

4.21获取语音文件的时长

4.21.1函数原型

  1. public abstract int GetVoiceFileDuration(string filePath);

4.21.2参数说明

参数 类型 含义
filePath String 语音文件的路径,此路径为本地路径

4.21.3示例代码

  1. LTGmeSDK.GetInstance().GetVoiceFileDuration(filepath)

4.22上传语音文件

4.22.1函数原型

  1. public abstract int UploadRecordedFile(string filePath);

4.22.2参数说明

参数 类型 含义
filePath String 上传的语音路径,此路径为本地路径

4.22.3示例代码

  1. LTGmeSDK.GetInstance().UploadRecordedFile(filePath);

4.23上传语音完成的回调

4.23.1函数原型

  1. public abstract void onUploadFileCompleteCallback(int code, string filepath, string fileid);

4.23.2参数说明

参数 类型 含义
code int 当 code 为0时,录制完成
filepath string 录制的存放地址
fileid string 文件的 url 路径

4.23.3示例代码

  1. public override void onUploadFileCompleteCallback(int code, string filepath, string fileid)
  2. {
  3. //throw new System.NotImplementedException();
  4. if (code == 0)
  5. {
  6. Debug.LogWarning("上传成功");
  7. InputField field = transform.Find("downloadUrl").GetComponent<InputField>();
  8. field.text = fileid;
  9. }
  10. else
  11. {
  12. Debug.LogWarning("上传失败" + Convert.ToString(code));
  13. InputField field = transform.Find("downloadUrl").GetComponent<InputField>();
  14. field.text = "";
  15. }
  16. }

4.24下载语音文件

4.24.1函数原型

  1. public abstract int DownloadRecordedFile(string fileID, string downloadFilePath);

4.24.2参数说明

参数 类型 含义
fileID String 文件的 url 路径
downloadFilePath string 文件的本地保存路径,必须是可以访问到的路径,不可将 fileid 作为路径

4.24.3示例代码

  1. LTGmeSDK.GetInstance().DownloadRecordedFile(fileID, downloadFilePath);

4.25下载语音文件完成回调

4.25.1函数原型

  1. public abstract void onDownloadFileCompleteCallback(int code, string filepath, string fileid);

4.25.2参数说明

参数 类型 含义
code int 当 code 为0时,录制完成
filepath string 录制的存放地址
fileid string 文件的 url 路径,录音在服务器存放 90 天

4.25.3示例代码

  1. public override void onDownloadFileCompleteCallback(int code, string filepath, string fileid)
  2. {
  3. if (code == 0)
  4. {
  5. Debug.LogWarning("下载成功");
  6. InputField field = transform.Find("downloadFilePath").GetComponent<InputField>();
  7. field.text = filepath;
  8. //InputField audioInput = transform.Find("auditResult").GetComponent<InputField>();
  9. //audioInput.text = auditResult;
  10. }
  11. else
  12. {
  13. Debug.LogWarning("下载失败" + Convert.ToString(code));
  14. InputField field = transform.Find("downloadFilePath").GetComponent<InputField>();
  15. field.text = "";
  16. //InputField audioInput = transform.Find("auditResult").GetComponent<InputField>();
  17. //audioInput.text = auditResult;
  18. }
  19. //throw new System.NotImplementedException();
  20. }

4.26将指定的语音文件识别成文字

4.26.1函数原型

  1. public abstract int SpeechToText(string fileID);
  2. public abstract int SpeechToText(string fileID, string speechLanguage);
  3. public abstract int SpeechToText(string fileID, string speechLanguage, string translatelanguage);

4.26.2参数说明

参数 类型 含义
fileID String 语音文件 url,录音在服务器存放90天
speechLanguage string 识别出指定文字的语言参数,参数参考 语音转文字的语言参数参考列表
translatelanguage string 翻译成指定文字的语言参数,参数参考 语音转文字的语言参数参考列表(此参数暂时无效,填入参数应与 speechLanguage 一致)

4.26.3示例代码

  1. LTGmeSDK.GetInstance().SpeechToText(fileID, ko-KR”,” ko-KR”);

4.27 识别回调

4.27.1函数原型

  1. public abstract void onSpeechToTextCompleteCallback(int code, string fileid, string result);

4.27.2参数说明

参数 类型 含义
code int 当 code 为0时,录制完成
fileid string 语音文件 url,录音在服务器存放 90 天
result string 转换的文本结果

4.27.3示例代码

  1. public override void onSpeechToTextCompleteCallback(int code, string fileid, string result)
  2. {
  3. //throw new System.NotImplementedException();
  4. if (code == 0)
  5. {
  6. Debug.LogWarning("转换成功");
  7. InputField field = transform.Find("convertTextResult").GetComponent<InputField>();
  8. field.text = result;
  9. //InputField audioInput = transform.Find("auditResult").GetComponent<InputField>();
  10. //audioInput.text = auditResult;
  11. }
  12. else
  13. {
  14. Debug.LogWarning("转换失败" + Convert.ToString(code));
  15. }
  16. }

4.28限制最大语音信息时长

限制最大语音消息的长度,最大支持58秒。

4.28.1函数原型

  1. public abstract int SetMaxMessageLength(int msTime);

4.28.2参数说明

参数 类型 含义
msTime int 语音时长,单位 ms,区间为 1000 < msTime < 58000

4.28.3代码示例

  1. LTGmeSDK.GetInstance().SetMaxMessageLength(58000);

5. SDK高级功能(可选)

5.1范围语音

使用范围语音,需要调用 SetRangeAudioTeamID 接口设置小队号 TeamID,再调用 EnterRoom 接口进入语音房间,即当进入语音房间时指定的 TeamID != 0 时,进入范围语音房间模式。
当进入范围语音房间时,有两种语音模式可供选择:

语音模式 参数名称 功能
所有人 RANGE_AUDIO_MODE_WORLD 设置后玩家附近一定范围的人都能听到该玩家讲话,但不影响小队成员互相通话
仅小队 RANGE_AUDIO_MODE_TEAM 仅队友可以听到

不同的语音模式下,其具体的声音可达情况如下:
a. 同一小队内,无论距离多远、玩家为何种语音状态都能听见。
b. 不同小队情况下,双方开启“所有人”的语音状态情况下,在距离内可以互相听见。

如果设置的语音模式为所有人(RANGE_AUDIO_MODE_WORLD),此时的语音可达范围受 UpdateAudioRecvRange 接口影响。
• 是否在语音距离范围内,不影响同一小队成员互相通话。
• 设置接收语音距离范围参考 API:UpdateAudioRecvRange。
• 支持在范围语音房间中实时切换语音模式。但不支持在房间内更换 TeamID,TeamID 必须在进房前指定。
• 使用范围语音,必须使用流畅音质进房(即 RoomType=1)。

使用流程
有别于普通小队语音房间,在使用范围语音能力时,必须使用流畅音质进房,且在调用 EnterRoom 之前,需调用以下两个 API:SetRangeAudioTeamID、 SetRangeAudioMode(房后可修改)。
在进房成功后,调用 UpdateAudioRecvRange(至少一次),及每帧调用 UpdateSelfPosition。

前提条件
必须在初始化 GME 之后,且正确调用了核心接口,例如每帧调用 Poll 函数。

5.1.1设置teamid

通过此方法设置队伍号,必须在 EnterRoom 之前调用。如果是退房后再进房,请在退房成功回调回来之后再调用设置队伍号接口。在退房时,此参数不会自动重置为0,所以一旦决定调用此语音模式,请在每次 EnterRoom 之前都调用此方法设置 TeamID。

5.1.1.1函数原型

  1. public abstract int SetRangeAudioTeamID(int teamID);

5.1.1.2参数说明

参数 类型 意义
teamID int 队伍号,专供范围语音中进行上下行音频流控制。当 TeamID 为0时,通话模式为普通小队语音,默认0。

5.1.1.3接口调用示例

  1. LTGmeSDK.GetInstance().SetRangeAudioTeamID(int.Parse(teamid));

5.1.2设置语音模式

通过此方法修改语音模式,可在进房前调用,也可在进房后调用。
在进房前调用此方法,方法将影响下一次进房。
在进房后调用此方法,将直接改变当前用户的语音模式。
在退房时,此参数不会自动重置为 MODE_WORLD,所以一旦决定调用此方法,请在每次 EnterRoom 之前都调用此方法设置语音模式

5.1.2.1函数原型

  1. public abstract int SetRangeAudioMode( int gameAudioMode);

5.1.2.2参数说明

参数 类型 意义
rangeAudioMode int 0(MODE_WORLD) 代表“所有人”,1(MODE_TEAM) 代表”仅小队”

5.1.2.3代码示例

  1. LTGmeSDK.GetInstance().SetRangeAudioMode(0)

5.1.3设置接收语音距离范围

通过此方法用于设置接收的语音范围(距离以游戏引擎为准),只支持在进房成功后调用。
此方法必须配合 UpdateSelfPosition 更新声源方位联合使用。
此方法只需调用一次即可生效。

5.1.3.1函数原型

  1. public abstract int UpdateAudioRecvRange(int range);

5.1.3.2参数说明

参数 类型 意义
range int 最大可以接收音频的范围,单位为引擎距离单位

5.1.3.3示例代码

  1. LTGmeSDK.GetInstance().UpdateAudioRecvRange(range);

5.1.4更新声源方位

更新声源方位,目的是告诉服务器本端位置,通过本端世界坐标+本端接收音频的范围,与其他端世界坐标+其他端接收音频的范围进行判断,达到范围语音效果。

此函数用于更新声源位置信息,只支持在进房成功后调用,且需要每帧调用,以 Unity 引擎为例,此接口需要在 Update 中调用。
使用范围语音一定要更新声源方位,如果不需要范围判断能力,也需要进房后调用此接口一次。
如果需要同时使用 3D 音效效果,此接口中的参数 axisForward、axisRight 及 axisUp 需要按照下文 3D 语音部分 进行设置。

5.1.4.1函数原型

  1. public abstract int UpdateSelfPosition(int[] position, float[] axisForward, float[] axisRight, float[] axisUp);

5.1.4.2参数说明

参数 类型 意义
position int[] 自身在世界坐标系中的坐标,顺序是前、右、上
axisForward float[] 在本产品中无需关注
axisRight float[] 在本产品中无需关注
axisUp float[] 在本产品中无需关注

5.1.4.3示例代码

  1. LTGmeSDK.GetInstance().UpdateSelfPosition(position, axisForward, axisRight, axisUp);

5.2 3D音效

如果3D音效结合范围语音 需要先初始化3D引擎 打开3D音效 再进行设置距离 更新方位

5.2.1初始化3D音效引擎

此函数用于初始化 3D 音效引擎,在进房后调用。在使用 3D 音效之前必须先调用此接口,只接收 3D 音效而不发出 3D 音效的用户也需要调用此接口。

5.2.1.1函数原型

  1. public abstract int InitSpatializer(string modelPath);

5.2.1.2函数原型

参数 类型 意义
modelPath string 3D 音效资源文件路径

5.2.1.3代码示例

  1. LTGmeSDK.GetInstance().InitSpatializer(filePath);

5.2.2开启或关闭3D音效

5.2.2.1函数原型

  1. public abstract int EnableSpatializer(bool enable, bool applyTeam);

5.2.2.2参数说明

参数 类型 意义
enable bool 开启之后可以听到 3D 音效
applyToTeam bool 3D语音是否作用于小队内部,仅 enble 为 true 时有效

5.2.2.3代码示例

  1. LTGmeSDK.GetInstance().EnableSpatializer(value, false);

5.2.3获取当前3D音效状态

5.2.3.1函数原型

  1. public abstract bool IsEnableSpatializer();

5.2.3.2代码示例

  1. bool result = LTGmeSDK.GetInstance().IsEnableSpatializer();

5.3 自定义音频转发路由

5.3.1设置音频转发规则

调用此接口设置音频转发规则,此接口在进房成功回调中调用,调用后此次进房生效,退房后失效。

注意
禁言功能 AddBlackList 为本端生效,优先级高于自定义音频路由。例如 A 通过 SetServerAudioRouteSendOperateType 设置了只听 B 说话,但是又调用了 AddBlackList 将B禁言,此时 A 将听不到 B 的声音。
使用前提
使用 GME 实时语音功能成功进入语音房间,并且打开了麦克风(EnableMic)、扬声器(EnableSpeaker)。

5.3.1.1接口原型

  1. int SetServerAudioRouteSendOperateType(int Sendtype, string[] sendArray, int Recvtype, string[] recvArray)

5.3.1.2参数说明

类型说明Sendtype
设置发送音频规则,不同的规则填入后,会有不同的发送规则。

接收类型 效果
1:AUDIO_ROUTE_NOT_SEND_TO_ANYONE 本端音频上行发送到后台,但后台不转发给任何人,相当于将自己静音,此时参数 OpenIDForSend 无效,只需填 null
2:AUDIO_ROUTE_SEND_TO_ALL 本端音频上行将转发给所有人,此时参数 OpenIDForSend 无效,只需填 null
3:AUDIO_ROUTE_SEND_BLACK_LIST 本端音频上行将不转发给黑名单的人,黑名单由参数 OpenIDForSend 提供
4:AUDIO_ROUTE_SEND_WHITE_LIST 本端音频上行将只转发给白名单的人,白名单由参数 OpenIDForSend 提供

说明:
如果类型传入 AUDIO_ROUTE_NOT_SEND_TO_ANYONE 以及 AUDIO_ROUTE_SEND_TO_ALL ,此时的参数 OpenIDForSend 不生效,只需要填 null。
如果类型传入 AUDIO_ROUTE_SEND_BLACK_LIST ,此时参数 OpenIDForSend 为黑名单列表,最多支持 10 个。
如果类型传入 AUDIO_ROUTE_SEND_WHITE_LIST ,此时参数 OpenIDForSend 为白名单列表,最多支持 10 个。

类型说明 Recvtype
设置接收音频规则,不同的规则填入后,会有不同的接收规则。

接收类型 效果
1:AUDIO_ROUTE_NOT_RECV_FROM_ANYONE 本端不接受任何音频,相当于关闭房间内扬声器效果,此时参数 OpenIDForSend 无效,只需填 null
2:AUDIO_ROUTE_RECV_FROM_ALL 本端接收所有人的音频,此时参数 OpenIDForSend 无效,只需填 null
3:AUDIO_ROUTE_RECV_BLACK_LIST 本端不接收黑名单的人的音频声音,黑名单由参数 OpenIDForSend 提供
4:AUDIO_ROUTE_RECV_WHITE_LIST 本端只接收白名单的人的音频声音,白名单由参数 OpenIDForSend 提供

说明:
如果类型传入 AUDIO_ROUTE_NOT_RECV_FROM_ANYONE 以及 AUDIO_ROUTE_RECV_FROM_ALL OpenIDForSend 不生效。
如果类型传入 AUDIO_ROUTE_RECV_BLACK_LIST ,此时参数 OpenIDForSend 为黑名单列表,最多支持 10 个。
如果类型传入 AUDIO_ROUTE_RECV_WHITE_LIST ,此时参数 OpenIDForSend 为白名单列表,最多支持 10 个。

5.3.1.3示例代码

  1. int ret = LTGmeSDK.GetInstance().SetServerAudioRouteSendOperateType(sendtype, sendArray, recvtype, recvArray);
  2. if (ret != 0){
  3. Debug.LogWarning(string.Format("SetServerAudioRouteSendOperateType, error ={0}", ret));
  4. }

回调处理

  1. public override void onServerAudioRouteEventCallback(int result, string error_info, int sub_type)
  2. {
  3. //throw new System.NotImplementedException();
  4. }

5.3.2获取音频设置转发规则

调用此接口获取音频转发规则。调用后接口返回规则,传入的数组参数会返回相应规则的 openId。

5.3.2.1接口示例

  1. int ret1 = LTGmeSDK.GetInstance().GetCurrentSendAudioRoute(sendArray);
  2. Debug.LogWarning("GetCurrentSendAudioRoute = "+ ret1);
接收类型(int) 效果
1:AUDIO_ROUTE_NOT_SEND_TO_ANYONE 本端音频上行发送到后台,但后台不转发给任何人,相当于将自己静音
2:AUDIO_ROUTE_SEND_TO_ALL 本端音频上行将转发给所有人
3:AUDIO_ROUTE_SEND_BLACK_LIST 本端音频上行将不转发给黑名单的人
4:AUDIO_ROUTE_SEND_WHITE_LIST 本端音频上行将只转发给白名单的人
0:AUDIO_ROUTE_RECV_INQUIRE_ERROR 获取出错,检查是否进入房间,是否已经初始化 SDK
  1. int ret2 = LTGmeSDK.GetInstance().GetCurrentRecvAudioRoute(recvArray);
  2. Debug.LogWarning("GetCurrentRecvAudioRoute = "+ ret2);
接收类型(int) 效果
1:AUDIO_ROUTE_NOT_RECV_FROM_ANYONE 本端不接受任何音频,相当于关闭房间内扬声器效果
2:AUDIO_ROUTE_RECV_FROM_ALL 本端接收所有人的音频
3:AUDIO_ROUTE_RECV_BLACK_LIST 本端不接收黑名单的人的音频声音
4:AUDIO_ROUTE_RECV_WHITE_LIST 本端只接收白名单的人的音频声音
0:AUDIO_ROUTE_RECV_INQUIRE_ERROR 获取出错,检查是否进入房间,是否已经初始化 SDK

5.4语音变声音效

5.4.1实时语音变声

使用前提
使用 GME 实时语音功能成功进入语音房间,并且打开了麦克风(EnableMic)。
变声接口
调用 SetVoiceType 接口设置变声特效,接口返回0代表调用成功,房间内的人听到的本端发出的声音带有变声效果。

5.4.1.1函数原型

  1. public static int VOICE_TYPE_ORIGINAL_SOUND = 0; /// 原声
  2. public static int VOICE_TYPE_LOLITA = 1; /// 萝莉
  3. public static int VOICE_TYPE_UNCLE = 2; /// 大叔
  4. public static int VOICE_TYPE_INTANGIBLE = 3; /// 空灵
  5. public static int VOICE_TYPE_DEAD_FATBOY = 4; /// 死肥宅
  6. public static int VOICE_TYPE_HEAVY_MENTAL = 5; /// 重金属
  7. public static int VOICE_TYPE_DIALECT = 6; /// 歪果仁
  8. public static int VOICE_TYPE_INFLUENZA = 7; /// 感冒
  9. public static int VOICE_TYPE_CAGED_ANIMAL = 8; /// 困兽
  10. public static int VOICE_TYPE_HEAVY_MACHINE = 9; /// 重机器
  11. public static int VOICE_TYPE_STRONG_CURRENT = 10; /// 强电流
  12. public static int VOICE_TYPE_KINDER_GARTEN = 11; /// 幼稚园
  13. public static int VOICE_TYPE_HUANG = 12; /// 小黄人
  14. public abstract int SetVoiceType(int voiceType);

5.4.1.2示例代码

  1. LTGmeSDK.GetInstance().SetVoiceType(voicevalue);

5.4.2语音消息变声

语音消息变声不会影响原始的音频信息,在播放的时候才体现变声效果。
语音消息播放
语音消息播放接口,带有变声效果参数。

5.4.2.1函数原型

  1. public abstract int PlayRecordedFile(string filePath,int voiceType);

5.4.2.2参数说明

参数 类型 意义
filePath string 本地语音文件的路径
voicetype int 变声类型

5.4.2.3示例代码

  1. LTGmeSDK.GetInstance().PlayRecordedFileVoiceType(fileToPlay, vocicetype);

5.5 GME 房间管理功能接入

通过客户端房间管理接口,可以简单实现对房间内成员的管理、以及对房间内成员上下麦的管理。

5.5.1采集管理相关接口

采集管理接口包含麦克风管理、音频上行管理以及采集硬件设备管理。其中麦克风管理相当于音频上行管理加上采集硬件设备管理,区分出音频数据传输上下行与硬件设备的管理,是因为打开或者关闭采集设备,将会伴随整个设备(采集和播放)重启,如果此时 App 正在播放背景音乐,那么背景音乐的播放也会被中断。利用控制上下行的方式来实现开关麦克风效果,将不会中断播放设备。

5.5.1.1.1麦克风管理

调用此接口打开或关闭房间内某用户的麦克风,调用成功后,该用户的麦克风将被关闭或打开。
EnableMic 相当于同时调用 EnableAudioSend 及 EnableAudioCaptureDevice。

5.5.1.1.2函数原型
  1. public abstract int RoomManagerEnableMic(bool isEnabled, string receiverID)
5.5.1.1.3参数说明
参数 类型 意义
enable bool 打开或者关闭
receiverID string 接收方openId
5.5.1.1.4示例代码
  1. LTGmeSDK.GetInstance().RoomManagerEnableMic(true, "openid");
5.5.1.1.5回调

回调函数中OperateType为4

5.5.1.2.1音频上行管理

调用此接口打开或关闭房间内某用户的音频上行。调用成功后,该用户的音频上行将被关闭或打开,但不影响麦克风采集。

5.5.1.2.2函数原型
  1. public abstract int RoomManagerEnableAudioSend(bool isEnabled, string receiverID)
5.5.1.2.3参数说明
参数 类型 意义
enable bool 打开或者关闭
receiverID string 接收方openId
5.5.1.2.4示例代码
  1. LTGmeSDK.GetInstance().RoomManagerEnableAudioSend(true, "openid");
5.5.1.2.5回调

回调函数中OperateType为2

5.5.1.3.1音频采集硬件设备管理

调用此接口打开或关闭房间内某用户的音频采集硬件设备。调用成功后,该用户的音频采集硬件设备将被关闭或打开,但不影响上行。

5.5.1.3.2函数原型
  1. public abstract int RoomManagerEnableAudioCaptureDevice(bool isEnabled, string receiverID)
5.5.1.3.3参数说明
参数 类型 意义
enable bool 打开或者关闭
receiverID string 接收方openId
5.5.1.3.4示例代码
  1. LTGmeSDK.GetInstance().RoomManagerEnableAudioCaptureDevice(true, "openid");
5.5.1.3.5回调

回调函数中OperateType为0

5.5.2播放管理相关接口

播放管理接口包含扬声器管理、音频下行管理以及播放硬件设备管理。其中扬声器管理相当于音频下行管理加上播放硬件设备管理。区分出音频数据传输上下行与硬件设备的管理,是因为打开或者关闭采集设备,将会伴随整个设备(采集及播放)重启,如果此时 App 正在播放背景音乐,那么背景音乐的播放也会被中断。利用控制上下行的方式来实现开关麦克风效果,不会中断播放设备。

5.5.2.1.1扬声器管理

调用此接口打开或关闭房间内某用户的扬声器。调用成功后,该用户的扬声器将被关闭或打开,听到房间内的音频声音。
EnableSpeaker 相当于同时调用 EnableAudioRecv 及 EnableAudioPlayDevice。

5.5.2.1.2函数原型
  1. public abstract int RoomManagerEnableSpeaker(bool isEnabled, string receiverID)
5.5.2.1.3参数说明
参数 类型 意义
enable bool 打开或者关闭
receiverID string 接收方openId
5.5.2.1.4示例代码
  1. LTGmeSDK.GetInstance().RoomManagerEnableSpeaker(true, "openid");
5.5.2.1.5回调

回调函数中OperateType为5

5.5.2.2.1音频下行管理

调用此接口打开或关闭房间内某用户的音频下行。调用成功后,该用户的音频下行将被关闭或打开,但不影响播放设备。

5.5.2.2.2函数原型
  1. public abstract int RoomManagerEnableAudioRecv(bool isEnabled, string receiverID)
5.5.2.2.3参数说明
参数 类型 意义
enable bool 打开或者关闭
receiverID string 接收方openId
5.5.2.2.4示例代码
  1. LTGmeSDK.GetInstance().RoomManagerEnableAudioRecv(true, "openid");
5.5.2.2.5回调

回调函数中OperateType为3

5.5.2.3.1音频播放硬件设备管理

调用此接口打开或关闭房间内某用户的音频播放硬件设备。调用成功后,该用户的音频播放硬件设备将被关闭或打开,但不影响下行。

5.5.2.3.2函数原型
  1. public abstract int RoomManagerEnableAudioPlayDevice(bool isEnabled, string receiverID)
5.5.2.3.3参数说明
参数 类型 意义
enable bool 打开或者关闭
receiverID string 接收方openId
5.5.2.3.4示例代码
  1. LTGmeSDK.GetInstance().RoomManagerEnableAudioPlayDevice(true, "openid");
5.5.2.3.5回调

回调函数中OperateType为1

5.5.3获取成员状态接口

5.5.3.1.1获取某人麦克风状态

调用此接口,获取房间内某成员的麦克风状态。

5.5.3.1.2函数原型
  1. public abstract int RoomManagerGetMicState(string receiverID)
5.5.3.1.3参数说明
参数 类型 意义
receiverID string 接收方openId
5.5.3.1.4示例代码
  1. LTGmeSDK.GetInstance().RoomManagerGetMicState("openid")
5.5.3.1.5回调

回调函数中OperateType为6

5.5.3.2.1获取某人扬声器状态

调用此接口,获取房间内某成员的麦克风状态。

5.5.3.2.2函数原型
  1. public abstract int RoomManagerGetSpeakerState(string receiverID)
5.5.3.2.3参数说明
参数 类型 意义
receiverID string 接收方openId
5.5.3.2.4示例代码
  1. LTGmeSDK.GetInstance().RoomManagerGetSpeakerState("openid")
5.5.3.2.5回调

回调函数中OperateType为7

5.5.3.3.1禁止某位成员操作麦克风及扬声器

成员进房默认为允许操作麦克风及扬声器,调用此接口可以禁止房间内的某位成员操作麦克风及扬声器,在该成员退出房间后此功能失效。

5.5.3.3.2函数原型
  1. public abstract int RoomManagerForbidUserOperation(bool isEnabled, string receiverID)
5.5.3.3.3参数说明
参数 类型 意义
enable bool true:禁止某用户操作设备,false:允许某用户操作设备
receiverID string 填入目标用户 OpenId
5.5.3.3.4示例代码
  1. LTGmeSDK.GetInstance().RoomManagerForbidUserOperation(true, "openid")
5.5.3.3.5回调

回调函数中OperateType为8

5.5.4回调处理

5.5.4.1函数原型
  1. public abstract void onRoomManagementOperator(string SenderID,string ReceiverID,string UUID, int OperateType, bool OperateValue, int Result);
5.5.4.2参数说明
参数 类型 意义
SenderID string 事件发送者 ID,如果与自己 OpenId 相同,即为本端发送的命令
ReceiverID string 事件接收者 ID,如果与自己 OpenId 相同,即为本端接收的命令
UUID string UUID
OperateType int 事件类型
Result int 事件结果,0为成功
OperateValue bool 命令详情

OperateType

数值 意义
0 控制采集设备硬件回调
1 控制播放设备硬件回调
2 控制上行回调
3 控制下行回调
4 控制麦克风回调
5 控制扬声器回调
6 获取麦克风状态
7 获取扬声器状态
8 禁止操作麦克风及扬声器事件
5.5.4.3示例代码
  1. public override void onRoomManagementOperator(string SenderID, string ReceiverID, string UUID, int OperateType, bool OperateValue, int Result)
  2. {
  3. //throw new NotImplementedException();
  4. transform.Find("Canvas/rmCallBackText").GetComponent<Text>().text = "senderid :" + SenderID + " receicerid: " + ReceiverID + " uuid: " + UUID + " operatetype: " + OperateType + " operateValue: " + OperateValue + " result : " + Result;
  5. }

获取版本号(可选)

获取 SDK 版本号,用于分析。

函数原型

  1. public abstract string GetSDKVersion();

示例代码

  1. LTGmeSDK.GetInstance().GetSDKVersion()

设置打印日志等级(可选)

用于设置打印日志等级。建议保持默认等级。需要在 Init 之前调用。

函数原型

  1. public abstract int SetLogLevel(int levelWrite, int levelPrint);
  2. public static int LOG_LEVEL_NONE = -1; //不打印日志
  3. public static int LOG_LEVEL_ERROR = 1; //打印错误日志(默认)
  4. public static int LOG_LEVEL_INFO = 2; //打印提示日志
  5. public static int LOG_LEVEL_DEBUG = 3; //打印开发调试日志
  6. public static int LOG_LEVEL_VERBOSE = 4; //打印高频日志

示例代码

  1. LTGmeSDK.GetInstance().SetLogLevel(2, 2);

设置打印日志路径(可选)

用于设置打印日志路径。默认路径如下。需要在 Init 之前调用。

平台 路径
Windows %appdata%\Tencent\GME\ProcessName
iOS Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents
Android /sdcard/Android/data/xxx.xxx.xxx/files
Mac /Users/username/Library/Containers/xxx.xxx.xxx/Data/Documents

函数原型

  1. public abstract int SetLogPath(string logDir);

参数说明

参数 类型 含义
logDir String 路径

示例代码

  1. LTGmeSDK.GetInstance().SetLogPath(Application.persistentDataPath);

获取诊断信息(可选)

获取音视频通话的实时通话质量的相关信息。该接口主要用来查看实时通话质量、排查问题等,业务侧可以忽略。

函数原型

  1. public abstract string GetQualityTips();

示例代码

  1. LTGmeSDK.GetInstance().GetQualityTips()