it-swarm.com.de

Wie ändere ich die Lautstärke automatisch, wenn ich einen Kopfhörer ab- / anstecke?

Was ich möchte ist folgendes:

  • Wenn ich meine Kopfhörer anschließe, soll der Ton stumm geschaltet und auf einen bestimmten Lautstärkepegel eingestellt werden.
  • Wenn ich meinen Kopfhörer aus der Steckdose ziehe, soll der Ton stumm geschaltet (oder auf einen bestimmten Lautstärkepegel eingestellt) werden.

Das Einstellen der Lautstärke ist nicht das Problem, aber ich muss dies irgendwie tun, wenn ich die Kopfhörer ab-/anstecke, also suche ich nach einer Möglichkeit, über diese Ereignisse benachrichtigt zu werden.

Ich habe /proc/asound/card0/codec#0 schnell gefunden, um anzuzeigen, ob Kopfhörer angeschlossen sind, und habe versucht, es mit inotifywait zu überwachen und den Lautstärkepegel basierend auf modified zu ändern. Benachrichtigungen. Leider ist inotifywait fehlgeschlagen, weil proc kein gewöhnliches Dateisystem ist.

Gibt es andere Möglichkeiten, dies zu tun (möglicherweise über PulseAudio)?

Audiogerät: Intel HDA , Audiocodec: Conexant CX20585 .


Um zusammenzufassen, was ich bisher versucht habe:

  • Ear Candy: lief überhaupt nicht auf meinem System. Scheint ein aufgegebenes Projekt zu sein?
  • Der Code, der von Karl Bielefeldt gepostet wurde, funktioniert möglicherweise auf einer Hardware, auf meiner jedoch nicht.
  • Die Idee von StephenPaulger schlägt fehl, weil es keinen "Speaker" -Kanal gibt.
  • Motiviert durch aking1012 Ich habe es geschafft, indem ich im Kernel-Code herumgehackt habe (nachdem ich den Jack-Sensing-Code des Codecs gefunden habe), aber das ist eine ziemlich umständliche Lösung.

Ich bin immer noch auf der Suche nach einem einfachen Weg, dies zu tun.

36
htorque

Während des UDS for Oneiric gab es eine Sitzung zur Buchsenerkennung. Siehe die Blaupause für Details. Es hört sich so an, als würde dies genau das tun, wonach ich suche: Unterschiedliche Lautstärken für unterschiedliche Geräte - nur nicht auf jeder Hardware:

<htorque> etwas, worauf ich neugierig bin: Kann ich in Kürze verschiedene Lautstärken für verschiedene Geräte einstellen (z. B. interner Ton stummgeschaltet, Kopfhörer 75%)?

<coling> dies wird unterstützt (auf einigen h/w) yes. Zeitskalen sind "bald": p
<coling> (Ich würde auch erwarten, dass das OSD (mit der aktuellen Lautstärke) angezeigt wird, wenn die Buchsen gesteckt/gezogen sind.)

Update für 11.10

Dies sollte jetzt in Oneiric sein - leider scheint mein ThinkPad T510 eines der Systeme zu sein, die derzeit nicht unterstützt werden.

Ein weiteres Follow-up von David Henningsson:

Kurz gesagt, es ist eine wünschenswerte Funktion, und wir bewegen uns in diese Richtung, aber langsam, da die Funktion komplexer ist, als es auf den ersten Blick scheint.

Die gute Nachricht: Im kommenden Ubuntu Oneiric (11.10) funktioniert dies tatsächlich. Die schlechte Nachricht: Es funktioniert nicht für alle.

Mehr hier .

Update für 12.04

Es funktioniert jetzt mit meinem ThinkPad T510 (und vielen anderen Modellen) in Ubuntu 12.04 (Entwicklungsversion).

3
htorque

Verwenden Sie den Befehl amixer, um die Lautstärke über die Konsole einzustellen. Zum Beispiel:

amixer sset Master-Wiedergabe 0%

Setzt dein Level auf 0%

Ich weiß nicht, wie ich das ändern soll, wenn Sie Ihre Kopfhörer anschließen ... aber vielleicht kann Ihnen jemand dabei helfen

3

Ear Candy hat einige Funktionen zum Einsetzen/Entfernen von Kopfhörern.

2
zacharyliu

Ich weiß nicht, wie viel Programmiererfahrung Sie haben, aber Sie haben inotifywait erwähnt, also gehe ich davon aus, dass Sie zumindest mit Shell-Skripten vertraut sind. Das folgende C-Programm, das auf diesem Artikel basiert, sollte in der Lage sein, das Einstecken oder Herausziehen Ihres Kopfhörers zu erkennen. Anschließend können Sie die gewünschten Aktionen ausführen.

#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;
}

Das Programm verwendet ein Argument, das ein Pfad zum Eingangsereignisgerät für Ihre Kopfhörer sein sollte. Dies ist /dev/input/event7 für mich, aber Sie müssen möglicherweise ein paar ausprobieren, um herauszufinden, welches auf Ihrem System vorhanden ist. Sie benötigen Leserechte für dieses Gerät. Das Programm gibt vor dem Beenden den Namen des Geräts sowie den Typ, den Code und den Wert des ersten Ereignisses aus.

2
Karl Bielefeldt

Überprüfen Sie dmesg und andere Protokolldateien. Wahrscheinlich werden beim Ein- und Ausstecken bestimmte Meldungen ausgelöst.

Dann könnten Sie einen Daemon verwenden, um diese Protokolldatei zu analysieren und die Ereignisse zu erkennen. Ich denke du weißt was zu tun ist :)

1
Pedro Loureiro

Wenn Sie tun

amixer sset 'Speaker' playback 0%

die Lautsprecherlautstärke wird stummgeschaltet, die Kopfhörer funktionieren jedoch weiterhin. Wenn Sie den Kopfhörer ausstecken, ist kein Ton zu hören. Welches ist fast das, was Sie wollen ...

Allerdings ...

Wenn Sie den Lautstärkeregler ändern, wird die Lautstärkeeinstellung für den Lautsprecher erneut vorgenommen. Dies liegt daran, dass pulseaudio versucht, die Lautstärke geschickt einzustellen (siehe http://pulseaudio.org/wiki/PulseAudioStoleMyVolumes für weitere Informationen). Wir können jedoch verhindern, dass es mit den Volumes zu schaffen macht.

Öffnen Sie /etc/Pulse/default.pa

und finde die Linie

load-module module-udev-detect

und ändere es auf

load-module module-udev-detect ignore_dB=1

Starten Sie pulseaudio neu.

killall pulseaudio

Wenn Sie nun die Lautsprecherlautstärke stumm schalten, hat dies keine Auswirkungen auf die Gesamtlautstärke. Kopfhörer funktionieren also, aber der Lautsprecher bleibt stumm.

1
Stephen Paulger

Überprüfen Sie die ACPID-Buchse auf Änderungen. Dies kann mithilfe von python oder C- oder Shell-Skript ( Python-Code zur Steuerung der Wiedergabe und Pause des Kopfhörer-Plugins in der Rhythmbox) erfolgen. Prüfen Sie, ob sich die ACPID-Spannung geändert hat, um zu erkennen, ob ein Kopfhörer angeschlossen oder ausgesteckt ist. Es ist jedoch mit einer Verzögerung von Sekunden zu rechnen.

1
t3pleni9

Ich denke, Sie könnten das erreichen, was Sie brauchen: https://bbs.archlinux.org/viewtopic.php?pid=1105458#p1105458

0
Zilmar

Im Lieferumfang von Pulseaudio ist standardmäßig ein Modul enthalten, mit dem genau dies erreicht werden kann:

http://pulseaudio.org/wiki/Modules#module-device-restore

0
towolf