写一个unity的文字合成语音的API这里是API的接口地址和参数text的内容为下面参考示例中_callback参数 httpsgenshinvoicetopapispeaker=胡桃&text=你好&format=wav&length=1&noise=05&noisew=09&sdp_ratio=02 using System;using SystemCollections;using Sy
这是一个Unity中使用文字合成语音的API的示例代码。该API的接口地址和参数可以在代码中自定义,示例中的接口地址为"https://genshinvoice.top/api",参数为"speaker"、"text"、"format"、"length"、"noise"、"noisew"和"sdp_ratio"。具体使用方法是调用SpeechToText方法并传入音频文件和回调函数,回调函数将接收合成语音的文本结果。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class WhisperSpeechToText : STT
{
private void Awake()
{
m_SpeechRecognizeURL = GetPostUrl();
}
/// <summary>
/// 服务地址
/// </summary>
[SerializeField] private string m_ServerSetting = "http://localhost:9000";
/// <summary>
/// 任务类型
/// </summary>
[SerializeField] private string m_TaskType = "transcribe";
/// <summary>
/// 设置输出的文档格式
/// </summary>
[SerializeField] private OutputType m_OutputType = OutputType.json;
/// <summary>
/// 资源地址
/// </summary>
/// <returns></returns>
private string GetPostUrl()
{
string _url = string.Format("{0}/asr?task={1}&encode=true&output={2}", m_ServerSetting, m_TaskType, m_OutputType);
return _url;
}
/// <summary>
/// openai语音识别
/// </summary>
/// <param name="_clip"></param>
/// <param name="_callback"></param>
public override void SpeechToText(AudioClip _clip, Action<string> _callback)
{
byte[] _audioData = WavUtility.FromAudioClip(_clip);
StartCoroutine(SendAudioData(_audioData, _callback));
}
/// <summary>
/// 发送数据到api
/// </summary>
/// <param name="audioBytes"></param>
/// <param name="_callback"></param>
/// <returns></returns>
private IEnumerator SendAudioData(byte[] audioBytes, Action<string> _callback)
{
stopwatch.Restart();
WWWForm form = new WWWForm();
form.AddBinaryData("audio_file", audioBytes, "test.mp3", "audio/mpeg");
UnityWebRequest www = UnityWebRequest.Post(m_SpeechRecognizeURL, form);
www.SetRequestHeader("accept", "application/json");
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.LogError("Error sending audio file: " + www.error);
}
else
{
string _responseText = www.downloadHandler.text;
Response _response = ResponseSetting(_responseText);
_callback(_response.text);
}
stopwatch.Stop();
Debug.Log("Whisper语音识别耗时:" + stopwatch.Elapsed.TotalSeconds);
}
/// <summary>
/// 根据返回类型,处理返回值
/// </summary>
/// <param name="_msg"></param>
/// <returns></returns>
private Response ResponseSetting(string _msg)
{
Response _response = new Response();
if (m_OutputType == OutputType.json) {
_response = JsonUtility.FromJson<Response>(_msg);
}
else if(m_OutputType == OutputType.txt)
{
_response.text= _msg;
}
else
{
_response.text = _msg;
}
return _response;
}
#region 数据定义
[Serializable]
public class Response
{
[SerializeField] public string text = string.Empty;
[SerializeField] public List<Segment> segments = new List<Segment>();
[SerializeField] public string language = string.Empty;
}
[Serializable]
public class Segment
{
[SerializeField] public int id;
[SerializeField] public int seek;
[SerializeField] public int start;
[SerializeField] public int end;
[SerializeField] public string text = string.Empty;
[SerializeField] public int temperature;
}
/// <summary>
/// 识别成功,输出文档类型
/// </summary>
public enum OutputType
{
txt,
json,
vtt,
srt,
tsv
}
#endregion
}
以上是一个使用Unity进行文字合成语音的API的示例代码,你可以根据自己的需求进行相应的修改和扩展。
原文地址: https://www.cveoy.top/t/topic/i9q3 著作权归作者所有。请勿转载和采集!