我想在我的 Android 游戏中播放音乐以及分析声音数据。使用 Unity C#
Posted
技术标签:
【中文标题】我想在我的 Android 游戏中播放音乐以及分析声音数据。使用 Unity C#【英文标题】:I want to play music in my Android game as well as analyse the sound data. Using Unity C# 【发布时间】:2017-05-09 09:03:17 【问题描述】:这可能有点复杂,但我会尝试将其分解。我正在使用 Unity 5 引擎和 C# 脚本构建一个 android 游戏。我有我的基本元素,我的项目中下一步也是最困难的一步是执行以下操作:
我需要在运行时确定的用户手机上播放背景音乐。 我还想读取这个文件的声音数据来操作游戏(基于歌曲文件)。
我遇到的问题是 Unity 本身的音乐功能仅限于我放入资产中的音乐,而不是在运行时从 Android 音乐目录中计算出来的音乐。使用上找到的代码的简化版本 http://answers.unity3d.com/questions/652919/music-player-get-songs-from-directory.html 我可以在运行时从我的计算机上的资产中播放音乐,但音乐不会在我的手机上从包含的资产中播放,如果我能弄清楚,我不确定它是否适用于 Android 文件路径。
有没有更好的方法来做到这一点,或者上面的链接是最好的开始,为什么我的手机没有播放声音?任何建议表示赞赏。
【问题讨论】:
【参考方案1】:如果您希望用户从手机上的自定义文件夹中获取数据,那么您需要读取音频文件的字节并缓存到磁盘。然后,您可以创建一个音频剪辑并像往常一样播放它。 android 文件系统我帮不了你,但是一个快速的 google 会帮你找到目录格式。
这样做的问题是它会很慢,正如 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
希望这会有所帮助!
【讨论】:
谢谢。当我再次开始编码时,我会看一下。我正在尝试制作的游戏完全不是系统密集型的,大部分性能吸引将来自这个音乐引擎本身,所以我认为我可以管理这个性能下降,这看起来很有希望。如果这能解决我的问题,我一定会让你知道。非常感谢!! 祝你好运,我很想知道这是否有效,以及性能差异到底是什么。以上是关于我想在我的 Android 游戏中播放音乐以及分析声音数据。使用 Unity C#的主要内容,如果未能解决你的问题,请参考以下文章
声音警报的标题,iOS。我想在我的应用游戏每次达到 5 分钟时播放声音?