Je suis en train de créer une application qui affichera plusieurs images à l'écran. Ces images seront des boutons qui, lorsqu'on les touchera, produiront un son bref. J'ai fait des recherches à ce sujet et je n'ai trouvé que la méthode actuelle que j'utilise pour jouer des sons, qui ne semble pas du tout réactive. Je veux que le son soit joué rapidement et qu'il réponde à de nombreuses pressions rapides. Je n'étais pas sûr que cela soit possible sous Android.
Le code que j'utilise pour jouer mon son est le suivant :
Button sound1;
MediaPlayer firstSound;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
firstSound = MediaPlayer.create(SoundActivity.this, R.raw.click);
sound1 = (Button) findViewById(R.id.Sound1);
beaver.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
firstSound.start();
}
});
}
Mon problème de lag pourrait aussi être dû à la façon dont j'utilise l'objet media player ? J'ai l'impression que cela devrait être plus fluide sur mon téléphone. Toute suggestion sur la façon de lire des sons sous Android sera appréciée.
Merci.
Depuis que j'ai découvert Sound Pool, j'ai modifié mon code pour l'utiliser et cela fonctionne parfaitement, le nouveau code ressemble à ceci :
SoundPool soundPool;
HashMap<Integer, Integer> soundPoolMap;
int soundID = 1;
Button sound1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(soundID, soundPool.load(this, R.raw.click, 1));
sound1 = (Button) findViewById(R.id.bBeaver);
sound1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
float curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float leftVolume = curVolume/maxVolume;
float rightVolume = curVolume/maxVolume;
int priority = 1;
int no_loop = 0;
float normal_playback_rate = 1f;
soundPool.play(soundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate);
}
});
}
Merci