web-dev-qa-db-fra.com

Android: Lecture d'un clip audio onClick

Comment configurer un fichier audio pour qu'il soit lu lorsqu'un utilisateur touche une image.

Où devrais-je stocker le fichier audio et quel code dois-je utiliser pour lire le fichier? Je ne souhaite pas afficher l'interface MediaPlayer ou quoi que ce soit du genre.

Je pensais le faire comme ceci:

foo = (ImageView)this.findViewById(R.id.foo);
    foo.setOnClickListener(this);

public void onClick(View v) {
if (foo.isTouched()) {

 playAudioFile();
  }
}

Merci

27
Sachin

Cela ne créera pas d’affichage de l’interface MediaPlayer ... il ne fera que reproduire le son que vous voulez.

Button boton = (Button) findViewById(R.id.boton);
boton.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
  MediaPlayer mp = MediaPlayer.create(TestSonido.this, R.raw.slayer);  
  mp.start();
 }
});

Dans ce cas, R.raw.slayer représente un fichier audio appelé slayer.mp3 qui est stocké dans le dossier res/raw/ et une fois que vous avez cliqué sur le bouton, le droïde vous basculera ...

59
Cristian

Vous pouvez également obtenir la même chose en utilisant SoundPool.

MediaPlayer charge d'abord l'intégralité des données audio en mémoire, puis les lit. Il en résulte un décalage lorsque nous basculons fréquemment entre les sons.

SoundPool est une meilleure option avec un fichier son de petite taille et produit un meilleur résultat avec le fichier multimédia .ogg.

SoundPool pl = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
        // 5 indicates the maximum number of simultaneous streams for this SoundPool object
pl.setOnLoadCompleteListener(new OnLoadCompleteListener() {             
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                // The onLoadComplet method is called when a sound has completed loading.
                soundPool.play(sampleId, 1f, 1f, 0, 0, 1);
                // second and third parameters indicates left and right value (range = 0.0 to 1.0)
            }
});

Button btn = findViewById(R.id.boton);
btn.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {

     int sound = pl.load(this, R.raw.sound_01, 0);

 }
});
0
Aashish