如何参考下面的示例把api改成向httpsgenshinvoicetopapispeaker=胡桃&text=你好&format=wav&length=1&noise=05&noisew=09&sdp_ratio=02 请求参数并获取请求页面中的wav音频播放请根据下面的完整示例帮我修改一个适用的代码:using System;using SystemCollections;using Syste
根据你提供的示例,修改后的代码如下:
using System;
using System.Collections;
using System.Xml.Linq;
using UnityEngine;
using UnityEngine.Networking;
public class GenshinTextToSpeech : TTS
{
#region 参数定义
/// <summary>
/// Genshin配置项
/// </summary>
/// <summary>
/// 朗读的角色
/// </summary>
[Header("朗读声音设置")]
public string voiceName = "胡桃";
/// <summary>
/// 情绪
/// </summary>
[Header("朗读的情绪设置")]
public float length = 1.0f; // 注意修改类型为 float
#endregion
private void Genshin()
{
m_PostURL = "https://genshinvoice.top/api";
}
/// <summary>
/// 语音合成
/// </summary>
/// <param name="_msg"></param>
/// <param name="_callback"></param>
public override void Speak(string _msg, Action<AudioClip> _callback)
{
StartCoroutine(GetVoice(_msg, _callback));
}
/// <summary>
/// 语音合成,返回合成文本
/// </summary>
/// <param name="_msg"></param>
/// <param name="_callback"></param>
public override void Speak(string _msg, Action<AudioClip, string> _callback)
{
StartCoroutine(GetVoice(_msg, _callback));
}
/// <summary>
/// restful api语音合成
/// </summary>
/// <param name="_msg"></param>
/// <param name="_callback"></param>
/// <returns></returns>
private IEnumerator GetVoice(string _msg, Action<AudioClip> _callback)
{
stopwatch.Restart();
// 构建请求URL
string requestURL = string.Format("https://genshinvoice.top/api?speaker={0}&text={1}&format=wav&length={2}&noise=0.5&noisew=0.9&sdp_ratio=0.2", voiceName, _msg, length);
using (UnityWebRequest speechRequest = UnityWebRequestMultimedia.GetAudioClip(requestURL, AudioType.WAV))
{
yield return speechRequest.SendWebRequest();
if (speechRequest.result == UnityWebRequest.Result.Success)
{
AudioClip audioClip = DownloadHandlerAudioClip.GetContent(speechRequest);
_callback(audioClip);
}
else
{
Debug.LogError("语音合成失败: " + speechRequest.error);
}
}
stopwatch.Stop();
Debug.Log("Genshin语音合成耗时:" + stopwatch.Elapsed.TotalSeconds);
}
/// <summary>
/// restful api语音合成,返回合成文本
/// </summary>
/// <param name="_msg"></param>
/// <param name="_callback"></param>
/// <returns></returns>
private IEnumerator GetVoice(string _msg, Action<AudioClip, string> _callback)
{
stopwatch.Restart();
// 构建请求URL
string requestURL = string.Format("https://genshinvoice.top/api?speaker={0}&text={1}&format=wav&length={2}&noise=0.5&noisew=0.9&sdp_ratio=0.2", voiceName, _msg, length);
using (UnityWebRequest speechRequest = UnityWebRequestMultimedia.GetAudioClip(requestURL, AudioType.WAV))
{
yield return speechRequest.SendWebRequest();
if (speechRequest.result == UnityWebRequest.Result.Success)
{
AudioClip audioClip = DownloadHandlerAudioClip.GetContent(speechRequest);
_callback(audioClip, _msg);
}
else
{
Debug.LogError("语音合成失败: " + speechRequest.error);
}
}
stopwatch.Stop();
Debug.Log("Genshin语音合成耗时:" + stopwatch.Elapsed.TotalSeconds);
}
}
在代码中,我修改了以下内容:
- 将
length参数的类型修改为float,以便与请求参数匹配。 - 修改了
m_PostURL的值为目标请求的 URL。 - 在
GetVoice方法中,构建了请求的 URL,并使用UnityWebRequestMultimedia.GetAudioClip方法发送请求,并获取音频剪辑。 - 在调用成功后,将音频剪辑传递给回调函数
_callback。 - 错误处理部分保持不变。
请根据你的需求进行进一步调整和测试。
原文地址: https://www.cveoy.top/t/topic/i9FI 著作权归作者所有。请勿转载和采集!