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 :

Gérer l'acces au master Volume, probleme conversion WPF (win7) [Débutant]


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Manche (Basse Normandie)

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Gérer l'acces au master Volume, probleme conversion WPF (win7)
    Bonjour,

    je suis tout débutant en C# et je galère pour le contrôle du son.

    Je tente de retranscrire un exemple winforms en WPF:

    http://www.codeproject.com/Articles/...Volume-Control

    J'ai bien réussi à implanter le "Timer", le slider, le contrôle, mais je n'arrive pas à récupérer le valeur du son en cours ce qui fait que mon appli lance le son à 100%.

    Elle recup bien une valeur si je modifie le son dans windows, mais si je change dans l'appli, le prochain lancement réinitialise le tout.

    Voila mon essai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using CoreAudioApi;
    using System.Threading;
     
     
    namespace Volume
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MMDevice device;
     
     
            public MainWindow()
            {
                DispatcherTimer dispatcherTimer = new DispatcherTimer();
                dispatcherTimer.Tick += new EventHandler(timer1_Tick);
                dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1);
     
                InitializeComponent();
     
                MMDeviceEnumerator DevEnum = new MMDeviceEnumerator();
                device = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
                tbMaster.Value = (int)(device.AudioEndpointVolume.MasterVolumeLevelScalar * 100);
                device.AudioEndpointVolume.OnVolumeNotification += new AudioEndpointVolumeNotificationDelegate(AudioEndpointVolume_OnVolumeNotification);
     
            }
     
            private void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data)
            {
     
     
                if (this.Dispatcher.Thread == System.Threading.Thread.CurrentThread)
                {
                    object[] Params = new object[1];
                    Params[0] = data;
     
                    this.Dispatcher.Invoke(new AudioEndpointVolumeNotificationDelegate(AudioEndpointVolume_OnVolumeNotification), Params);
     
     
     
                }
                else
                {
     
                }
            }
     
     
     
            private void tbMaster_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
            {
                device.AudioEndpointVolume.MasterVolumeLevelScalar = ((float)(tbMaster.Value / 100.0f));
     
            }
     
             private void timer1_Tick(object sender, EventArgs e)
            {
                VolumeMaster.Value = (int)(device.AudioMeterInformation.MasterPeakValue * 100);
     
            }
        }
    }
    Je ne comprend pas comment retranscrire cette partie qui lis le volume en cour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data)
            {
                if (this.InvokeRequired)
                {
                    object[] Params = new object[1];
                    Params[0] = data;
                    this.Invoke(new AudioEndpointVolumeNotificationDelegate(AudioEndpointVolume_OnVolumeNotification), Params);
                }
                else
                {
                    tbMaster.Value = (int)(data.MasterVolume * 100);
                }
            }
    J'ai découvert que les invoke n'était plus présent en WPF, je me suis tourné vers le dispatcher sans succès :s

    Quelqu'un pourrait m’orienter m'expliquer voir résoudre le soucis ?

    Merci

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour, le principe est le même.

    this.InvokeRequired => this.Dispatcher.CheckAccess()
    this.Invoke => this.Dispatcher.Invoke()

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Manche (Basse Normandie)

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci,

    J'avais tenté le checkAcces, mais cela ne marchait pas..

    Maintenant ça marche

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

Discussions similaires

  1. probleme conversion decimal to binaire
    Par aimad41 dans le forum C
    Réponses: 3
    Dernier message: 14/12/2006, 10h45
  2. [Conception] Probleme conversion texte & BD
    Par Seth77 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/06/2006, 17h22
  3. [JXTable]Gérer tri + accès aux données ?
    Par Baptiste Wicht dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 29/05/2006, 14h24
  4. comment gérer les accès concurents ?
    Par jejerome dans le forum Langage
    Réponses: 7
    Dernier message: 15/04/2006, 00h44
  5. Gérer les accès concurrents
    Par Royd938 dans le forum Langage
    Réponses: 1
    Dernier message: 19/10/2005, 12h27

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