这可能有点复杂,但我会尝试将其分解。我正在使用Unity 5引擎和C#脚本构建Android游戏。我有我的基本要素,我项目中的下一步也是最艰难的一步是做以下事情:
我需要播放存储在运行时确定的用户手机上的背景音乐。 我还想阅读这个文件的声音数据来操纵游戏玩法(基于歌曲文件)。
我遇到的问题是Unity本身的音乐功能仅限于我放入Assets的音乐,而不是在运行时从Android音乐目录中找到的音乐。使用上面的代码的简化版本 http://answers.unity3d.com/questions/652919/music-player-get-songs-from-directory.html 我可以在运行时从我的计算机上的Assets中播放音乐,但音乐将无法在我的手机上从包含的资产中播放,如果我能解决这个问题,我不确定它是否可以使用Android文件路径。
有没有更好的方法来做到这一点,或者上面的链接是最好的开始,为什么声音不会从我的手机播放?任何建议都表示赞赏。
答案 0 :(得分:0)
如果您希望用户从手机上的自定义文件夹中获取数据,则需要读取音频文件的字节并缓存到磁盘。然后,您可以像平常一样创建音频剪辑并播放它。我无法帮助您使用Android文件系统,但快速谷歌将帮助您使用目录格式。
问题是它会很慢,如Unity Answers的源文章所述。
byte[] rawData = byte[];
string tempFile = Application.persistentDataPath + "/bytes.mp3";
System.IO.File.WriteAllBytes(tempFile, rawData);
WWW loader = new WWW("file://" + tempFile);
yield return loader;
if(!System.String.IsNullOrEmpty(loader.error))
Debug.LogError(loader.error);
AudioClip s1 = loader.GetAudioClip(false, false, AudioType.MPEG);
//or
AudioClip s2 = loader.audioClip;
消息来源:http://answers.unity3d.com/questions/686240/audioclip-oggmp3-loaded-from-byte-array.html
希望这有帮助!