【玩转腾讯云】游戏多媒体引擎的体验与开发(二)

通过游戏多媒体引擎的sdk做一个属于自己的实时语音转文字.

如何启用?

在腾讯云中搜索"游戏多媒体引擎",第一个,打开之后会加入到控制台,

我们这次直接使用sdk,不再去看demo,直接下载他的SDK来用.

所以我们直接去下载这个sdk,导入到unity中来

注意,这里是sdk下载,不是demo了.下载好了之后还需要解压一下,新建一个unity工程 ,直接将sdk放到Asset文件夹下.

我们再搭建一个属于自己的UI界面,注意看下图,如果不会搭建的话,建议unity入一下门.

然后,新建一个用于写功能的脚本,这个脚本用来登录用户,按下按钮后可以上传声音片段再把识别好后的文字显示在界面上.好,我们还需要新建一个controller物体用来挂载该脚本:层级与格式如下图:

打开脚本,首先第一步要初始化SDK.代码如下:

int ret = ITMGContext.GetInstance().Init(sdkAppId, openID);
//通过返回值判断是否初始化成功
if (ret != QAVError.OK)
    {
        Debug.Log("SDK初始化失败:"+ret);
        return;
    }
 else 
    {
    Debug.Log ("初始化成功!");
    }
    

这个写在脚本初始化的时候,也就是说你可以写在Awake中也可以写在Start中,只要可以初始化就可以.我们还需要声明一下Appid和OpenID,我们直接声明为Public,然后直接赋值.

public string sdkAppid;
public string openID;
public string AuthKey;

然后在面板中直接赋值:

做到这里,SDK初始化就完成了,这就表示,我们可以开发实际的功能了,接入腾讯云的SDK自己做的事情就这么一点儿.学习起来的成本还是比较少的.建议大家可以看看这个.

然后我们测试运行一下,发现实例化已经成功:

然后我们还要把demo里面的一个名为:EnginePollHelper.cs放到项目中来.因为使用这个脚本之后,许多功能也不用我们自己写,又省了许多事.

还需要新建一个userConfig.cs脚本,这个脚本的作用就是用来记录一些登录相关信息的.那么这个userConfig不需要挂载,只是一个记录的类,所以不用继承自Monobehaviour.


class UserConfig
{
    public static string GetExperientialAppID()
    {
        return GetAppID();
    }

    public static string GetExperientialauthkey()
    {
        return GetAuthKey();
    }

    public static bool GetTestEnv() {
		return PlayerPrefs.GetInt("TestEnv", 0) != 0;
	}
	
	public static void SetTestEnv(bool test) {
		PlayerPrefs.SetInt("TestEnv", test ? 1 : 0);
	}
     
    public static string GetAppID() {
        return PlayerPrefs.GetString("AppID", "你自己控制台上的appid");
	}

    public static string GetAuthKey()
    {
        return PlayerPrefs.GetString("AuthKey", "你自己控制台上的密钥");
    }

    public static void SetAuthKey(string AuthKey)
    {
        PlayerPrefs.SetString("AuthKey", AuthKey);
    }

    public static void SetAppID(string appID) {
		PlayerPrefs.SetString("AppID", appID);
	}

	public static string GetUserID() {
		int randomUId = UnityEngine.Random.Range(12345, 22345);
		return PlayerPrefs.GetString("UserID", randomUId.ToString() );
	}

	public static void SetUserID(string userID) {
		PlayerPrefs.SetString("UserID", userID);
	}


    public static string GetRoomID() {
		return PlayerPrefs.GetString("strRoomID", "banana");
	}

	public static void SetRoomID(string roomID) {
		PlayerPrefs.SetString("strRoomID", roomID);
	}

	public static ITMGRoomType GetRoomType() {
		return (ITMGRoomType)PlayerPrefs.GetInt("RoomType", 1);
	}

	public static void SetRoomType(ITMGRoomType roomtype) {
		PlayerPrefs.SetInt("RoomType", (int)roomtype);
	}

	public static byte[] GetAuthBuffer(string sdkAppID, string userID, string roomID,string authKey)
	{
        string key = "";
        key = authKey;
        return QAVAuthBuffer.GenAuthBuffer(int.Parse(sdkAppID), roomID, userID, key);
	}
}

放进来之后,我们还需要在这些脚本中引入一个命名空间:"TencentMobileGaming".

回过头来test脚本,里面还需要在star中写上:

UserConfig.SetAppID(sdkAppid );
UserConfig.SetUserID(openID);
UserConfig.SetAuthKey(AuthKey);
 byte[] authBuffer = UserConfig.GetAuthBuffer(UserConfig.GetAppID(), UserConfig.GetUserID(), null,UserConfig.GetAuthKey());

这就表示,没发送一条数据到腾讯云了,就会带上这些信息,就是服务器做个校验,可以这么简单的理解一下.

然后最重要的一句代码:

ITMGContext.GetInstance ().GetPttCtrl ().ApplyPTTAuthbuffer(authBuffer);

还有一句需要检测客户端的麦克风是否在启用状态,同样写在start方法中

 int retCode = (int)ITMGContext.GetInstance ().CheckMicPermission ();
        Debug.Log (string.Format ("Check permission Code is {0}",retCode));

做完这些,我们尝试运行一下:

这就表示我们代码运行正常,现在来写一些按下按钮开始录制和停止录制的功能.

我们先写声明两个按钮与它的功能:

public Button btn_speak;
public Button btn_stop;

public void btn_SpeakClick ()
{
btn_speak.GetCompontInChildren<Text>.text= "录制中...";
}
public void btn_StopClick ()
{
btn_stop.GetCompontInChildren<Text>.text = "开始录音";
}

然后在面板中为按钮赋值,并且把方法对于的注册到按钮的点击事件中

上面的一句话是很基础的东西,如果看不明白建议unity入个门.

好的,接下来就要在这个按钮中写具体的方法了.首先是开始录音,因为这个是一边说话一边录音,所以,参照demo中的写法,我们这里设置应该是"流式",语言是中国大陆普通话. 暂存的地址也要设置,所以代码中还需要这样写:

   string speechLanguage = "cmn-Hans-CN";//这个就代表普通话 (中国大陆)
  string recordPath = Application.persistentDataPath + string.Format("/{0}.silk", sUid++);
  if (ret != 0)
		{
			OnStreamingRecComplete(-1, "","","");
		}

这个是代表流式录音暂时存在的本地地址,

录音不是直接往腾讯云上发送的,首先是存在本地,然后通过内存,发往网络.

然后还要写下OnStreamingRecComplete的方法:

void OnStreamingRecComplete(int code, string fileid, string filePath, string result){
		if (code == 0)
		{ 
			field.text = result;
			Debug.Log("录制完成");
		}
		else if(code == -1)
		{
			Debug.Log("录制失败:流式正在录制中" );
		}
		else
		{ 
			if (code == 4103)
			{
				Debug.Log("录制时长太短");
			}
			else if (code == 32775)
			{
				Debug.Log(" 上传和翻译失败但是录音成功"); 
				field.text = filePath;
			}
			else if (code == 32777)
			{
				Debug.Log(" 翻译失败但是录音和上传成功");
				field.text = fileid;

			}
			else
			{
				Debug.Log("录制失败:" + Convert.ToString(code));
			}
		}
	}

这表示流式的语音录制每一个阶段会有一段服务器的判断返回,如果流式数据没有问题是会返回具体识别到的文字.

然后再把停止录制的按钮功能补全.

 ITMGContext.GetInstance().GetPttCtrl().StopRecording();

那么这样,看起来功能已经写完了,但是还没有.

还需要写上2个委托方法.

ITMGContext.GetInstance().GetPttCtrl().OnStreamingSpeechComplete += new QAVStreamingRecognitionCallback (OnStreamingRecComplete);
        ITMGContext.GetInstance().GetPttCtrl().OnStreamingSpeechisRunning += new QAVStreamingRecognitionCallback (OnStreamingRecisRunning);

将委托方法写全

(int code, string fileid, string filePath, string result){
		if (code == 0)
		{
			 
			field.text = result;
			
			Debug.Log("录制完成");
		}
		else if(code == -1)
		{
			
			Debug.Log("录制失败:流式正在录制中" );
		}
		else
		{
			Debug.Log(mStreamBtn, "流式");

			if (code == 4103)
			{
				Debug.Log("录制时长太短");
			}
			 
			 
			else
			{
				
				Debug("录制失败:" + Convert.ToString(code));
			}
		}
	}

void OnStreamingRecisRunning(int code, string fileid, string filePath, string result){
        if (code == 0)
        { 
            field.text = result; 
        }
        
    }

好了,到这里,功能就已经写完了,我们现在可以尝试运行一下,按下开始录音可以看到界面上实时的出现文字:

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
【玩转腾讯云】游戏多媒体引擎的体验与开发(二)
注意,这里是sdk下载,不是demo了.下载好了之后还需要解压一下,新建一个unity工程 ,直接将sdk放到Asset文件夹下.
<<上一篇
下一篇>>