En regardant le example lié, vous devrez appeler fadeIn()/fadeOut() dans une boucle, pour augmenter/diminuer le volume sur une période de temps. deltaTime serait le temps entre chaque itération de la boucle.
Vous devez le faire dans un thread distinct de votre thread d'interface utilisateur principal, afin de ne pas le bloquer et provoquer le blocage de votre application. Vous pouvez le faire en mettant cette boucle dans un nouveau Thread/Runnable/Timer.
Voici mon exemple pour la décoloration dans (vous pouvez faire une chose similaire pour la sortie en fondu):
int volume = 0;
private void startFadeIn(){
final int FADE_DURATION = 3000; //The duration of the fade
//The amount of time between volume changes. The smaller this is, the smoother the fade
final int FADE_INTERVAL = 250;
final int MAX_VOLUME = 1; //The volume will increase from 0 to 1
int numberOfSteps = FADE_DURATION/FADE_INTERVAL; //Calculate the number of fade steps
//Calculate by how much the volume changes each step
final float deltaVolume = MAX_VOLUME/(float)numberOfSteps;
//Create a new Timer and Timer task to run the fading outside the main UI thread
final Timer timer = new Timer(true);
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
fadeInStep(deltaVolume); //Do a fade step
//Cancel and Purge the Timer if the desired volume has been reached
if(volume>=1f){
timer.cancel();
timer.purge();
}
}
};
timer.schedule(timerTask,FADE_INTERVAL,FADE_INTERVAL);
}
private void fadeInStep(float deltaVolume){
mediaPlayer.setVolume(volume, volume);
volume += deltaVolume;
}
Au lieu d'utiliser deux objets MediaPlayer séparés, je le ferais dans votre cas, utilisez un seul et échanger la piste entre les fondus. Exemple:
**Audio track #1 is playing but coming to the end**
startFadeOut();
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.setDataSource(context,audiofileUri);
mediaPlayer.prepare();
mediaPlayer.start();
startFadeIn();
**Audio track #2 has faded in and is now playing**
Hope this résout votre problème.
Merci, cela aidera puisque je n'ai pas encore trouvé de solution de travail! De plus, l'indication pour lancer ceci sur un nouveau fil est très utile aussi! Merci! – olop01