在Unity中使用科大讯飞语音合成webapi实现语音合成
直接上代码!
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using System.Net;
using System.Net.WebSockets;
using System.Net.Sockets;
using System;
using System.Security.Cryptography;
using System.Threading;
using UnityEngine.UI;
using System.Threading.Tasks;
namespace Webiat
{
public class TTSCore : MonoBehaviour
{
//绑定你自己的参数,不知道如何获取的,可以自己百度
private static string app_id = "APPID";
private static string api_secret = "APISECRET";
private static string api_key = "APIKEY";
public string Uri = "wss://tts-api.xfyun.cn/v2/tts";
List<float> _clipData = new List<float>();
[HideInInspector]
public ClientWebSocket ttsWebSocket;//语音合成websocket
#region ----------------------接口鉴权-----------------------------
/// <summary>
/// 基于HMACSHA256加密获取接口鉴权
/// </summary>
/// <returns></returns>
public string GetUrl(string uriStr)
{
Uri uri = new Uri(uriStr);
string host = uri.Host;
string date = DateTime.UtcNow.ToString("R");
//使用base64编码获取签名前
string signature_origin = $"host: {host}\ndate: {date}\nGET /v2/tts HTTP/1.1";
//获取最终签名
string signature = hmacsha256(signature_origin, api_secret);
//使用base64编码获取鉴权前
string authorization_origion = $"api_key=\"{api_key}\", algorithm=\"hmac-sha256\", headers=\"host date request-line\", signature=\"{signature}\"";
//最终生成的鉴权接口
string authorization = Convert.ToBase64String(Encoding.UTF8.GetBytes(authorization_origion));
string url = $"wss://tts-api.xfyun.cn/v2/tts?authorization={authorization}&date={date}&host={host}";
return url;
}
/// <summary>
/// HMACSHA256加密
/// </summary>
/// <param name="signature_origion"></param>
/// <param name="secrect"></param>
/// <returns></returns>
private string hmacsha256(string signature_origion, string secrect)
{
HMACSHA256 mac = new HMACSHA256(Encoding.UTF8.GetBytes(secrect));
string signature = Convert.ToBase64String(mac.ComputeHash(Encoding.UTF8.GetBytes