2010-01-25 6 views
1

J'ai le problème suivant lors de la lecture des sons sur la mûre:Problèmes avec le jeu des sons sur le BlackBerry

  • La première fois qu'un son est joué, l'application se bloque pour ~ 500 ms (pas lorsque le lecteur est créé, juste au moment où le son est en fait joué)
  • Il y a un délai entre l'appel et le son en cours de lecture

Je l'ai testé sur un dispositif physique en plus du simulateur. Sur le simulateur, il doit y avoir un bug, car il faut quelques secondes avant que les sons ne commencent (j'ai entendu dire que c'était un problème avec le simulateur, donc ...). J'ai aussi testé les fichiers .wav vs .mp3, et ça donne à peu près le même résultat.

Voici le code que j'utilise pour charger un joueur:

  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(); 
      } 

Je puis stocker la référence du lecteur, que j'utiliser plus tard pour jouer le son avec le code suivant:

  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(); 
        } 
      } 

I suis positif le retard est dû au son joué car j'ai un interrupteur pour l'éteindre et les retards disparaissent quand je le fais. Y a-t-il quelque chose que je fais de mal?

Mise à jour

Rien n'a fonctionné, donc j'ai fini par changer les sons des fichiers MIDI qui sont mieux traités. Si quelqu'un trouve une solution, je voudrais quand même l'entendre cependant.

Répondre

1

Il n'y a pas de bonne solution au problème, mais voici comment l'atténuer:

  • Créer un thread séparé pour jouer les sons (qui est le fil qui appellera .start() sur les joueurs , puisque c'est la fonction qui se bloque)
  • Si la fréquence d'images de votre jeu est trop élevée et que par conséquent vous utilisez 100% de la CPU, le lecteur multimédia n'aura pas assez de temps pour préparer le tampon entre les trames, donc il faudra beaucoup de temps pour courir. Baissez un peu le taux de trame pour aider. Lors de la conférence des développeurs, RIM a montré le code d'un Wave Mixer qui devrait résoudre le problème en gardant un lecteur ouvert tout en mélangeant les fichiers audio entrants dans le flux. Cependant, ils n'ont pas encore publié le code.
  • Sous OS 7, sous une charge de processeur élevée, les fichiers midi gâchent la fréquence d'images, alors évitez-le.
Questions connexes