我想在我的Android游戏中播放音乐以及分析声音数据。使用Unity C#

时间:2017-05-09 09:03:17

标签: c# android audio unity3d

这可能有点复杂,但我会尝试将其分解。我正在使用Unity 5引擎和C#脚本构建Android游戏。我有我的基本要素,我项目中的下一步也是最艰难的一步是做以下事情:

我需要播放存储在运行时确定的用户手机上的背景音乐。 我还想阅读这个文件的声音数据来操纵游戏玩法(基于歌曲文件)。

我遇到的问题是Unity本身的音乐功能仅限于我放入Assets的音乐,而不是在运行时从Android音乐目录中找到的音乐。使用上面的代码的简化版本 http://answers.unity3d.com/questions/652919/music-player-get-songs-from-directory.html 我可以在运行时从我的计算机上的Assets中播放音乐,但音乐将无法在我的手机上从包含的资产中播放,如果我能解决这个问题,我不确定它是否可以使用Android文件路径。

有没有更好的方法来做到这一点,或者上面的链接是最好的开始,为什么声音不会从我的手机播放?任何建议都表示赞赏。

1 个答案:

答案 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

希望这有帮助!