Unity 百度语音合成
前言
本篇文章演示在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 百度语音合成相关推荐
- Unity 百度SDK 之 在线语音合成 TTS WebAPI 功能的实现
Unity 百度SDK 之 在线语音合成 TTS WebAPI 功能的实现 目录 Unity 百度SDK 之 在线语音合成 TTS WebAPI 功能的实现 一.简单介绍 二.百度官网关于在线语音 ...
- Python 技术篇-百度语音合成API接口调用演示
百度语音合成api文档 现在演示的是调用百度语音合成,然后再转化为本地 mp3 的内容. 重要:tok 参数的获取请看上一篇文章: Python 技术篇-百度语音API鉴权认证获取Access Tok ...
- Python制作专属有声小说(调用百度语音合成接口)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:merlin& 这一次的目标是使用百度云的人工智能接口,实现 ...
- Android 百度语音合成 (含离线、在线、API合成方式,详细步骤+源码)
百度语音合成 声明 前言 正文 一.创建项目 二.离线语音合成 1. 配置AndroidManifest.xml 2. 配置SDK 3. 离线SDK初始化 4. 导包 5. 运行 三.在线语音合成 - ...
- 百度语音合成 java 教程_调用百度语音合成接口
首先在百度云要先创建应用,获取apiKey . secretKey. 百度云账号的用户id php 调用接口: //百度语音合成 public function voice_st(){ $text = ...
- 百度语音合成 java 教程_【百度语音合成】JavaAPI方式语音合成示例
package com.xs.audio.tns; import java.net.URLEncoder; import com.xs.common.APIContants; import com.x ...
- 百度语音合成Rest API使用
TIP:这是RestApi使用,实际在web使用中java SDK方式使用较好,本文为测试使用,包括maven搭建运行springmvc的所有代码,实际代码可直接跳到publicutil.java和s ...
- 百度语音合成与语音识别api使用(Java版本)
百度语音合成官方文档:https://ai.baidu.com/docs#/TTS-Online-Java-SDK/top 百度语音识别官方文档:https://ai.baidu.com/docs#/ ...
- android通过百度语音合成实现文字转换成语音(TTS)详细教程?
android实现百度语音合成 1.使用TextToSpeech朗读文字 2.百度语音合成 1.创建应用 1.在百度开发者平台实现注册,并进行实名认证 2.点击语音技术 3.点击创建应用 4.创建细节 ...
- 百度语音合成(TTS)SDK使用方法
语音合成是实现人机语音交互,建立一个有听和讲能力的交互系统所必需的关键技术. 这篇文章将介绍如何使用 百度 Android语音合成SDK. 与语音识别SDK类似,使用语音合成SDK也需要注册,并开启语 ...
最新文章
- Browser Security-超文本标记语言(HTML)
- ACM——常用函数总结
- makefile 基础用法
- 对象的软、弱、和虚引用
- 反射通过配置文件运行的步骤
- java的原生数据类型_Java中的8种原生数据类型(Primitive Data Types)分析
- Error:不允许有匹配 [xX][mM][lL] 的处理指令目标。
- python 手写m3u8多线程下载器
- 详解 CatBoost 原理
- VSCode_VS2019体验背景靓图
- (入门、全面、通用)树莓派Raspbian系统安装配置,篇一
- 利用普普通通的游戏引擎实现普普通通的电梯调度算法
- SEO优化转战移动手机站
- 怎样将excel表格导入天正_怎样把excel表格转换成cad读取
- 【PaddleOCR】Paddle-Lite, Paddle2ONNX介绍, 学习教程...
- 【iOS】二进制十进制十六进制转换器
- 中国高校计算机大赛网络技术挑战赛,2019年度“中国高校计算机大赛-网络技术挑战赛”国赛圆满落幕...
- 三星9300 Kies 升级包 存储
- tkinter基本概念
- 【web前端基本知识点——常见样式声明、层叠和继承】
热门文章
- 数字选择器NumberPicker使用教程
- 在线制作流程图、思维导图(基于ProcessOn平台)
- 非线性数学模型线性化
- python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析
- python打印pdf文件_3条指令教会你用python创建中文pdf文件,适合批量打印,附送源码-pdf文件不能打印...
- 重装windows10系统的教程
- 罗振宇《时间的朋友2018》跨年演讲全文
- PHP 8.1性能基准测试结果出炉,比7.0版本提升44%
- Tslib1.20和Qt 4.8.4与在ARM开发板上的移植 多点触摸
- winows+Eclipse下Mahout配置