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

OpenOffice & LibreOffice Discussion :

[Basic OO]Regler le volume sonore


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut [Basic OO]Regler le volume sonore
    Bonjour

    comment regler le volume sonore dans Basic Open Office

    j'ai bien ceci mais je n'arrive pas a placer dans la fonction le parametre " A " pour regler le volume sonore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Declare Function PlaySound2 Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
     
    function CommandSound(A)
        'reglage son
        ' sndvol32 [-D audio_device_number] [-Record | -Play] [-Normal | -Small | -Tray]
        Dim R As Long
        R = Shell("sndvol /p", vbNormalFocus)
    End function
    merci

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    b'soir,

    sndvol32 , te permet juste d'afficher la boite de dialogue standard de réglage du volume :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    R = Shell("sndvol32 /t", vbNormalFocus)

    pour le modifier une solution est l'utilisation de l'API waveOutSetVolume



    pour régler le son :



    Code vb : 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
     
    Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As Integer, ByVal dwVolume As Long) As Integer
     
    Sub MonteVolume(i As Integer) 'Volume de 0 à 100%
     Dim stVolDr As String 'Volume Droit
     Dim stVolGa As String  'Volume gauche
     
     Dim j As Long
     j = CLng(&HFFFF)
     Debug.Print Hex(j)
     
     '
     ' L'API permet de régler les canaux droite et gauche indépendament
     '  les 4 octets de poids ford sont utilisés pour la voie de gauche
     '  Les 4 octers de poids faible sont utilisés pour la voie de droite
     '
     stVolGa = Hex((i / 100) * 65535)
     stVolDr = Right("0000" & Hex((i / 100) * 65535), 4)
     Ret = waveOutSetVolume(0, CLng("&h" & stVolGa & stVolDr))
     
    End Sub

    waveOytSetVolume prend en deuxième paramètre un long (32bits) les 16 bits de poids fort sont utilisé pour le volume de la voie de gauche les 16 bits de poids faible pour la voie de droite..
    avec pour les deux voies 0 = muet &hFFFF (65535) donne volume maximum)
    le code ci-dessus effectue une mise à l'échelle 0-100 % vers 0 - 65535..

  3. #3
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    Bonjour

    je n'arrive pas a adapter la fonction le basic OO me donne une erreur a

    mario

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    enlève la ligne c'est du VB


    j'ai oublié de la supprimer.

  5. #5
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    bonjour

    voici ou j'en suis , la procedure complete

    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
     
    Declare Function PlaySound2 Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
     
    Declare Function waveOutSetVolume Lib "Winmm.dll" (ByVal wDeviceID As Integer, ByVal dwVolume As Long) As Integer
     
    Sub MonteVolume(i As Integer) 'Volume de 0 à 100%
     Dim stVolDr As String 'Volume Droit
     Dim stVolGa As String  'Volume gauche
     
    ' Dim j As Long
    ' j = CLng(&HFFFF)
    ' Debug.Print Hex(j)
     
     stVolGa = Hex((i / 100) * 65535)
     stVolDr = Right("0000" & Hex((i / 100) * 65535), 4)
     Ret = waveOutSetVolume(0, CLng("&h" & stVolGa & stVolDr))
     
    End Sub
     
     
     
    function PlaySound(A)
    if A = "OK" then	
    			'MonteVolume(100)
    			PlaySound2("C:\Program Files\OpenOffice.org 2.4\share\gallery\sounds\OK.wav", &H0, &H20000)		
    			end if
    if A = "XXXXX" then 
    			'MonteVolume(50)
    			PlaySound2("C:\Program Files\OpenOffice.org 2.4\share\gallery\sounds\explos.wav", &H0, &H20000)
    			end if
    end function
    si je suprime " Debug.Print Hex(j) " , pas d'erreur (ou les trois lignes qui ont la variable ' j ' alors inutilisee)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ' Dim j As Long
    ' j = CLng(&HFFFF)
    ' Debug.Print Hex(j)
    si je fais appel a la sub MonteVolume(100) je n'ai plus de son , (meme en mettant n'importe quelle valeur)
    je suis oblige de la supprimer

    mario

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    Place sur ton UserForm 2 barres de défilement horizontales.
    Appelle-les HScrollG (pour celle du réglage à gauche) et HScrollD (pour celle du réglage à droite)
    Ne te préoccupe pas de leurs propriétés Min, Value et Max ...

    et mets ce code :

    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
    Option Explicit
    Private Declare Function waveOutSetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long
    Private Declare Function waveOutGetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long
     
    Public VolG As Long, VolD As Long, coucou As Long, volumeG As Long
     
    Private Sub Form_Initialize()
      coucou = waveOutGetVolume(0, volumeG)
      VolG = volumeG And &HFFFF&
      VolD = ((volumeG And &HFFFF0000) / &H10000) And &HFFFF&
      With HScrollG
        .Min = 0
        .Max = 6553
        .Value = VolG / 10
      End With
      With HScrollD
        .Min = 0
        .Max = 6553
        .Value = VolD / 10
      End With
    End Sub
     
    Private Sub HScrollG_Change()
      VolG = CLng(HScrollG.Value) * 10
      coucou = waveOutSetVolume(0, CLng("&H" + Hex$(VolD) + Hex$(VolG)))
    End Sub
     
    Private Sub HScrollG_Scroll()
      HScrollG_Change
    End Sub
    Private Sub HScrollD_Change()
      VolD = CLng(HScrollD.Value) * 10
      coucou = waveOutSetVolume(0, CLng("&H" + Hex$(VolD) + Hex$(VolG)))
    End Sub
     
    Private Sub HScrollD_Scroll()
      HScrollD_Change
    End Sub
    Mets de la musique (lance_la à part)
    Lance ton appli et joue avec les barres de défilement...

  7. #7
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    bonjour ucfoutu

    on parle bien ici de l'editeur Basic inclus dans OpenOffice 2.4.1 et Vista SP1
    ou j'ai colle la totalite de ta procedure
    (je suis dans une feuille de calcul)

    PS:je quitte totalement OO pour chaque test

    a l'ouverture de la feuille ,

    Syntax error BASIC
    Symbole attendu
    au niveau "Private Declare Function ......" , je supprime les deux Private

    alors il n'y a plus d'erreur et mon ancienne procedure fonctionne normalement avec le max de son
    il n'y a pas d'ascensseur dans ma feuille ,

    et le son ne se fait que sur l'HP de gauche !
    je supprime ta procedure pour verifier avec uniquement ma procedure d'origine et , aussi le son a gauche ??

    mario

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Non ...
    Pas sur la feuille de calcul !
    Il te faut créer un UserForm (ou l'équivalent en Open Office), y mettre tes barres de défilement et le code.

    Je n'ai pas Open Office pour tester... ni même pour savoir s'il accepte la déclaration de fonctions de l'Api de Windows...

    Je l'ai testé sous VB et il marche fort bien...
    Tu auras sans doute à changer, de ton côté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Form_Initialize()
    par l'équivalent (le nom) de ton UserForm (à la place de Form).
    Je viens de le faire avec VBA/Excel (en changeant Form par UserForm) =====>>> aucun souci ===>>> marche impeccablement.

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Salut, Mario

    remet l'appel à la fonction MonteVolume

    et essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     'Ret = waveOutSetVolume(0, CLng("&h" & stVolGa & stVolDr))
     Ret = waveOutSetVolume(0, -1)
    voir si au moins l'appel à la fonction ce passe bien .. à priori certaines fonctions (Hex, Clng ) ne se comporte pas pareil en basic oOo et VB

  10. #10
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    bonjour

    Non ...
    Pas sur la feuille de calcul !
    ucfoutu je me suis mal exprime , la procedure est destinee a une feuille de calcul ,
    bien entendu tout se fait dans l'editeur basic et je n'ai vu aucun de resultat dans la feuille

    Il te faut créer un UserForm (ou l'équivalent en Open Office), y mettre tes barres de défilement et le code.
    desole ucfoutu je n'ai pas asser de connaissance pour faire ce que tu veux !

    bbil j'ai fat ce que tu as dis et a l'appel de
    MonteVolume(100)
    ou n'importe quelle valeur ne donne aucun son

    mario

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bon,

    on va y aller lentement et étape par étape our y voir clair :
    Etape 1 avec uniquement ceci dans une macro lancée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Declare Function waveOutGetVolume Lib "winmm.dll" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long
     
    Public VolG As Long, VolD As Long, coucou As Long, volumeG As Long
     
    sub toto() 
      coucou = waveOutGetVolume(0, volumeG)
      MsgBox coucou & vbCrLf & volumeG
    end sub
    Tu lances toto et nous dis ce qui s'affiche
    Ce sera déjà une indication sur le comportement de OOO en ce qui concerne les déclarations

  12. #12
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    Bonjour

    ha ha allons y gaiement

    la procedure fonctionne la boite MessageBox s'affiche avec un nombre sur une seule ligne
    (le & vbCrLf & n'est pas interpreté) je separe les deux variables par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MsgBox coucou &" coucou "& volumeG
    et j'obtiens 0 coucou 19333119 , je clique et le son s'execute sur l'HP de gauche (deja depuis hier sur le HP gauche ??)

    mario

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonsoir,

    tu refais la même chose, mais avant met le son aux maximum des 2 côtés...

    19333119 donne : 126FFFF , donc les 4 F de droite montre bien que la voie de gauche et au maximum , par contre à droite 0x126 sur 0xFFFF cela ne fait pas beaucoup.

  14. #14
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    Bonsoir

    le son est toujours au max maintenant il me donne 17563647
    j'ai du m'y prendre plusieurs fois de suite pour avoir le son alors que ma feuille originale a fonctionne tout de suite (sur un seul HP G !)

    j'ai affiche le "melangeur de volume" pour surveiller les potensiometres et ils sont tous au maximum

    j'ai chercher pour affichage en stereo mais je ne vois pas

    si je met un fichier musique , le hauts parleurs GD vont normalement pas de probleme

    PS:maintenant je n'ai plus le son (comme au depart) et le potensiometre du melangeur windows est au max?

    mario

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Je ne comprends pas !

    Une idée, peut-être ...

    Si ton matériel réagit comme le mien (mon clavier) ...
    Les touches de mon clavier (celles qui servent à augmenter le son, à le diminuer ou à rendre muet) prennent le pas sur tout le reste (elles semblent agir directement sur le matériel).
    Chez moi, c'est depuis mon clavier. Celà pourrait être chez toi depuis ton clavier ou depuis tout élément "matériel" autre (un mixer ?)
    Pour que le code donné (tant celui de bbil que le mien), il est indispensable que tous ces boutons soient aux maxima. C'est sur ces maximas "matériels" qu'intervient le code.

  16. #16
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    resolu depuis hier

    je m'explique

    je travaillais sur 3 feuilles une bbil une ucfoutu et une avec le code de vb et develloppez

    la procedure bbil ne donnait rien mais les chiffres de ucfoutu etaient bon ? ?

    j'ai cherche alors dans le code vb (que je testais et modifiais) et j'ai mis les parametres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lgVolG = lgVolG + &H1000 en
    lgVolG = lgVolG + &HFFFF
     
    lgVolR = lgVolR + &H1000 en
    lgVolR = lgVolR + &HFFFF
    et j'ai le volume max sur les deux HP et la procedure bbil fonctionne impec avec reglages de 0 a 100%

    mais il y a maintenant une chose que je ne comprends pas ,
    je met n'importe quel parametre a ces deux procedures et la procedure bbil fonctionne indifferement a ces parametres
    elle fonctionne impec

    ps:c'est un peux saugrenu il manque certainement des detail mais maintenant ca fonctionne
    et , est ce que c'est possible que la procedure d'une feuille peut influer sur une autre feuille
    merci bbil et ucfoutu

    je vai mettre un lien de OO sur ce post pour la communaute

    ici le post de OO sur le sujet son
    http://fr.openoffice.org/servlets/Re...rog&msgNo=6999

    mario

  17. #17
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    Bonjour

    reprise de mon ancien post son avec OO2.4

    mais maintenant avec la version " OOO330m17 (Build:9551) "

    la fonction bloque totalement l'ordinateur

    pour débloquer OO je fais CTRL+ALT+SUPP puis annuler pour revenir dans mon bureau
    et OO se débloque avec

    " Action non supportée. Appel de procédure non valide "

    sur la ligne : et sur le type Long

    Declare Function PlaySound2 Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
    cordialement mario

Discussions similaires

  1. Ajuster le volume sonore
    Par morgalel dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 06/11/2008, 13h13
  2. Réponses: 0
    Dernier message: 05/04/2008, 19h53
  3. Réponses: 4
    Dernier message: 01/07/2007, 16h10
  4. controle volume sonore javascript
    Par Jérémy Lefevre dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/04/2007, 15h14
  5. [Volume sonore] Comment séparer les volumes
    Par Manopower dans le forum Windows
    Réponses: 1
    Dernier message: 05/09/2005, 12h50

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