有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在BlackBerry上播放声音的java问题

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

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

除了模拟器,我还测试了物理设备。在模拟器上,一定有一个bug,因为声音开始之前需要几秒钟(我听说这是模拟器的问题,所以…)

我也做了测试。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) 个答案

  1. # 1 楼答案

    这个问题没有好的解决方案,但下面是如何缓解它:

    • 创建一个单独的线程来播放声音(这是将在播放器上调用.start()的线程,因为这是挂起的函数)
    • 如果游戏的帧速率太高,导致使用了100%的CPU,媒体播放器将没有足够的时间准备帧间缓冲区,因此需要很长时间才能运行。将帧速率降低一点以提供帮助
    • 在开发者大会上,RIM展示了一款混音器的代码,该混音器可以在将传入的声音文件混入流中的同时保持播放器打开,从而解决问题。然而,他们还没有发布代码
    • 在OS 7上,在高cpu负载下,midi文件会影响帧速率,所以要避免