2009-07-07 8 views
1

Mon ordinateur dispose de deux entrées audio: un micro que j'utilise pour les jeux et une ligne que j'utilise pour la guitare. Lorsque vous en utilisez un, il est important que l'autre soit coupé pour supprimer le sifflement/statique, donc j'espérais écrire un petit script qui changerait celui qui était en sourdine (il est assez incommode de cliquer sur l'icône de la barre, et activer le son).Windows XP - Activer/désactiver le son par programmation en mode Python

Je pensais que je pouvais le faire avec pywin32, mais je pourrais everythingfind semblait spécifique à régler le volume de sortie plutôt que d'entrée, et je ne suis pas assez familier avec win32 même de savoir où chercher pour une meilleure information.

Quelqu'un pourrait-il me diriger dans la bonne direction?

Répondre

2

J'ai eu un problème similaire et je ne pouvais pas comprendre comment utiliser les API Windows pour faire ce que je voulais. J'ai fini par automatiser l'interface graphique avec AutoIt. Je pense que ce sera la solution la plus rapide et la plus facile (quoique "hacky"). Comme je answered plus tôt aujourd'hui, vous pouvez utiliser AutoIT à partir de Python.

+0

J'ai essayé d'entrer dans l'API Windows, mais je l'ai malheureusement trouvée impénétrable. Je suis satisfait de ma solution AutoIt cependant; si quelqu'un est intéressé le script est à http://bitbucket.org/kiv/scripts/src/tip/muteit.au3 – Kiv

4

Avertissement: Je ne suis pas un gourou de programmation de fenêtres par tout moyen ... mais voici ma meilleure estimation

par le pywin32 FAQ:

Comment puis-je utiliser l'exposé Win32 fonctionne pour faire xyz?

En général, l'astuce est de ne pas considérer une question Python/pywin32 du tout, mais à la recherche de la documentation ou des exemples de votre problème , quelle que soit la langue. Cela vous donnera généralement les informations dont vous avez besoin pour effectuer les mêmes opérations utilisant ces extensions . La documentation incluse vous indiquera les arguments et les types de retour des fonctions afin que vous puissiez facilement déterminer la manière correcte d '"épeler" des choses dans Python.

Il semble que vous cherchiez à contrôler les volumes du «périphérique d'extrémité» (c'est-à-dire votre carte son/entrée ligne). Voici le API reference dans cette direction.

Here Est un peu plus large de contrôler les périphériques audio dans Windows si le précédent n'était pas ce que vous cherchez.

Here est une entrée de blog de quelqu'un qui a fait ce que vous essayez de faire en C# (je sais que vous avez spécifié python, mais vous pourriez être en mesure d'extraire les appels d'API corrects du code).

Bonne chance! Et si vous obtenez un code de travail, je suis intéressé de le voir.

1

Vous êtes probablement mieux d'utiliser ctypes - pywin32 est bon si vous utilisez l'une des API déjà inclus, mais je pense que vous aurez de la chance avec les API sonores. Avec l'exemple de code du lien C# fourni par tgray, utilisez ctypes et winmm.dll, ou bien, utilisez SWIG pour renvoyer winmm.dll. Cela peut être plus rapide car vous n'aurez pas à créer de types de mappage de structure C dans ctypes pour les types tels que MIXERCONTROLDETAILS qui sont utilisés dans les appels d'API.

0

tgray semble vous avoir fait dans la bonne direction, mais une fois que les bonnes API Win32 à traiter, vous avez deux options:

1) Essayez d'utiliser pywin32 ... mais il peut ou non encapsuler les fonctionnalités dont vous avez besoin (ce n'est probablement pas le cas). Donc, vous ne voulez probablement faire cela que si vous avez besoin d'utiliser COM pour obtenir les fonctionnalités dont vous avez besoin.

2) Utilisez les types de caractères. Il est généralement assez facile d'envelopper à peu près n'importe quelle fonctionnalité C avec les types de c.

3) Si l'exemple C# ressemble à ce dont vous avez besoin, vous devriez pouvoir le traduire en IronPython avec assez peu d'efforts. Peut-être plus facile que d'utiliser l'API C YMMV, bien sûr.

Questions connexes