我想在我的 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#的主要内容,如果未能解决你的问题,请参考以下文章

如何将消息发送到 Android 中的其他应用程序?

活动在前台时如何在 Android 上播放音乐

声音警报的标题,iOS。我想在我的应用游戏每次达到 5 分钟时播放声音?

控制台背景音乐

如何在 Android Studio 中创建迷你音乐播放器(Activity 或 Fragment 等)

Android - 如何在应用程序内保持音乐播放?