Comment changer automatiquement le niveau du volume lorsque vous débranchez / branchez un casque?

36

Ce que je veux, c'est ce qui suit:

  • Lorsque je branche mes écouteurs, je souhaite que le son soit désactivé et réglé sur un niveau de volume spécifique.
  • Lorsque je débranche mon casque, je souhaite que le son soit coupé (ou défini sur un niveau de volume spécifique).

Définir les niveaux de volume n’est pas le problème, mais je dois le faire d’une manière ou d’une autre lorsque vous retirez / branchez les écouteurs. Je recherche donc un moyen d’être informé de ces événements.

J'ai rapidement trouvé que /proc/asound/card0/codec#0 indiquait si les écouteurs étaient branchés ou non, alors j'ai essayé de le surveiller en utilisant inotifywait et de modifier le volume en fonction des notifications modifiées . Malheureusement, inotifywait a échoué car proc n'est pas un système de fichiers ordinaire.

Y at-il d’autres moyens de le faire (peut-être via PulseAudio)?

Périphérique audio: Intel HDA , codec audio: Conexant CX20585 .

Pour résumer ce que j'ai essayé jusqu'à présent:

  • Ear Candy: n'a pas fonctionné du tout sur mon système. Semble être un projet abandonné?
  • Le code publié par Karl Bielefeldt peut fonctionner sur certains matériels, mais pas sur le mien.
  • L'idée de StephenPaulger échoue en raison de l'absence d'un canal "Speaker".
  • Motivé par aking1012 Je l'ai fait fonctionner en piratant le code du noyau (après avoir trouvé le code de détection de jack du codec), mais c'est une solution plutôt lourde.

Donc, je cherche toujours un moyen facile de le faire.

    
posée htorque 27.01.2011 - 13:16
la source

9 réponses

3

Lors de l’UDS pour Oneiric, une session a été consacrée à la détection des prises. Consultez le plan pour plus de détails. Il semble que cela fera exactement ce que je recherche: différents niveaux de volume pour différents appareils - mais pas sur tous les matériels:

  

& lt; htorque & gt; quelque chose que je suis curieux de savoir: serai-je capable d'avoir différents niveaux de volume pour différents appareils (par exemple, son interne en sourdine, casque 75%) à tout moment de sitôt?

     

& lt; coling & gt; cela sera supporté (sur certains h / w) oui. Les échelles de temps sont "bientôt": p
  & lt; coling & gt; (Je m'attendrais également à ce que l'OSD soit affiché (avec le volume actuel) lorsque les prises sont branchées / débranchées)

Mise à jour pour 11.10

Cela devrait maintenant être travailler dans Oneiric - Malheureusement, mon ThinkPad T510 semble être l'un des systèmes actuellement non pris en charge.

Une autre suite de David Henningsson:

  

En bref, c'est une caractéristique souhaitable, et nous nous dirigeons dans cette direction, mais lentement, car la fonctionnalité est plus complexe qu'il n'y paraît au premier abord.

     

La bonne nouvelle: dans le prochain Ubuntu Oneiric (11.10), cela fonctionne réellement. La mauvaise nouvelle: ça ne marche pas pour tout le monde.

Plus ici .

Mise à jour pour 12.04

Il fonctionne maintenant avec mon ThinkPad T510 (et de nombreux autres modèles) dans Ubuntu 12.04 (version de développement).

    
réponse donnée htorque 11.05.2011 - 17:42
la source
3

Pour définir le niveau de volume depuis la console, utilisez la commande amixer. Par exemple:

  

Amixer sset Lecture principale 0%

Fixera votre niveau à 0%

Je ne sais pas comment changer cela lorsque vous branchez vos écouteurs ... mais peut-être que quelqu'un peut vous aider avec ça

    
réponse donnée Luciano Facchinelli 27.01.2011 - 15:30
la source
2

Ear Candy offre certaines fonctionnalités pour gérer l’insertion / le retrait des écouteurs.

    
réponse donnée zacharyliu 28.01.2011 - 01:08
la source
2

Je ne sais pas quelle expérience de codage vous avez, mais vous avez mentionné inotifywait , donc je vais supposer que vous êtes au moins à l'aise avec les scripts shell. Le programme C suivant, basé sur cet article , devrait pouvoir détecter votre casque branché ou débranché, après quoi vous pourrez effectuer les actions que vous voulez.

#include <linux/input.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>

int main(int argc, char* argv[])
{
    int fd = -1;
    char name[256]= "Unknown";
    struct input_event event;

    if ((fd = open(argv[1], O_RDONLY)) < 0) {
        perror("evdev open");
        exit(1);
    }

    if(ioctl(fd, EVIOCGNAME(sizeof(name)), name) < 0) {
        perror("evdev ioctl");
    }

    printf("The device on %s says its name is %s\n",
            argv[1], name);

    read(fd, &event, sizeof(struct input_event));
    printf("Event type is %d\n", event.type);
    printf("Event code is %d\n", event.code);
    printf("Event value is %d\n", event.value);

    close(fd);
    return 0;
}

Le programme prend un argument, qui devrait être un chemin vers le périphérique d’événement d’entrée pour vos écouteurs. Ceci est /dev/input/event7 pour moi, mais vous devrez peut-être en essayer quelques-unes pour trouver ce qui se trouve sur votre système. Vous aurez besoin des autorisations de lecture sur ce périphérique. Le programme imprimera le nom du périphérique, ainsi que le type, le code et la valeur du premier événement avant de quitter.

    
réponse donnée Karl Bielefeldt 03.02.2011 - 20:18
la source
1

Vérifiez dmesg et les autres fichiers journaux. Il est probable que brancher / éteindre déclenche des messages particuliers.

Ensuite, vous pouvez utiliser un démon pour analyser ce fichier journal et détecter les événements. Je pense que vous savez quoi faire à partir de ce point:)

    
réponse donnée Pedro Loureiro 03.02.2011 - 16:59
la source
1

Si vous le faites

amixer sset 'Speaker' playback 0%

le volume du haut-parleur sera coupé mais le casque continuera à fonctionner. Débrancher le casque ne signifie aucun son. Ce qui est presque ce que tu veux ...

Cependant ...

Si vous modifiez le contrôle du volume, le réglage du volume «Speaker» sera à nouveau configuré. C'est parce que pulseaudio essaie d'être intelligent avec la définition des volumes (Voir lien pour plus d'informations). Nous pouvons cependant l'empêcher de jouer avec les volumes.

Ouvrez /etc/pulse/default.pa

et trouvez la ligne

load-module module-udev-detect

et changez-le en

load-module module-udev-detect ignore_dB=1

Redémarrez pulseaudio.

killall pulseaudio

Maintenant, si vous désactivez le volume du haut-parleur, le volume principal ne l’affectera pas. Donc, les écouteurs fonctionneront mais l'orateur restera silencieux.

    
réponse donnée StephenPaulger 04.02.2011 - 12:23
la source
1

Vérifiez le socket ACPID pour les modifications, peut être fait avec l'aide de python ou C ou script shell, ( Code Python pour contrôler la lecture et la pause du plug-in des écouteurs sur rhythmbox). Vérifiez les changements dans la tension ACPID pour détecter le plug-in d'écouteurs et la prise d'écouteurs. On peut s'attendre à un délai de quelques secondes.

    
réponse donnée t3pleni9 05.01.2015 - 06:33
la source
0

Pulseaudio a un module livré par défaut conçu pour atteindre exactement ceci:

lien

    
réponse donnée towolf 08.02.2011 - 22:10
la source
0

Je pense que vous pourriez réaliser ce dont vous avez besoin en utilisant ceci: lien

    
réponse donnée Zilmar 05.06.2013 - 03:07
la source

Lire d'autres questions sur les étiquettes