XFAudioComp 脚本中包含连接讯飞相关方法(其中讯飞使用Websocket 我使用的 BestHttp插件,插件在我资源里可以找到)
using BestHTTP.WebSocket;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
public class XFAudioComp
{
/// <summary>
/// 语音合成WebSocket
/// </summary>
private WebSocket m_AudioCompWebWocket;
public WebSocket AudioCompWebWocket
{
get
{
return m_AudioCompWebWocket;
}
private set { }
}
public Action<string> DelOnMessage;
public Action DelOnSucceed;
private string m_WebSendMsg;
/// <summary>
/// 语音总长度
/// </summary>
private int m_AudioLength = 0;
private Queue<float> m_QueAudioPlay;
private StringBuilder m_AllMessage;
public XFAudioComp()
{
m_QueAudioPlay = new Queue<float>();
m_WebSendMsg = string.Empty;
DelOnMessage = null;
m_AllMessage = new StringBuilder();
DelOnSucceed = null;
}
/// <summary>
/// 连接讯飞语音合成
/// </summary>
public void ConnectXFAudioComp(Uri url)
{
m_AudioCompWebWocket = new WebSocket(url);
m_AudioCompWebWocket.OnOpen += OnOpen;
m_AudioCompWebWocket.OnMessage += OnMessage;
m_AudioCompWebWocket.OnError += OnError;
m_AudioCompWebWocket.OnClosed += OnClosed;
m_AudioCompWebWocket.Open();
}
/// <summary>
/// 获取合成内容
/// </summary>
/// <param name="compAudioContent">需要合成的内容</param>
/// <param name="vcn">发音人</param>
/// <param name="aue">音频编码</param>
/// <param name="speed">发音速度</param>
/// <param name="volume">发音音量</param>
/// <param name="tte">文本编码格式</param>
/// <param name="status">数据状态固定为2</param>
/// <returns></returns>
public void GetAudioCompContent(string compAudioContent, string vcn, string aue, int speed, int volume, string tte, int status)
{
XFMessage xFMessage = new XFMessage();
xFMessage.common = new XFConmon();
xFMessage.common.app_id = CommonAddress.s_XFAPPID;
xFMessage.business = new XFBusiness();
xFMessage.business.vcn = vcn;
xFMessage.business.aue = aue;
xFMessage.business.speed = speed;
xFMessage.business.volume = volume;
xFMessage.business.tte = tte;
xFMessage.data = new XFData();
xFMessage.data.status = status;
xFMessage.data.text = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(compAudioContent));
string str = LitJson.JsonMapper.ToJson(xFMessage);
m_WebSendMsg = str;
}
public void CloseWebSocket()
{
if(m_AudioCompWebWocket!=null)
{
m_AudioCompWebWocket.Close();
}
}
private void OnClosed(WebSocket webSocket, ushort code, string message)
{
Debug.Log(webSocket.State);
Debug.Log(m_AudioCompWebWocket.State);
webSocket.OnOpen = null;
webSocket.OnMessage=null;
webSocket.OnError=null;
webSocket.OnClosed =null;