Réglage du son sur pc

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Utilisateur Lambda
Messages : 4
Inscription : dim. 23/déc./2018 19:13

Réglage du son sur pc

Message par Utilisateur Lambda »

Bonjour tout le monde,
Je bricole Pb depuis un petit peu, et aujourd'hui je sèche sur un sujet.
Quelqu'un (ou une) saurait-il régler le volume général du pc logiciellement ?
SoundVolume(0, Volume, #PB_All) marche très bien mais uniquement pour le son concerné. Moi ce que je recherche, c'est le volume général.
Merci pour vos éventuels éclaircissements.
Bonne journée à toutes et à tous.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Réglage du son sur pc

Message par Kwai chang caine »

Bonjour et bienvenue dans le monde magique de PB :wink:
Code de TsSoft normalement

Code : Tout sélectionner

EnableExplicit

#CLSCTX_INPROC_SERVER  = $01
#CLSCTX_INPROC_HANDLER = $02
#CLSCTX_LOCAL_SERVER   = $04
#CLSCTX_REMOTE_SERVER  = $10

#CLSCTX_ALL    = #CLSCTX_INPROC_SERVER|#CLSCTX_INPROC_HANDLER|#CLSCTX_LOCAL_SERVER|#CLSCTX_REMOTE_SERVER
#CLSCTX_INPROC = #CLSCTX_INPROC_SERVER|#CLSCTX_INPROC_HANDLER
#CLSCTX_SERVER = #CLSCTX_INPROC_SERVER|#CLSCTX_LOCAL_SERVER|#CLSCTX_REMOTE_SERVER

Interface IMMDeviceEnumerator Extends IUnknown
  EnumAudioEndpoints(dataFlow, dwStateMask, *ppDevices);
  GetDefaultAudioEndpoint(dataFlow, role, ppEndpoint);
  GetDevice(pwstrId, ppDevice);
  RegisterEndpointNotificationCallback(pClient);
  UnregisterEndpointNotificationCallback(pClient);
EndInterface

Interface IAudioEndpointVolume Extends IUnknown
  RegisterControlChangeNotify( *pNotify)
  UnregisterControlChangeNotify( *pNotify)
  GetChannelCount( *pnChannelCount)
  SetMasterVolumeLevel( fLevelDB.f)
  SetMasterVolumeLevelScalar( fLevel.f,pguidEventContext)
  GetMasterVolumeLevel(*pfLevelDB)
  GetMasterVolumeLevelScalar(*pfLevel)
  SetChannelVolumeLevel(nChannel,fLevelDB.f,pguidEventContext)
  SetChannelVolumeLevelScalar( nChannel,fLevel.f,pguidEventContext)
  GetChannelVolumeLevel( nChannel,*pfLevelDB.f)
  GetChannelVolumeLevelScalar( nChannel,*pfLevel.f)
  SetMute( bMute, pguidEventContext)
  GetMute( *pbMute)
  GetVolumeStepInfo( *pnStep, *pnStepCount)
  VolumeStepUp( pguidEventContext)
  VolumeStepDown( pguidEventContext)
  QueryHardwareSupport( *pdwHardwareSupportMask)
  GetVolumeRange( *pflVolumeMindB, *pflVolumeMaxdB, *pflVolumeIncrementdB)
EndInterface

Interface IMMDevice Extends IUnknown
  Activate(iid, dwClsCtx, pActivationParams, ppInterface);
  OpenPropertyStore( stgmAccess, ppProperties);
  GetId(ppstrId);
  GetState(pdwState);
EndInterface

Declare  getendpointvolume(*endpointvolume)
Declare  freeendpointvolume(*endpointvolume.iaudioendpointvolume)
Declare  mediagetvolume()
Declare  mediasetvolume(vol)

MediaSetVolume(255) ; de 0 a 255 

Procedure GetEndPointVolume(*endpointvolume)
  Protected deviceEnumerator.IMMDeviceEnumerator
  Protected hr, defaultDevice.IMMDevice
 
  CoInitialize_(#Null)
 
  hr = CoCreateInstance_(?uuidof_MMDeviceEnumerator, #Null, #CLSCTX_INPROC_SERVER, ?uuidof_IMMDeviceEnumerator,@deviceEnumerator);#CLSCTX_ALL

  hr = deviceEnumerator\GetDefaultAudioEndpoint(0, 1, @defaultDevice)
  deviceEnumerator\Release()

  hr = defaultDevice\Activate(?uuidof_IAudioEndpointVolume, #CLSCTX_INPROC_SERVER, #Null, *endpointVolume);
  defaultDevice\release()
 
  ProcedureReturn *endpointvolume
EndProcedure

Procedure FreeEndPointVolume(*endpointvolume.IAudioEndpointVolume)
  *endpointvolume\release()
  CoUninitialize_()
EndProcedure

Procedure MediaGetVolume()
  Protected Volume.IAudioEndpointVolume
  Protected volf.f

  GetEndPointVolume(@Volume)
  Volume\GetMasterVolumeLevelScalar(@volf)
  volf = Round(volf * 100, #PB_Round_Nearest)
  FreeEndPointVolume(Volume)
  ProcedureReturn Int(volf)
EndProcedure

Procedure MediaSetVolume(vol)
  Protected Volume.IAudioEndpointVolume
  Protected volf.f
  If vol < 0 : vol = 0 : EndIf
  If vol > 100 : vol = 100 : EndIf
  GetEndPointVolume(@Volume)
  volf = vol / 100
  Volume\SetMasterVolumeLevelScalar(volf, #Null)
  FreeEndPointVolume(Volume)
EndProcedure

DataSection
  uuidof_IAudioEndpointVolume:
  Data.l $5CDF2C82
  Data.w $841E,$4546
  Data.b $97,$22,$0C,$F7,$40,$78,$22,$9A
 
  uuidof_MMDeviceEnumerator:
  Data.l $BCDE0395
  Data.w $E52F,$467C
  Data.b $8E,$3D,$C4,$57,$92,$91,$69,$2E
 
  uuidof_IMMDeviceEnumerator:
  Data.l $A95664D2
  Data.w $9614
  Data.w $4F35
  Data.b $A7,$46,$DE,$8D,$B6,$36,$17,$E6
 
EndDataSection
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Utilisateur Lambda
Messages : 4
Inscription : dim. 23/déc./2018 19:13

Re: Réglage du son sur pc

Message par Utilisateur Lambda »

Merci de tout cœur honorable scarabée...
Ça fonctionne au poil, et je vais l'utiliser déjà tel quel dans l'urgence, et après seulement, je vais tenter de le décortiquer...
Merci encore et à plus.
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Re: Réglage du son sur pc

Message par Marc56 »

Quand même, y'a pas plus simple que de copier/coller 116 lignes de code (presque illisibles au codeur Basic) ? :(
Il y a une fonction C waveOutSetVolume qui devrait pouvoir être portée plus facilement ?
(à noter que SoundVolume dépend de DirectX, donc ne concerne pas les sons systèmes)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Réglage du son sur pc

Message par Kwai chang caine »

@Utilisateur Lambda
Content de t'avoir dépanné :wink: je retourne rouler ma bouse (de crotte) :D

@Marc
Surement...y'a toujours plus simple ou plus compliqué tout dépend pour qui.
Prend FRED ou TIMO !!! connaissent ils encore la définition de ce mot ? 8O
La difficulté n'est qu'une question relative aux connaissances acquises, ou à la capacité pour l'affronter.
Pour ma part tout est compliqué, alors un peu plus ou un peu moins :|
De plus j'ai pas compris un traitre mot de ce que tu as dit, et c'est sûr pas une ligne du code de TsSoft non plus :mrgreen:
Moi aussi j'ai trouvé que tout un placard pour bouger un curseur c'est "X a gérer" 8O mais y'a quand de même pas de quoi s'énerver non plus ..hein !!! :wink:
Factuellement, le code marche, et c'est en majorité ce que je demande à un code :wink: la première étant déjà d’exister 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Re: Réglage du son sur pc

Message par Marc56 »

Certes, mais à force de copier/coller des blocs de codes pour n'utiliser parfois qu'une infime fonction, on créé des programmes énormes. (nids à bugs et à virus potentiels)

Personnellement, à part de rares cas, je n'intègre pas de code dont je ne comprends pas le contenu.

:idea: L'intelligence de Fred and Team est justement de faire de PB un langage "mini mir" :mrgreen: (mini taille, mais fait le maximum)

Un objet/programme est au point non pas quand il n'y a plus rien à enlever, mais quand il n'y a plus rien à retirer (citation vague de je ne sais plus qui) :P

Je comprends l’éducation nationale (pas seulement en france) qui est obligé de remettre des cours d'informatique car on se rend compte que les jeunes ne font que du copier/coller de ce qui existe.
Et quand on me rétorque qu'il est inutile de réinventer la roue, je dis que sans volonté de recherche on aurait des voitures avec des roues en pierre :roll:

(j'arrête la digression pour ne pas polluer) :wink:
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Réglage du son sur pc

Message par Ar-S »

J'ai essayé d'utiliser waveOutSetVolume plus simplement mais ça ne marche pas. J'ai du zapper un truc.

Code : Tout sélectionner

Procedure SetWindowsVolume(VOL)

  
  If OpenLibrary(1,"winmm.dll")
    
    V = 65535/VOL ; A value of 0xFFFF represents full volume, and a value of 0x0000 is silence.

;     Affichage des commandes de la lib
;     Resultat = ExamineLibraryFunctions(1)
;     While NextLibraryFunction()
;       Debug LibraryFunctionName()
;     Wend

    CallFunction(1, "waveOutSetVolume",V)
    CloseLibrary(1)
    ProcedureReturn 1
  Else
    Debug "nok"
    ProcedureReturn 0
  EndIf
  
EndProcedure

Debug SetWindowsVolume(20)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Réglage du son sur pc

Message par Ollivier »

@ArS

fait 3 fonctions strictement indépendantes :
- une le son à "donf"
- une le son à 0
- une le son à moitiée

Si les 3 fonctions marchent c'est ton calcul 65535/V qui bugue.

Genre un << ... fois qqch >>... Produit en croix... Proportion...

@Kcc

Je te décerne la palme du contributeur le meilleur du moment. Devant cet inconnu qui s'est anonymisé par une lettre grecque, qui nous prouve que ce n'est pas un désireux de saboter le sonotone connecté W10 de sa voisine, pour satisfaire ses frauduleuses affaires de maintenance informatique ?

Tu es bon Kcc... Tu es puissant... Tu lui as mis un mur, un "ouhôle" comme disent les alliés... N'aie crainte des vertiges de la connaissance. Et continue sur ce chemin qui te pousse soudainement à t'exprimer en code source.

PS : Plus sérieusement, pour quelqu'un comme moi, qui ne "surfe" que très médiocrement sur le Net, je trouve bien de voir débarquer un code avec, en toute modestie, l'auteur d'origine (TsSoft).
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Réglage du son sur pc

Message par Ar-S »

Même en n'utilisant pas de calcul ça ne marche pas.

Code : Tout sélectionner

Procedure SetWindowsVolume(VOL = 2) ; de 0 Mute à 4 Max

  Select VOL
    Case 0   
      V = 0
    Case 1
      V = 16384   
    Case 2
      V = 32768 ; VOLUME à 50%
    Case 3
      V = 49152
    Case 4
      V = 65535
  EndSelect
  
  
  If OpenLibrary(1,"winmm.dll")
    
   
;     Affichage des commandes de la lib
;     Resultat = ExamineLibraryFunctions(1)
;     While NextLibraryFunction()
;       Debug LibraryFunctionName()
;     Wend

    CallFunction(1, "waveOutSetVolume",V)
    CloseLibrary(1)
    ProcedureReturn 1
  Else
    Debug "nok"
    ProcedureReturn 0
  EndIf
  
EndProcedure

Debug SetWindowsVolume(2)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Réglage du son sur pc

Message par G-Rom »

@ar-s

waveOutSetVolume_() est reconnu.

à priori , cette fonction ne marche plus avec w10.

http://www.vbforums.com/showthread.php? ... all-update
https://www.reddit.com/r/csharp/comment ... indows_10/
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Réglage du son sur pc

Message par TazNormand »

Salut

A tester sous windows 10 car je n'ai pas W10 :

Source : https://social.msdn.microsoft.com/Forum ... =vbgeneral

Code : Tout sélectionner

Enumeration
  #Vol_Mute=$80000
  #Vol_Up=$A0000
  #Vol_Down=$90000
  #AppCmd=$319
EndEnumeration

#WindowWidth  = 390
#WindowHeight = 350
If OpenLibrary(1,"mmdevapi.dll")
  
  If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "PureBasic - Gadget Demonstration", #PB_Window_MinimizeGadget)
    
    Top = 10
    GadgetHeight = 24    
    ButtonGadget(1, 223, Top,  72, GadgetHeight, "Mute")
    ButtonGadget(2, 295, Top,  72, GadgetHeight, "Up")  : Top+35
    ButtonGadget(3, 295, Top,  72, GadgetHeight, "Down")
    
    
    Repeat
      Event = WaitWindowEvent()      
      
      If Event = #PB_Event_Gadget
        Select EventGadget()          
          Case 1 ; Mute
            SendMessage_(WindowID(0),#AppCmd,WindowID(0),#Vol_Mute)
            If GetGadgetText(1)="Mute" 
              SetGadgetText(1,"UnMute")
            Else
              SetGadgetText(1,"Mute")
            EndIf          
      
          Case 2 ; Stop
            SendMessage_(WindowID(0),#AppCmd,WindowID(0),#Vol_Up)            
          Case 3
            SendMessage_(WindowID(0),#AppCmd,WindowID(0),#Vol_Down)      
          Case 8 ; Quit...
            Event = #PB_Event_CloseWindow
        EndSelect
      EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf
EndIf

End     
Image
Image
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Réglage du son sur pc

Message par Ar-S »

Salut TazNormand.
Le code fonctionne pour monter / descendre le volume, c'est sympa. Mais du coup on ne sait pas ou il en est ni comment le mettre à 80 / 100 par exemple.
Si on veut modifier le volume manuellement on peut faire un simple :mrgreen:

Code : Tout sélectionner

RunProgram ("sndvol.exe" ," -f","")  (ou sndvol32.exe si on a pas W10)
En tout cas ça m'aura pris le choux une bonne partie de l'aprem. J'arrête là mes recherches. On est le 24 ^^
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Réglage du son sur pc

Message par Kwai chang caine »

J'suis pas sûr que y'ai vraiment beaucoup de solutions plus simple :| C'est vrai que c'est une demande "super extravagante", merci CROCRO :mrgreen:
Même le GRAND NETMAESTRO s'y ai frotté sans succès 8O au niveau facilité je parle :wink:
https://www.purebasic.fr/english/viewto ... 38#p403838

Même notre bon NICO utilise le même style de placard....en plus long encore 8O , désolé MARC :|
J'ai refait un copié/collé.... (mon manque de connaissance m'y force bien souvent) :oops: mais pour ne pas me faire engueuler à nouveau, je me suis limité au lien :wink:
http://www.purebasic.fr/french/viewtopi ... 39#p179739
https://www.purebasic.fr/english/viewto ... 42#p479642
Ollivier a écrit :Plus sérieusement, pour quelqu'un comme moi, qui ne "surfe" que très médiocrement sur le Net, je trouve bien de voir débarquer un code avec, en toute modestie, l'auteur d'origine (TsSoft).
Merci OLLIVIER :wink:
Tu sais ...au niveau modestie...j'suis "un peu" obligé :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Re: Réglage du son sur pc

Message par Marc56 »

Kwai chang caine a écrit :Même notre bon NICO utilise le même style de placard....en plus long encore 8O , désolé MARC :|
Y'a pas de quoi :wink:
C'est bien de chercher dans les archives, mais quand le truc date de 5 ans (même s'il est bon) il est intéressant de voir si on peut pas faire mieux ou au moins plus simple. (IMHO). Si ça marche, tant mieux, mais on est souvent trop systématique au déterrage et ça devient un simple réflexe.

Cela dit, pour le volume, je comprend que les langages ne mettent pas ça comme fonction native: imaginons qu'un programme standard mette le son système "à fond", ce serait gênant pour l'utilisateur. Perso, il m'arrive d'avoir une musique de fond (douce) et de regarder un didacticiel youtube. Si une application remontait tous les canaux, ce serait insupportable (cependant cela ferait le bonheur des publicitaires) :mrgreen:

C'est donc bien que les applications ne modifient que leur propre volume et le tout en dessous du volume global.

:wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Réglage du son sur pc

Message par Kwai chang caine »

Bon remarque t'es mal tombé, pour une fois que tu fais un petit coup de calcaire, alors que dab tu m'aides 8)
Comme quoi...t'es fait pour être gentil, ce dont je n'ai jamais douté 8) , quand on est mauvais dans un comportement, faut pas insister, continue à être un ange :lol:

C'est vrai que quand c'est pour moi, je passe plus de temps pour rechercher si y'a pas plus court, car je connais mon projet...enfin en principe ... :mrgreen: quoi que ... :oops: :lol:

Mais là comme c'est pas pour moi, et ai aucune idée des tenants et aboutissants du projet du demandeur, et qu'en plus dans ce cas précis, c'est un "Utilisateur LAMBDA" :lol: c'est encore plus dur de prévoir :mrgreen:
Le fait de déjà trouver "cake" chose me satisfait, après l'avoir un minimum testé, les oeufs punais...c'est pour les chinois :lol:
Après... si la personne veut mieux en moins cher....il peut peut être continuer, il a déjà une piste :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre