在BlackBerry上播放声音的问题

时间:2010-01-25 01:57:46

标签: java blackberry

在黑莓上播放声音时遇到以下问题:

  • 第一次播放声音时,应用程序会挂起约500毫秒(不是在创建播放器时,而是在实际播放声音时)
  • 通话和正在播放的声音之间存在延迟

除模拟器外,我还在物理设备上进行了测试。在模拟器上,必须有一个错误,因为声音开始前需要几秒钟(我听说这是模拟器的问题,所以......)。

我也测试了.wav vs .mp3文件,它给出了几乎相同的结果。

以下是我用来加载播放器的代码:

            stream = new Object().getClass().getResourceAsStream(fileName);
            result = javax.microedition.media.Manager.createPlayer(stream, fileName.endsWith(".wav")?"audio/x-wav":"audio/mpeg");
            if (prefetch) {
                result.prefetch();
            }

然后我存储播放器参考,我稍后使用以下代码播放声音:

            javax.microedition.media.Player player = (javax.microedition.media.Player)resources[soundId];
            if (player != null) {
                    //#debug
                    System.out.println("Player state: " + player.getState());
                    if (player.getState() != javax.microedition.media.Player.STARTED) {
                        player.setLoopCount(loopCount);
                        player.start();   
                    }
            }

我很肯定延迟是由于声音播放,因为我有一个开关将其关闭,当我这样做时延迟就消失了。有什么我做错了吗?

更新

没有任何效果,所以我最终将声音更改为midi文件,这些文件处理得更好。如果有人找到解决方案,我仍然希望听到它。

1 个答案:

答案 0 :(得分:1)

这个问题没有很好的解决方案,但这里有如何缓解它:

  • 创建一个单独的线程来播放声音(即在播放器上调用.start()的线程,因为这是挂起的函数)
  • 如果您的游戏帧速率过高而导致您使用100%的CPU,则媒体播放器将无法获得足够的时间在帧之间准备缓冲区,因此需要很长时间才能运行。降低帧速率以提供帮助。
  • 在开发者大会上,RIM展示了Wave Mixer的代码,该代码应该通过在将传入的声音文件混合到流中时保持播放器打开来解决问题。但是他们还没有发布代码。
  • 在OS 7上,在高CPU负载下,midi文件会破坏帧速率,所以请避免使用它。