根据你提供的示例,修改后的代码如下:

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);
    }
}

在代码中,我修改了以下内容:

  1. length 参数的类型修改为 float,以便与请求参数匹配。
  2. 修改了 m_PostURL 的值为目标请求的 URL。
  3. GetVoice 方法中,构建了请求的 URL,并使用 UnityWebRequestMultimedia.GetAudioClip 方法发送请求,并获取音频剪辑。
  4. 在调用成功后,将音频剪辑传递给回调函数 _callback
  5. 错误处理部分保持不变。

请根据你的需求进行进一步调整和测试。

如何参考下面的示例把api改成向httpsgenshinvoicetopapispeaker=胡桃&text=你好&format=wav&length=1&noise=05&noisew=09&sdp_ratio=02 请求参数并获取请求页面中的wav音频播放请根据下面的完整示例帮我修改一个适用的代码:using System;using SystemCollections;using Syste

原文地址: https://www.cveoy.top/t/topic/i9FI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录