2012-11-27 3 views
1

J'essaie de lire et de lire un fichier audio dans le lecteur multimédia et une fois que le fichier est complètement lu, je fais une boucle depuis une certaine position à partir de ce fichier spécifique et je répète la boucle.Bouclage dans Android Media Player

J'ai vu une méthode seekTo() qui joue à partir d'un point spécifique, mais je suis confus de la façon de lire d'abord le fichier complètement, puis d'utiliser la fonction seekTo.

Toute aide serait appréciée. Sudo code aidera un puits.

Ajout de code:

Voici le code que je l'ai essayé mais il laisse un vide pendant environ une seconde avant de jouer à nouveau le son.

public void playBackgroundMusic() { 
    AssetFileDescriptor descriptor = null; 
    try { 
     descriptor = context.getAssets().openFd("music/" + FILE_NAME); 
     try { 
      this.mediaPlayer.setDataSource(descriptor.getFileDescriptor(), 
        descriptor.getStartOffset(), descriptor.getLength()); 
     } catch (IllegalStateException e) { 
      this.mediaPlayer.reset(); 
      this.mediaPlayer.setDataSource(descriptor.getFileDescriptor(), 
        descriptor.getStartOffset(), descriptor.getLength()); 
     } 
     if (listener != null) { 
      this.mediaPlayer.setOnCompletionListener(listener); 
     } 
     this.mediaPlayer.setOnErrorListener(new OnErrorListener() { 

      @Override 
      public boolean onError(MediaPlayer arg0, int arg1, int arg2) { 
       // TODO Auto-generated method stub 
       return false; 
      } 
     }); 
     this.mediaPlayer.setLooping(false); 
     this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     this.mediaPlayer.prepare(); 
     this.mediaPlayer.start(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (descriptor != null) { 
       descriptor.close(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

private OnCompletionListener listener = new OnCompletionListener() { 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     mp.seekTo(DEFAULT_LOOPING_TIME); 
     mp.start(); 
    } 
}; 
+0

qui api votre utilisation pour effectuer cette tâche. pouvez-vous poster ce que vous avez essayé .. –

+0

@ TechEnd J'utilise api 8 (Android 2.2) pour effectuer cette tâche. Je n'ai pas encore commencé à mettre en œuvre la chose, mais je n'ai pas pu mettre la mise en œuvre directement dans ma tête. –

+0

Je veux dire que vous utilisez API AudioRecord ou API Android MediaPlayer ??? Je dint poser des questions sur la version. –

Répondre

0
  • jouent les médias dès le début.
  • Utilisez l'événement onPlaybackFinished ou quelque chose de similaire pour démarrer le médias à nouveau, cette fois avec la méthode seekTo()
+0

Essayé cela mais quand les sons se terminent il laisse une bosse entre comme aucun son pendant 1 seconde, puis il commence à répéter. Toute solution pour cela? J'ai besoin d'être lisse sans arrêts. –

+0

J'ai ajouté le code sur la question si vous pouvez y jeter un coup d'oeil. –