Salut !
je realise une application qui permet de lire des fichiers audio et video avec la classe AudioVideoPlayback (entre autres) du SDK de directX.
Mon probleme est que l'affichage du positionnement du déroulement du fichier est byzarre (je gere un trackbar en relation avec un timer).
Par exemple, je veux lire un fichier qui dure 1m28 s, je démarre la lecture et lorsque le fichier est terminé, le curseur n'atteint pas le maximum de la trackbar : il s'arrete a 1cm du minimum. Par contre lorsque je clique sur le trackbar, le curseur reprend un comportement normal et se deplace plus rapidement, et s'arrete au maximum du trackbar.
Voici mon code pour la relation timer et trackbar :
//evenement tick du timer
private void timer_Tick(object sender, EventArgs e)
{
if (maVideo != null)
{
//on convertit en duré de secondes la position de la piste
TimeSpan ts_Encours_asc = TimeSpan.FromSeconds(maVideo.CurrentPosition);
//on soustrait la durée totale de la piste par sa position en cours pour réaliser un compte à rebour
TimeSpan ts_Encours_des = TimeSpan.FromSeconds(maVideo.Duration) - ts_Encours_asc;
//on applique la position de la piste a la valeur de la barre trackBar_play
trackBar_play.Value = Convert.ToInt32(maVideo.CurrentPosition);
//affichage
lb_encours_asc.Text = ts_Encours_asc.ToString().Substring(0, 8);
lb_encours_des.Text = ts_Encours_des.ToString().Substring(0, 8);
}
else if (monAudio != null)
{
TimeSpan ts_Encours_asc = TimeSpan.FromSeconds(monAudio.CurrentPosition);
TimeSpan ts_Encours_des = TimeSpan.FromSeconds(monAudio.Duration) - ts_Encours_asc;
trackBar_play.Value = Convert.ToInt32(monAudio.CurrentPosition);
lb_encours_asc.Text = ts_Encours_asc.ToString().Substring(0, 8);
lb_encours_des.Text = ts_Encours_des.ToString().Substring(0, 8);
}
}
//barre d'affichage de l'écoulement de la piste audio
private void trackBar_play_Scroll(object sender, EventArgs e)
{
if (maVideo != null)
{
//permet de choisir la position de la lecture dans la durée de la piste
maVideo.CurrentPosition = Convert.ToDouble(trackBar_play.Value);
//définit la taille maximum de la barre par rapport a la durée de la piste
trackBar_play.Maximum = Convert.ToInt32(maVideo.Duration);
}
else if (monAudio != null)
{
monAudio.CurrentPosition = Convert.ToDouble(trackBar_play.Value);
trackBar_play.Maximum = Convert.ToInt32(monAudio.Duration);
}
}
et je démarre le timer des que le fichier est ouvert :
//démarrage du timer
timer.Interval = 100;
timer.Start();
Voila, si vous avez des réponses, merci d'avance
