【Unity】 HTFramework框架(二十八)Speech語音合成、語音識別

更新日期:2019年12月30日。
Github源碼:[點我獲取源碼]

Speech語音合成、語音識別簡介

對接百度AI開放平臺,封裝的語音技術接口。

使用Speech

語音合成

設置TOKEN

語音合成需要鑑權認證的通行令牌TOKEN,登錄百度AI開放平臺控制檯,通過新建應用獲取應用的APIKEYSECRETKEY,在任意初始化位置設置這兩個key:

        Speecher.SetAPIKEY("你的應用APIKEY");
        Speecher.SetSECRETKEY("你的應用SECRETKEY");

然後在調用語音合成接口前,必須先生成TOKEN(一個TOKEN的有效期是30天,失效後必須重新生成):

		Speecher.GenerateTOKEN();

由於上文的生成TOKEN的接口無法跨域,所以在WebGL平臺無效,所以我們只能在外部生成TOKEN再賦值給Speecher:

        Speecher.SetTOKEN("外部生成的TOKEN");

自定義合成規則

語音合成可以自定義合成規則,在合成規則內,你可以強制定義任何字的發音,比如如下定義一個合成規則:

        //自定義合成規則
        SynthesisRule rule = new SynthesisRule();
        //定義 大 字的發音爲 xiao ,2 聲
        rule.AddCustomTone("大", "xiao", 2);
        //定義 小 字的發音爲 da ,4 聲
        rule.AddCustomTone("小", "da", 4);

開始合成

設置了TOKEN之後便可以直接合成語音了,調用如下接口:

	private IEnumerator Start()
	{
        Speecher.SetAPIKEY("你的應用APIKEY");
        Speecher.SetSECRETKEY("你的應用SECRETKEY");

		//等待生成TOKEN完成
        yield return Speecher.GenerateTOKEN();

        //合成語音,如有自定義合成規則,可以傳入合成規則
        Speecher.Synthesis("您好,百度!", SynthesisSucceed, SynthesisFailed);
    }
	
	private void SynthesisSucceed(AudioClip clip)
	{
        //語音合成成功,播放合成結果
        Main.m_Audio.PlayMultipleSound(clip);
	}

    private void SynthesisFailed()
    {
        GlobalTools.LogWarning("語音合成失敗,請查看控制檯日誌!");
    }

語音合成爲異步操作,可以通過yield return語句等待合成完成,以達到同步效果,但必須在協程方法體內:

    private IEnumerator Synthesis()
    {
        //合成語音
        yield return Speecher.Synthesis("您好,百度!", SynthesisSucceed, SynthesisFailed);

        GlobalTools.LogInfo("語音合成完畢!");
    }

編輯器內語音合成

通過如下菜單打開編輯器語音合成測試面板:
在這裏插入圖片描述
在這裏插入圖片描述
在面板輸入你的APIKEY和SECRETKEY,點擊Generate按鈕生成TOKEN,然後輸入待合成的文本,以及選擇一些合成參數,點擊下方的Synthesis按鈕便可以將文本合成爲語音文件。

目前已支持官方更新的所有精品發音人:
在這裏插入圖片描述

語音識別

設置TOKEN

語音識別需要鑑權認證的通行令牌TOKEN,與語音合成共用一個TOKEN。

開始識別

設置了TOKEN之後便可以直接識別語音了,調用如下接口:

    IEnumerator RecognitionTest()
    {
        AudioClip clip = null;

        //加載音頻文件
        yield return Main.m_Resource.LoadAsset<AudioClip>(new AssetInfo("audio", "Assets/Audio/Test.wav", ""), null, (c) => { clip = c; });

        //語音識別
        yield return Speecher.Recognition(clip, RecognitionSucceed, RecognitionFailed);
    }

    private void RecognitionSucceed(string text)
    {
        //語音識別成功
        GlobalTools.LogInfo("語音識別成功:" + text);
    }

    private void RecognitionFailed()
    {
        GlobalTools.LogWarning("語音識別失敗,請查看控制檯日誌!");
    }
發佈了163 篇原創文章 · 獲贊 392 · 訪問量 107萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章