寻求有关在 Android 上播放音频的帮助。我们有一个 OpenGL 应用程序(Java + C++),现在我们想要播放声音效果。播放器应允许在播放时修改播放速率和音量。可能是 OpenSL 或 Audiotrack。
第一个问题? 是否有任何免费或商业库/包装器可以做这件事?(可能是 java 或本机)
..,如果没有,我会解释我们到目前为止所做的,以及我们遇到的问题。
我们使用 AudioTrack 实例创建了 MusicPlayer 类(扩展 AsyncTask)。在活动的 onResume() 中,我们创建了它的 5 个实例,在线程池上执行它。在任务的doInBackground()中,我们有一个运行循环检查状态变化、加载文件和写入缓冲区。在 JNI 中,我们有存储事件队列并每 10 毫秒将它们发送到 java 一次的单例。它以某种方式起作用,但距离被接受还差得很远。我们遇到以下问题:
- 当文件开始播放时,我们可以在开始时听到短促的噪音。比如点击什么的。
- 即使我们刷新或释放 AudioTrack,声音似乎也在队列中播放(尤其是当需要快速更改缓冲区时)
- 我们无法在 MODE_STREAM 中创建循环
- 当我们修改 AsyncTask 的局部变量 CHANGE_RATE 和 RATE 时,它应该调用 audioTrack.setPlaybackRate(RATE)。确实如此,但什么也没有发生。
我曾经用 Obj-C for iOS 编写,并且有很多“即用型”解决方案(例如 cocoacontrols)。从未想过在 Android 上处理声音会是一场噩梦;/ 任何帮助将不胜感激:)