我可以使用 Unity 编辑器中的 UnityWebRequestMultimedia.GetAudioClip 和以下代码加载音频,但是当我在 Android 上运行它时,我无法从用户的设备加载任何文件。
void Start() {
audio = GetComponent<AudioSource>();
string fullPath = Path.Combine("file://" + previewSong);
StartCoroutine(GetAudioClip(fullPath));
}
IEnumerator GetAudioClip(string fullPath)
{
using (var uwr = UnityWebRequestMultimedia.GetAudioClip(fullPath, AudioType.MPEG))
{
((DownloadHandlerAudioClip)uwr.downloadHandler).streamAudio = true;
yield return uwr.SendWebRequest();
if (uwr.isNetworkError || uwr.isHttpError)
{
debugSongPath2.text = uwr.error;
yield break;
}
DownloadHandlerAudioClip dlHandler = (DownloadHandlerAudioClip)uwr.downloadHandler;
if (dlHandler.isDone)
{
audio.clip = dlHandler.audioClip;
if (audio.clip != null)
{
audio.clip = DownloadHandlerAudioClip.GetContent(uwr);
Debug.Log("Playing song using Audio Source!");
}
else
{
Debug.Log("Couldn't find a valid AudioClip.");
}
}
else
{
Debug.Log("The download process is not completely finished.");
}
}
}
我遇到的错误取决于我如何形成 URL 的开头。
Path.Combine("file:/" + previewSong);
malformed URL
Path.Combine("file://" + previewSong);
http:/1.1 404 not found
Path.Combine("file:///" + previewSong);
unknown error
Path.Combine("file:////" + previewSong);
unknown error
当我在手机上输出 URL 时,它们看起来是正确的。这是一个示例路径:
file:///storage/emulated/0/Music/Deorro/Deorro - Five Hours.mp3
我以前使用 WWW.GetAudioClip 成功地从这个 URL 加载音频,但这已经过时了。这让我相信 URL 是正确的。我尝试过使用和不使用开发模式进行构建。不知道还有什么可以尝试的。我想让它与 UnityWebRequestMultimedia 一起工作,但如果有另一种更有效的加载本地文件的方法,我愿意接受。