Comment puis-je accéder aux niveaux de volume à partir de la ligne de commande sous Windows 7?

17

Ce dont j'ai besoin

Je recherche un outil ou un script qui me permet d'accéder aux niveaux de volume de Windows à partir de la ligne de commande. Idéalement, cela me permettrait d'obtenir et de définir tous les volumes, y compris les niveaux d'application, mais je me contenterais d'obtenir uniquement et uniquement le niveau principal. Je ne me dérange pas si elle utilise PowerShell, WMI, JavaScript, .Net, vaudou, ou papillons. Toute solution qui me donnera simplement un nombre que je peux traiter plus en détail pour s'adapter à une plage de 0% à 100% fera l'affaire.

Autrement dit, les parties d'invite sont la boîte noire que j'ai besoin de remplir:

C:\> getvol master
50

ou même

C:\> wmic <alias> where "device='master' and name='volume'" get name,value
Name    Value
Volume  0xDEADBEEF

Cela ne me dérange pas si je dois passer un peu de temps pour l'envelopper ou même écrire quelque chose moi-même si les outils pour le faire sont disponibles gratuitement. Dans ce dernier cas, j'aurais besoin de quelques pointeurs / preuves de concept pour le noyau, mais je peux gérer la cruauté par moi-même. Je voudrais également éviter d'installer de nouveaux cadres de développement juste à cette fin (notez que les réponses de music2myear et d' iglvzx ont été données avant que j'introduise ces exigences).

En tant que "plateformes", je dispose:

  • tout ce qui vient avec Windows 7 Home Premium
  • tout ce qui vient avec Cygwin
  • Perl
  • Python
  • Rubis

Généralement, les solutions open source sont largement préférées. Les outils à source fermée sont corrects tant qu'ils sont gratuits et que la source peut être fiable. Les solutions commerciales sont interdites.

Ce dont je n'ai pas besoin

  • Il y a quelques questions similaires qui concernent principalement le réglage du volume. Surtout, j'ai besoin d' obtenir le volume, pas réglé.
  • Il y en a nircmdc, qui prend en charge le réglage du volume, mais pas le son.
  • Il y a une clé [1] dans mon registre qui a des valeurs qui changent de façon prévisible lorsque j'ajuste le volume via le mélangeur GUI, mais je suppose que la lecture de cette clé est sujette à une rupture lors de changements matériels ou de mises à niveau du système. À moins que je puisse compter sur une solution raisonnablement évolutive, je ne peux pas l'utiliser.
  • Il existe AutoHotKeyet des WSHsolutions pour régler le volume sur le Web, mais a) elles aussi ne sont bonnes que pour le réglage et, pire, b) elles utilisent SendKeysou un mouvement automatisé de la souris pour contrôler l'interface graphique. L'automatisation de l'interface graphique n'est pas une option.

Le ##windowscanal sur freenode n'est toujours pas utile, Google déborde de hacks et de solutions de contournement à moitié cuites, et je ne peux pas distinguer un appel WinAPI d'une incantation Wiccan.

Quelqu'un connaît-il un moyen?


  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0000\MixerSettings\eLineOutTopo\PrimaryNode000
peth
la source
Semms comme WMI n'est pas une option :(
Der Hochstapler
Peut-être pertinent: superuser.com/questions/284527/…
Der Hochstapler
Avez-vous besoin de moi pour développer ma réponse? Je n'étais pas sûr que vous en ayez besoin de plus, car vous semblez avoir de l'expérience en programmation. Je peux vous donner un exemple sur la façon dont vous pouvez utiliser AutoHotkey pour atteindre facilement votre objectif.
iglvzx
Je pense que c'est une très bonne suggestion, merci encore, mais AHK m'a mordu une fois et je suis timide depuis. Je ne l'utiliserais probablement pas même si c'était une solution à part entière. Rien ne vous empêche cependant de l'étendre pour les futurs lecteurs / plus de votes positifs. :)
peth
1
(à noter que le reg. ne semble même pas exister sur ma box, donc ... il peut être effectivement instable). Voir aussi ma réponse c ++ ici: stackoverflow.com/a/21056089/32453
rogerdpack

Réponses:

5

Cette question a été posée et répondue sur StackOverflow: /programming/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

La réponse: /programming//a/4640225/704977

Vous recherchez l'API EndpointVolume. Cela fait partie des nouvelles API audio publiées dans Windows Vista et peut être utilisée pour obtenir ou définir le volume principal.
... Une bibliothèque complète d'encapsuleurs gérés est disponible sur CodeProject: Vista Master Audio API Master Volume Control.

music2myear
la source
Merci pour le pointeur! Dois-je coder cela moi-même ou connaissez-vous peut-être un petit outil issu de la question / réponse? Je n'ai jamais touché C # auparavant: si je dois le coder moi-même, y a-t-il un compilateur disponible gratuitement?
peth
Au pire, vous devrez télécharger Visual Studio C # Express, qui est gratuit: microsoft.com/visualstudio/en-us/products/2010-editions/…
music2myear
Je n'ai trouvé cette réponse que lors de la recherche d'une solution à votre question. Je n'ai pas poursuivi mes recherches pour voir s'il existe un binaire compilé déjà accessible au public.
music2myear
Cette recherche sur Google semble avoir une certaine promesse: google.com/search?q=get+current+volume+by+command+line+windows
music2myear
2
Celui-ci semble être orienté C #. Si vous recherchez une option ish en C ++, voir stackoverflow.com/a/21056089/32453
rogerdpack
4

Je sais que vous avez dit que vous ne vouliez pas d'une solution AutoHotkey, mais je crois que l' API AutoHotkey a ce que vous recherchez:

Vous n'avez pas besoin de créer d'interfaces graphiques ou d'utiliser des raccourcis clavier avec AutoHotkey. Vous pouvez écrire de puissants utilitaires de ligne de commande en compilant un .ahkscript. Cela étant dit, vous voudrez regarder la commande FileAppend pour travailler avec stdout.

iglvzx
la source
en voici une qui le fait: gist.github.com/rdp/8363141 (bien qu'une application console simple pour cela puisse être plus simple / plus facile, voir les autres commentaires ici)
rogerdpack
0

Le volume principal est stocké dans l'emplacement du registre:

...\#eSpeakerTopo\Properties\{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}

Par exemple, ce fichier REG définit le volume principal à 100%.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\DeviceClasses\{6994ad04-93ef-11d0-a3cc-00a0c9223196}\##?#HDAUDIO#FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034#4&31e60982&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\#eSpeakerTopo\Properties\{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}\20000]
@=hex(ffff1003):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00

Le nom de la clé peut différer. Vous devez redémarrer pour que les modifications prennent effet.

Vous ne pourrez peut-être pas modifier ou ouvrir la clé Propertiesou . Bien que vous disposiez des autorisations d'accès nécessaires, vous pouvez recevoir une erreur comme celle-ci:{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}regedit

[Window Title]
Error Opening Key

[Content]
{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc} cannot be opened.
An error is preventing this key from being opened.

[OK]

En effet, le nom de la clé est trop long. Vous devrez renommer temporairement le nom de la clé longue en un caractère, puis le renommer.

XP1
la source