我需要在 iOS 上运行的 Unity3D 中流式传输或下载并播放从 URL 获取的音频。
音频来自文本转音频服务,我需要在 Unity 上播放它:
我一上午都在谷歌上搜索,没有找到有效的解决方案......
Unity3D文档中有一个代码片段(WWW音频剪辑 http://docs.unity3d.com/ScriptReference/WWW-audioClip.html,获取音频剪辑 http://docs.unity3d.com/ScriptReference/WWW.GetAudioClip.html),但不起作用,我已经调试过,错误说无法打开文件。
using UnityEngine;
using System.Collections;
public class AudioURLScript : MonoBehaviour {
public string url = "http://api.ispeech.org/api/rest?apikey=...&action=convert&voice=eurspanishfemale&text=hola+que+tal";
public AudioSource source;
void Start() {
WWW www = new WWW("file://"+url);
source = GetComponent<AudioSource>();
source.clip = www.GetAudioClip(false,true);
}
void Update() {
if (!source.isPlaying && source.clip.isReadyToPlay)
source.Play();
}
}
Thanks
SOLUTION
这是我现在的工作解决方案。
void Start(){
StartCoroutine(DownloadAndPlay("http://api.ispeech.org/api/rest?apikey=...&action=convert&voice=eurspanishfemale&text=Hola+que+tal"));
}
IEnumerator DownloadAndPlay(string url)
{
WWW www = new WWW(url);
yield return www;
AudioSource audio = GetComponent<AudioSource>();
audio.clip = www.GetAudioClip(false, true,AudioType.MPEG);
audio.Play();
}
你没有提到你所在的平台,所以我假设是Windows。
Unity Windows 运行时仅支持 WAV 或 OGG。您提供的音频服务文件的链接正在以 MP2 音频文件的形式下载(在广播中常见)。 Unity 将无法播放该文件(或 MP3)。
作为参考,Android 和 iOS 平台确实支持 MP3(但不支持 MP2)。
因此,您的第一个问题是确保您的音频源采用兼容的格式。
代码示例不正确的原因有 3 个:
- URL 是 https:(告诉 unity 从互联网下载),但是你可以在其前面添加 file:(告诉 unity 从本地文件系统加载)。所以你应该选择其中之一。
- 如果您选择 https,它将不起作用,因为该特定链接(我知道这只是一个示例),但它要求用户登录到该服务(并使用 cookie 来了解这一点),因此它不会向您发送音频文件时,它会向您发送一个 HTML 页面,告诉用户登录或注册。
- 正如 @fafase 所说,WWW 必须放置在协同例程中,以便它可以通过多个帧进行下载。
好的,这就是我的建议。
如果您可以提前知道音频文件,请下载它们并转码为 OGG(如果是 Windows)或 MP3(如果是移动设备),然后将它们上传到您自己的服务器(例如 Amazon S3,或每月 10 美元的无限制网站)。
然后,使用此代码下载并播放它:
StartCoroutine(DownloadAndPlay("http://myserver.com/audio/test.ogg"));
IEnumerator DownloadAndPlay(string url)
{
WWW www = new WWW(url);
yield return www;
AudioSource audio = GetComponent<AudioSource>();
audio.clip = www.GetAudioClip(false, false);
audio.Play();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)