IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème avec timers


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut Problème avec timers
    Bonjour,
    Je réalise un lecteur mp3 en C# avec WPF. Le problème est que lorsque j'affiche la progression dans la musique (CurrentPosition) à l'aide d'un timer. La musique se joue bien, l'affichage se fait également, mais le son est très saccadé, et lorsque j'enlève le timer la lecture se fait normalement.
    J'ai développer ce lecteur une 1ère foi en C# sans WPF et je n'est eut aucun problèmes de ce genre en utilisant la même démarche.
    Qui à une idée ?

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    essaie de lancer la lecture sur un autre thread
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    +1 pour la lecture et affichage sur 2 différents threads...
    et ça dépends aussi de la manière dont tu as écris ton code...Nous ne sommes pas du tout télépathes...

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    voici les bouts de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public Microsoft.DirectX.AudioVideoPlayback.Audio Musique = new Audio("dummy.mp3", false);
     
    Timer timer = new Timer();
    timer.Tick += new EventHandler(Timer_Tick);
    timer.Interval = 100;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private void Timer_Tick(object sender, EventArgs e)
    {
    TimeSpan tps_tot = TimeSpan.FromSeconds(Musique.Duration);
    TimeSpan tps_act = TimeSpan.FromSeconds(Musique.CurrentPosition);
    string duree = String.Format("{00:00}:{01:00}", tps_tot.Minutes, tps_tot.Seconds);
    string en_cours = String.Format("{0:00}:{1:00}", tps_act.Minutes, tps_act.Seconds);
    AffTemps.Content = "Tps : " + en_cours + " / " + duree;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Song musique = Playlist_Actuelle[play];
    try
    {
    Musique.Open(musique.chemin, true);
    SetNewVolume(vol);
    timer.Start();
    Musique.Play();
    }
    catch (Exception)
    {
    Aff.Content = "Erreur !!!";
    }

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Bonjour,

    A première vue je pense que plutôt que de faire à chaque tick de ton timer les opérations suivantes :

    Citation Envoyé par window62123 Voir le message
    voici les bouts de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private void Timer_Tick(object sender, EventArgs e)
    {
    TimeSpan tps_tot = TimeSpan.FromSeconds(Musique.Duration);
    TimeSpan tps_act = TimeSpan.FromSeconds(Musique.CurrentPosition);
    string duree = String.Format("{00:00}:{01:00}", tps_tot.Minutes, tps_tot.Seconds);
    string en_cours = String.Format("{0:00}:{1:00}", tps_act.Minutes, tps_act.Seconds);
    AffTemps.Content = "Tps : " + en_cours + " / " + duree;
    }
    Il serait préférable, à chaque début de musique de mémoriser la durée totale de ta piste de musique dans une variable (en seconde).

    Puis de gérer ta progress bar sur cette durée.

    J'entends par là de définir le 100% de ta progress bar comme étant la durée totale de ta piste puis à chaque tick de ton timer simplement ajouter 1% (un tick = 1 sec) à ta progress bar.
    De cette façon tu obtiendras le rendu que tu souhaites.

    En espérant que cela va t'aider.

    Bonne journée.

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    merci de m'avoir repondu mais je dois garder mon affichage tel qu'il est la. je peut ajouter une progresse bar mais le temps doit rester afficher.
    En revanche meme avec ta solution le son reste saccadé.

  7. #7
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Citation Envoyé par kaiko Voir le message
    A première vue je pense que plutôt que de faire à chaque tick de ton timer les opérations suivantes ...

    ...1% (un tick = 1 sec) à ta progress bar.
    Désolé c'est pas pour être casse-c......, mais l'évènement se déclenche toutes les 0.1secondes comme c'est dans son code. de plus 1 tick n'est pas du tout égal à une seconde. Pour la classe timer c'est 1 tick est égal au laps de temps défini dans interval(en millisecondes). De plus il a raison ça ne changera rien pour son problème.

  8. #8
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Par contre, si tu essayais de mettre la lecture dans un nouveau thread que le thread principal, je pense que ça pourrais décharger le thread principal et donc éviter à ton son de saccader... Si c'est déjà ce que tu fais n'en tiends pas compte mais le code que tu as posté laisse penser que la lecture se fait dans le thread principal...

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    J'ai essayé mais le problème c'est que ma fonction de lecture est appelé par le programme principale et donc executé par celle ci. Je débute pourrai tu m'aider pour la lecture dans un thread séparé stp.

  10. #10
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    t'aider bien sur c'est le but si tu viens ici mais te faire tout le boulot certainement pas...
    Super article d'Olivier Brin, facile à comprendre pour les débutant et de très bons exemples...Avec ça tu n'auras pas d'excuses...
    http://emerica.developpez.com/csharp/threads/

    et en plus tu verra que pour mettre et/ou enlever la pause ça sera largement plus facile...

  11. #11
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    merci beaucoup ca a l'air super.
    Je potasse ca je test et je te tien au courant.
    Merci beaucoup

  12. #12
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    bon j'ai bien compris les threads mais pour mon cas ici quelle fonction doit exécuté mon thread ? la fonction Play() sur Musique (si oui comment faire) ou bien la fonction Jouer() (le 3ème bout de code ). J'avoue les thread pour des cas simples je comprends mais la je vois pas trop.

  13. #13
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    tu mets ça dans le thread avec un paramètre nom de la musique.chemin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Song musique = Playlist_Actuelle[play];
    try
    {
    Musique.Open(musique.chemin, true);
    SetNewVolume(vol);
    timer.Start();
    Musique.Play();
    }
    catch (Exception)
    {
    Aff.Content = "Erreur !!!";
    }

  14. #14
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    Bon mauvaise nouvelle j'ai essayer hier soir de faire la lecture dans un thread différent. bon alors ca fonctionne (merci a sisqo60) , mais mon problème de son saccadé est toujours présent.
    Donc la je suis dans le noir totale.
    Je précise ma machine est suffisamment puissante (Core 2 Duo 3Ghz, 8Go RAM)

  15. #15
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    C'est bon j'ai trouvé pourquoi cela saccadé. Il s'assagissait d'un affichage qui faisait change la position d'un slider dans la routine du timer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec Timer
    Par fangriz dans le forum Struts 1
    Réponses: 1
    Dernier message: 23/07/2009, 14h39
  2. problème avec timer
    Par lokardz dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/05/2009, 16h05
  3. [C++/CLI] problème avec Timer ou delegate
    Par breezer911 dans le forum Visual C++
    Réponses: 1
    Dernier message: 11/04/2007, 15h27
  4. [D6] Problème avec timers
    Par dridri86 dans le forum Delphi
    Réponses: 5
    Dernier message: 15/01/2007, 13h57
  5. Toujours un problème avec Timer
    Par adidas40 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/10/2006, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo