Mit Blick auf die verknüpfte example, müssten Sie fadeIn()/fadeOut() in einer Schleife aufrufen, um die Lautstärke über einen bestimmten Zeitraum zu erhöhen/verringern. deltaTime wäre die Zeit zwischen jeder Iteration der Schleife.
Sie müssten dies in einem separaten Thread von Ihrem Haupt-UI-Thread tun, damit Sie ihn nicht blockieren und zum Absturz Ihrer App führen. Sie können dies tun, indem Sie diese Schleife in ein neues Thread/Runnable/Timer einfügen.
Hier ist mein Beispiel für Verblassen in (Sie können für Ausblendung eine ähnliche Sache tun):
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;
}
Anstelle der Verwendung von zwei separaten Mediaplayer-Objekten, würde ich in Ihrem Fall der Verwendung nur einer und die Spur wechseln zwischen den Fades. Beispiel:
**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 löst Ihr Problem.
Danke, das hilft, da ich noch keine andere funktionierende Lösung gefunden habe! Auch der Hinweis, dies in einem neuen Thread zu tun, ist sehr hilfreich! Vielen Dank! – olop01