在android上同步多个音频曲目

在android上同步多个音频曲目,android,android-mediaplayer,cocos2d-x,audio,Android,Android Mediaplayer,Cocos2d X,Audio,我正在尝试创建一个基于音乐的游戏(类似于“我的歌唱怪物”)。我的想法是,我有一个场景,可以在场景中放置和删除几个不同的角色,每个角色都有一个独特的mp3文件供其歌唱 我正在用cocos2dx构建我的游戏,不过对于声音,我正在使用一个自定义引擎,该引擎目前在android上使用MediaPlayer API。为了将所有声音同步在一起,我只需在加载场景时播放它们,然后根据场景中的角色静音和取消静音。问题是,在旧设备上,这些声音似乎是无效的不同步,我假设我需要一种在加载mp3文件之前预缓存它们的方法

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

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

我尝试在advanced中创建所有MediaPlayer并使用prepare()方法,然后将它们保存在hashmap中,只需使用play()即可当场景开始播放它们时。不幸的是,它没有工作,曲目仍然不同步。我不确定MediaPlayer如何工作,所以我不知道尝试在高级中创建它是否等同于预缓存。标准的cocos2dx声音引擎使用声音池,我知道它不适合大文件,我也不确定它是否可以使用作为一种缓存机制,在Ios上,我已经有了一个使用openAL的声音引擎,在iPad4上,我测试过它运行得很好

你建议我做什么来同步这些曲目?实现另一个声音引擎?可能基于openSL?或者以某种方式保留一个计时器并使用它来同步曲目


在这样的游戏中,最重要的是将所有曲目同步在一起,那么如何设计声音呢?

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

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


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

不鼓励交叉发布:任何人都有关于如何实现这一点的好教程?我认为更好的选择是以本机代码的方式进行,因为我需要对IO执行同样的操作也可以,但是单独的代码也可以。唉,我从来没有见过这样的东西(这并不是说它不存在)。这可能会有帮助: