using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class GPTSoVITS : TTS
{
#region 参数定义
[Header("参考音频路径,是GPT-SoVITS项目下的相对路径")]
[SerializeField] private string m_ReferWavPath = string.Empty;//参考音频路径
[Header("参考音频的文字内容")]
[SerializeField] private string m_ReferenceText = "";//参考音频文本
[Header("参考音频的语言")]
[SerializeField] private Language m_ReferenceTextLan = Language.中文;//参考音频的语言
[Header("合成音频的语言")]
[SerializeField] private Language m_TargetTextLan = Language.中文;//合成音频的语言
#endregion
Coroutine m_Coroutine;
///
/// 语音合成,返回合成文本
///
///
///
public override void StartSpeak(string _msg, Action _callback)
{
base.StartSpeak(_msg, _callback);
m_Coroutine = StartCoroutine(GetVoice(_msg, _callback));
}
public override void StopSpeak()
{
base.StopSpeak();
if(m_Coroutine != null)
{
StopCoroutine(m_Coroutine);
}
}
///
/// 合成音频
///
///
///
///
private IEnumerator GetVoice(string _msg, Action _callback)
{
stopwatch.Restart();
//发送报文
RequestData _requestData = new RequestData
{
refer_wav_path = m_ReferWavPath,
prompt_text = m_ReferenceText,
prompt_language = m_ReferenceTextLan.ToString(),
text = _msg,
text_language = m_TargetTextLan.ToString()
};
string _postJson = JsonUtility.ToJson(_requestData);//报文
using (UnityWebRequest request = new UnityWebRequest(m_PostURL, "POST"))
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(_postJson);
request.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);
request.downloadHandler = new DownloadHandlerAudioClip(m_PostURL, AudioType.WAV);
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.responseCode == 200)
{
AudioClip audioClip = ((DownloadHandlerAudioClip)request.downloadHandler).audioClip;
_callback(audioClip);
}
else
{
//Debug.LogError("语音合成失败: " + request.error);
_callback(null);
}
}
}
#region 数据定义
[Serializable]
public class RequestData
{
public string refer_wav_path = string.Empty;//参考音频路径
public string prompt_text = string.Empty;//参考音频文本
public string prompt_language = string.Empty;//参考音频语言
public string text = string.Empty;//合成文本
public string text_language = string.Empty;//合成语言设置
}
public enum Language
{
中文,
英文,
日文,
中英混合,
日英混合,
多语种混合
}
#endregion
}