c# - Unity Android 将本地 MP3 或 WAV 加载为 AudioClip
问题描述
我可以使用 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 一起工作,但如果有另一种更有效的加载本地文件的方法,我愿意接受。
解决方案
更改您的构建设置以授予对外部 sd 卡的写入权限。我正在使用下面的代码从 android 中的指定位置获取音频。我试过你的代码,但不知何故它不起作用。
IEnumerator GetAudioClip2(string fullPath)
{
debugSongPath2.text = previewSong;
using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(fullPath, AudioType.MPEG))
{
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
AudioClip myClip = DownloadHandlerAudioClip.GetContent(www);
audioSource.clip = myClip;
audioSource.Play();
}
}
}
我的完整路径是“file:///storage/emulated/0/Samsung/Music/Over the Horizon.mp3”
推荐阅读
- node.js - 如何在 nodeJS 中获取 AWS SQS 队列 ARN?
- node.js - 带有 MERN 的“npm run server”“npm run client”上的错误
- node.js - 启动服务器并测试“服务器意外关闭”
- javascript - JavaScript - 从类名中获取大小并打开新窗口
- mysql - 对同一数据库的查询在 mariadb 中运行时间为 0.4 秒,在 mysql 5.6、5.7 和 8 中运行时间为 83 秒
- python - pygame 无法正确感知大写锁定和数字锁定状态的实际状态
- python - 如何访问和操作 csv 文件中的单个元素?
- excel - 需要对象错误:如果 range.value = "x"
- shiny - 闪亮的应用程序!LaTeX 错误:找不到文件“unicode-math.sty”
- c++ - 获取向量元素的第 n 个最小值