手游交互性的地位


从2015年网易的《梦幻西游》、《大话西游》到近期出的各种《XX传奇》,手机游戏的交互被提到了越来越高的地位。手机游戏不再是那种“快餐”,不再是单纯地比较玩法,越来越多的MMO大作一一上线,手游不再是“打单机”,交互性变得越来越强。很多手游都需要加入聊天功能,而随着微信的流行,语音聊天也越来越被玩家重视,玩家更希望手游里有类似微信的体验。



Unity语音聊天系统选择


对于一个大团队或者有研发精力的团队,完全可以自己开发一套语音聊天系统,包括录音、音频压缩、传输、储存、下载、播放等等功能。如果没有很大的精力或者研发周期比较短,完全可以先使用第三方的语音聊天插件,来满足设计者和用户的需求。

在笔者调研第三方语音的过程中找到了两款第三方语音插件:

  呀呀语音

  亲加云语音

介绍


两个语音都提供了语音聊天和语音翻译功能(由于笔者主要是面向国内的游戏,只测试了中文语音识别,两者都比较准确),都提供亚马逊云服务器,国内或者海外的项目都可以使用。插件涵盖的平台都比较广,包括Unity、Cocos、Android、IOS。无论是应用还是游戏引擎都可以很方便的将语音插件集成。


两者优点:


  1. 语音文件的压缩比较好,使用的是amr格式的音频文件30秒的音频文件大小在50k左右
  2. 语音识别比较准确
  3. 不需要再关心传输过程
  4. 在Android平台上很流畅,没有卡顿问题

亲加语音的缺点:

  1. 在IOS平台下,开始录音和结束录音两个接口在调用过程中会卡顿。
  2. 在IOS平台下,静音模式下,开始录音和结束录音接口调用时都会造成Unity游戏背景音播放。原因可能是Auido Session的设置问题
  3. 技术支持的态度不是很好,一个卡顿问题笔者他们的技术支持沟通了3天,前期他们并不承认自己的卡顿事实,而且最终给我的答复是无法解决。




呀呀语音的缺点:


  1. 在IOS平台下,开始录音接口会造成短暂卡顿(比亲加语音的卡顿要小)


接入过程



笔者最终选择接入的第三方语音插件是呀呀语音。下面笔者详细介绍下呀呀语音的接入过程。

1.下载官方demo

登录呀呀语音的下载界面直接下载官方demo的压缩包

2.压缩包内容

压缩包内包含一份很详细的说明文档,一份接入流程图,一个Demo和一个正式接入用的.unitypackage。

下面主要介绍官方的Demo和一些重要的接口,不同的应项目会有不同的逻辑实现,具体怎么利用笔者就不在此赘述。

3.Demo介绍

1)unity package导入

建立一个新的unity工程,工程路径不要有任何中文出现

双击yunva_imsdk_v1.0.3.214_20151021_u3d_demo.unitypackage全部导入

2)测试场景介绍

一共有两个测试场景 LBS_Demo为OnGUI写的一个demo,YunvaUIManager是呀呀写的一个简易聊天项目的demo,可以分别设置为启动项打包看下。

4.常用接口介绍

1)初始化 、登录

2)开始录音

YunVaImSDK.instance.RecordStartRequest(filePath);

3)结束录音

YunVaImSDK.instance.RecordStopRequest(StopRecordResponse);
 private void  StopRecordResponse(ImRecordStopResp data)
    {
        if(!string.IsNullOrEmpty(data.strfilepath))
        {
			recordPath=data.strfilepath;
			labelText = "停止录音返回:"+recordPath;
			Debug.Log("停止录音返回:"+recordPath);
        }
    }

4)翻译语音

//通过翻译接口可以获得本地音频文件的语音翻译和该语音文件的网络资源url,这个url可以传给别的用户,通过播放接口播放
//recordPath为本地录音文件路径 
YunVaImSDK.instance.SpeechStartRequest(recordPath,"", (data3) =>
			                                        { 
				if(data3.result==0)
				{
					labelText = "识别成功,识别内容:" + data3.text;
<span >					</span>labelText = "网络音频的url:" + data3.url;
				}
				else
				{
					labelText = "识别失败,原因:" + data3.msg;
				}
			} );

5)播放url

Debug.Log("urlfilepath:"+urlfilepath);
YunVaImSDK.instance.RecordStartPlayRequest("", urlfilepath, "", (data2) =>
			                                           {
				if (data2.result == 0)
				{
					Debug.Log("播放成功");
					labelText = "播放成功";
				}
				else
				{
					Debug.Log("播放失败");
					labelText = "播放失败";
				}
			});



6)下载url文件

结束语


至此一款第三方语音插件介绍完毕,可以根据项目需求开始制作语音功能了。