[英]How do I use Unity Web Requests for streaming audio... I want to use a cloud based TTS
我正在嘗試在我的 Unity 游戲中使用雲 TTS。
對於較新的版本(我使用的是 2019.1),他們已棄用 WWW,轉而支持 API 中的 UnityWebRequest(s)。
我已經嘗試過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);
}
}
}
瀏覽器(我使用 Firefox)中的 URL 成功加載了音頻剪輯,允許我播放它。
我想要它做的是在游戲中發生某些事情時播放 TTS,它已在“無效開始”中完成以進行測試。
我哪里錯了?
提前致謝
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);
}
}
}
在智能手機上打字,所以沒有保修,但我希望你能明白
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.