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 à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 12
    Points
    12
    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 sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    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 éprouvé 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
    Points : 1 188
    Points
    1 188
    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...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 12
    Points
    12
    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
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 32
    Points
    32
    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 à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 12
    Points
    12
    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 éprouvé 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
    Points : 1 188
    Points
    1 188
    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.
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  8. #8
    Membre éprouvé 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
    Points : 1 188
    Points
    1 188
    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...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 12
    Points
    12
    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 éprouvé 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
    Points : 1 188
    Points
    1 188
    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...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  11. #11
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 12
    Points
    12
    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 à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 12
    Points
    12
    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 éprouvé 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
    Points : 1 188
    Points
    1 188
    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 !!!";
    }
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  14. #14
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 12
    Points
    12
    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 à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 12
    Points
    12
    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