gpt4 book ai didi

android - 在android上同步多个音轨

转载 作者:太空狗 更新时间:2023-10-29 14:19:08 26 4
gpt4 key购买 nike

我正在尝试创建一个基于音乐的游戏(类似于“我的唱歌怪物”)。我的想法是我有一个场景,我可以在场景中放置和移除几个不同的角色,每个角色都有一个独特的 mp3为它的歌声归档。

我正在使用 cocos2dx 构建我的游戏,但对于声音我使用的是自定义引擎,该引擎目前在 android 上使用 MediaPlayer API。为了将所有声音同步在一起,我只是在加载场景时将它们全部播放,然后根据场景中的角色静音和取消静音。问题是在旧设备上声音似乎不同步,我假设我需要一种方法在加载 mp3 文件之前预先缓存它们。

我尝试先创建所有的 mediaPlayer 并使用 prepare() 方法,然后将它们保存在 HashMap 中,并在场景开始时使用 play() 来播放它们。不幸的是它没有用,轨道仍然不同步。我不确定 MediaPlayer 是如何工作的,所以我不知道尝试高级创建它是否等同于预缓存。标准的 cocos2dx 声音引擎使用 soundpool,我知道它不适合大文件,我不确定它是否有缓存机制。在 Ios 上我已经有一个使用 openAL 的声音引擎,在我测试过的 ipad 4 上它工作得很好。

为了同步轨道,您建议我做什么?实现另一个声音引擎?也许基于 openSL?或者以某种方式保留计时器并使用它来同步轨道。

如何为这样一款游戏设计声音,其中最重要的是让所有轨道同步在一起?

最佳答案

问题是每个 MediaPlayer 代表一个单独的流,它可能在不同的时间开始。即使您同时对所有这些调用启动(这是不可能的),也无法保证操作系统将同时加载并实际启动每个。

据我所知,Android 不提供同步多个流的方法。即使操作系统确实提供了这种功能,它也非常麻烦,而且通常不是 100% 准确。

正确的解决方案是打开单个流,例如使用 audio track接口(interface),并在将数据发送到流之前自己进行 MP3 解码和混合。

关于android - 在android上同步多个音轨,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18549445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com