前言

本篇文章演示在unity引擎中接入百度语音API的语音合成(适用于Windows平台,其它平台的后续更新)
因为在上一篇发布的文章中已经有一些准备步骤,这一篇就直接进入正题。
(1)搭建好一个UI面板

(2)编写脚本
①获取Access Token的方式和语音识别一样,这里我直接复制过来

/// <summary>/// 获取accessToken请求令牌/// </summary>/// <returns></returns>IEnumerator _GetAccessToken(){var uri =string.Format("https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id={0}&client_secret={1}",api_key, secret_Key);UnityWebRequest unityWebRequest = UnityWebRequest.Get(uri);yield return unityWebRequest.SendWebRequest();if (unityWebRequest.isDone){Match match = Regex.Match(unityWebRequest.downloadHandler.text, @"access_token.:.(.*?).,");if (match.Success){Debug.Log("Token已经匹配");accessToken = match.Groups[1].ToString();}else{Debug.Log("验证错误,获取AccessToken失败!!!");}}}

然后就编写代码直接调用接口进行语音合成

/// <summary>/// 请求语音合成/// </summary>/// <param name="text"></param>/// <param name="callback"></param>/// <returns></returns>public IEnumerator StratTTS(string text, Action<TtsResponse> callback){var url = "http://tsn.baidu.com/text2audio";var param = new Dictionary<string, string>();param.Add("tex", text);param.Add("tok", accessToken);param.Add("cuid", SystemInfo.deviceUniqueIdentifier);param.Add("ctp", "1");param.Add("lan", "zh");param.Add("spd", "5");param.Add("pit", "5");param.Add("vol", "10");param.Add("per", "1");
#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWPparam.Add("aue", "6"); //Windows设置为wav格式,移动端需要mp3格式
#endifint i = 0;foreach (var p in param){url += i != 0 ? "&" : "?";url += p.Key + "=" + p.Value;i++;}
#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWP  //根据不同平台,获取不同类型的音频格式var www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.WAV);
#elsevar www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.MPEG);
#endifDebug.Log("[WitBaiduAip]" + www.url);yield return www.SendWebRequest();if (www.isHttpError || www.isNetworkError)Debug.LogError(www.error);else{var type = www.GetResponseHeader("Content-Type");Debug.Log("[WitBaiduAip]response type: " + type);if (type.Contains("audio")){var response = new TtsResponse { clip = DownloadHandlerAudioClip.GetContent(www) };callback(response);}else{var textBytes = www.downloadHandler.data;var errorText = Encoding.UTF8.GetString(textBytes);}}}

对返回的语音进行播放

StartCoroutine(StratTTS(ttsText.text, s =>{source.clip = s.clip;source.Play();}));

全篇的代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;public class TTS : MonoBehaviour
{//自行填写自己的百度语音识别相关keypublic string api_key;public string secret_Key;string accessToken = string.Empty;Button StartTTS;InputField ttsText;AudioSource source;void Start(){StartTTS = GameObject.Find("Canvas/Start").GetComponent<Button>();ttsText = GameObject.Find("Canvas/panel/tts").GetComponent<InputField>();source = transform.GetComponent<AudioSource>();StartCoroutine(_GetAccessToken());StartTTS.onClick.AddListener(()=> {StartCoroutine(StratTTS(ttsText.text, s =>{source.clip = s.clip;source.Play();}));});}/// <summary>/// 返回的语音合成结果/// </summary>public class TtsResponse{public int error_index;public string error_msg;public string sn;public int idx;public bool Success{get { return error_index == 0; }}public AudioClip clip;}/// <summary>/// 请求语音合成/// </summary>/// <param name="text"></param>/// <param name="callback"></param>/// <returns></returns>public IEnumerator StratTTS(string text, Action<TtsResponse> callback){var url = "http://tsn.baidu.com/text2audio";var param = new Dictionary<string, string>();param.Add("tex", text);param.Add("tok", accessToken);param.Add("cuid", SystemInfo.deviceUniqueIdentifier);param.Add("ctp", "1");param.Add("lan", "zh");param.Add("spd", "5");param.Add("pit", "5");param.Add("vol", "10");param.Add("per", "1");
#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWPparam.Add("aue", "6"); //Windows设置为wav格式,移动端需要mp3格式
#endifint i = 0;foreach (var p in param){url += i != 0 ? "&" : "?";url += p.Key + "=" + p.Value;i++;}
#if UNITY_STANDALONE || UNITY_EDITOR || UNITY_UWP  //根据不同平台,获取不同类型的音频格式var www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.WAV);
#elsevar www = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.MPEG);
#endifDebug.Log("[WitBaiduAip]" + www.url);yield return www.SendWebRequest();if (www.isHttpError || www.isNetworkError)Debug.LogError(www.error);else{var type = www.GetResponseHeader("Content-Type");Debug.Log("[WitBaiduAip]response type: " + type);if (type.Contains("audio")){var response = new TtsResponse { clip = DownloadHandlerAudioClip.GetContent(www) };callback(response);}else{var textBytes = www.downloadHandler.data;var errorText = Encoding.UTF8.GetString(textBytes);}}}/// <summary>/// 获取accessToken请求令牌/// </summary>/// <returns></returns>IEnumerator _GetAccessToken(){var uri =string.Format("https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id={0}&client_secret={1}",api_key, secret_Key);UnityWebRequest unityWebRequest = UnityWebRequest.Get(uri);yield return unityWebRequest.SendWebRequest();if (unityWebRequest.isDone){Match match = Regex.Match(unityWebRequest.downloadHandler.text, @"access_token.:.(.*?).,");if (match.Success){Debug.Log("Token已经匹配");accessToken = match.Groups[1].ToString();}else{Debug.Log("验证错误,获取AccessToken失败!!!");}}}
}

演示效果:

成功播放合成的声音,本篇结束。这只是最基本的调用百度API的操作,下一篇就是调用百度的自然处理语言的API实现智能对话,之后还会对Unity关于调用Android SDK的操作进行总结,使用unity制作一个智能语音助手(陪聊)的软件。

Unity 百度语音合成相关推荐

  1. Unity 百度SDK 之 在线语音合成 TTS WebAPI 功能的实现

    Unity 百度SDK 之 在线语音合成 TTS  WebAPI 功能的实现 目录 Unity 百度SDK 之 在线语音合成 TTS  WebAPI 功能的实现 一.简单介绍 二.百度官网关于在线语音 ...

  2. Python 技术篇-百度语音合成API接口调用演示

    百度语音合成api文档 现在演示的是调用百度语音合成,然后再转化为本地 mp3 的内容. 重要:tok 参数的获取请看上一篇文章: Python 技术篇-百度语音API鉴权认证获取Access Tok ...

  3. Python制作专属有声小说(调用百度语音合成接口)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:merlin& 这一次的目标是使用百度云的人工智能接口,实现 ...

  4. Android 百度语音合成 (含离线、在线、API合成方式,详细步骤+源码)

    百度语音合成 声明 前言 正文 一.创建项目 二.离线语音合成 1. 配置AndroidManifest.xml 2. 配置SDK 3. 离线SDK初始化 4. 导包 5. 运行 三.在线语音合成 - ...

  5. 百度语音合成 java 教程_调用百度语音合成接口

    首先在百度云要先创建应用,获取apiKey . secretKey. 百度云账号的用户id php 调用接口: //百度语音合成 public function voice_st(){ $text = ...

  6. 百度语音合成 java 教程_【百度语音合成】JavaAPI方式语音合成示例

    package com.xs.audio.tns; import java.net.URLEncoder; import com.xs.common.APIContants; import com.x ...

  7. 百度语音合成Rest API使用

    TIP:这是RestApi使用,实际在web使用中java SDK方式使用较好,本文为测试使用,包括maven搭建运行springmvc的所有代码,实际代码可直接跳到publicutil.java和s ...

  8. 百度语音合成与语音识别api使用(Java版本)

    百度语音合成官方文档:https://ai.baidu.com/docs#/TTS-Online-Java-SDK/top 百度语音识别官方文档:https://ai.baidu.com/docs#/ ...

  9. android通过百度语音合成实现文字转换成语音(TTS)详细教程?

    android实现百度语音合成 1.使用TextToSpeech朗读文字 2.百度语音合成 1.创建应用 1.在百度开发者平台实现注册,并进行实名认证 2.点击语音技术 3.点击创建应用 4.创建细节 ...

  10. 百度语音合成(TTS)SDK使用方法

    语音合成是实现人机语音交互,建立一个有听和讲能力的交互系统所必需的关键技术. 这篇文章将介绍如何使用 百度 Android语音合成SDK. 与语音识别SDK类似,使用语音合成SDK也需要注册,并开启语 ...

最新文章

  1. Browser Security-超文本标记语言(HTML)
  2. ACM——常用函数总结
  3. makefile 基础用法
  4. 对象的软、弱、和虚引用
  5. 反射通过配置文件运行的步骤
  6. java的原生数据类型_Java中的8种原生数据类型(Primitive Data Types)分析
  7. Error:不允许有匹配 [xX][mM][lL] 的处理指令目标。
  8. python 手写m3u8多线程下载器
  9. 详解 CatBoost 原理
  10. VSCode_VS2019体验背景靓图
  11. (入门、全面、通用)树莓派Raspbian系统安装配置,篇一
  12. 利用普普通通的游戏引擎实现普普通通的电梯调度算法
  13. SEO优化转战移动手机站
  14. 怎样将excel表格导入天正_怎样把excel表格转换成cad读取
  15. 【PaddleOCR】Paddle-Lite, Paddle2ONNX介绍, 学习教程...
  16. 【iOS】二进制十进制十六进制转换器
  17. 中国高校计算机大赛网络技术挑战赛,2019年度“中国高校计算机大赛-网络技术挑战赛”国赛圆满落幕...
  18. 三星9300 Kies 升级包 存储
  19. tkinter基本概念
  20. 【web前端基本知识点——常见样式声明、层叠和继承】

热门文章

  1. 数字选择器NumberPicker使用教程
  2. 在线制作流程图、思维导图(基于ProcessOn平台)
  3. 非线性数学模型线性化
  4. python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析
  5. python打印pdf文件_3条指令教会你用python创建中文pdf文件,适合批量打印,附送源码-pdf文件不能打印...
  6. 重装windows10系统的教程
  7. 罗振宇《时间的朋友2018》跨年演讲全文
  8. PHP 8.1性能基准测试结果出炉,比7.0版本提升44%
  9. Tslib1.20和Qt 4.8.4与在ARM开发板上的移植 多点触摸
  10. winows+Eclipse下Mahout配置