我正在尝试在Unity游戏中使用云TTS。
使用较新版本(我正在使用2019.1)时,他们已弃用WWW,而改用API中的UnityWebRequest。
我尝试过Unity Documentation,但这对我没有用。
我还尝试了其他线程,它们使用的WWW在我的Unity版本中已弃用。
void Start()
{
StartCoroutine(PlayTTS());
}
IEnumerator PlayTTS()
{
using (UnityWebRequestMultimedia wr = new UnityWebRequestMultimedia.GetAudioClip(
"https://example.com/tts?text=Sample%20Text&voice=Male",
AudioType.OGGVORBIS)
)
{
yield return wr.Send();
if (wr.isNetworkError)
{
Debug.LogWarning(wr.error);
}
else
{
//AudioClip ttsClip = DownloadHandlerAudioClip.GetContent(wr);
}
}
}
浏览器中的URL(我使用Firefox)成功加载了音频剪辑,让我可以播放它。
我想要做的是在游戏中发生某些事情时播放TTS,出于测试目的,它已经在“ void Start”内完成了。
我要去哪里错了?
预先感谢
乔什
答案 0 :(得分:0)
UnityWebRequestMultimedia.GetAudioClip
自动添加具有属性DownloadHandlerAudioClip
的默认streamAudio
。
将此选项设置为true并添加UnityWebRequest.downloadedBytes
的复选框,以在开始播放之前延迟播放。
类似
public AudioSource source;
IEnumerator PlayTTS()
{
using (var wr = new UnityWebRequestMultimedia.GetAudioClip(
"https://example.com/tts?text=Sample%20Text&voice=Male",
AudioType.OGGVORBIS)
)
{
((DownloadHandlerAudioClip)wr.downloadHandler).streamAudio = true;
wr.Send();
while(!wr.isNetworkError && wr.downloadedBytes <= someThreshold)
{
yield return null;
}
if (wr.isNetworkError)
{
Debug.LogWarning(wr.error);
}
else
{
// Here I'm not sure if you would use
source.PlayOneShot(DownloadHandlerAudioClip.GetContent(wr));
// or rather
source.PlayOneShot((DownloadHandlerAudioClip)wr.downloadHandler).audioClip);
}
}
}
在智能手机上键入内容,因此没有保修,但希望您能理解