AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 23508
Accepted
htorque
htorque
Asked: 2011-01-28 04:16:41 +0800 CST2011-01-28 04:16:41 +0800 CST 2011-01-28 04:16:41 +0800 CST

拔下/插入耳机时如何自动更改音量?

  • 772

我想要的是以下内容:

  • 当我插入耳机时,我希望将声音取消静音并设置为特定的音量级别。
  • 当我拔下耳机时,我希望声音静音(或设置为特定音量)。

设置音量级别不是问题,但我在拔下/插入耳机时需要这样做,所以我正在寻找一种方法来获得这些事件的通知。

我很快发现/proc/asound/card0/codec#0指示耳机是否插入,所以我尝试使用它来监控它inotifywait并根据修改后的通知更改音量级别。不幸的是inotifywait失败了,因为proc不是一个普通的文件系统。

还有其他方法可以做到这一点(也许通过 PulseAudio)?

音频设备:Intel HDA,音频编解码器:Conexant CX20585。


总结一下我到目前为止所做的尝试:

  • Ear Candy:在我的系统上根本没有运行。似乎是一个废弃的项目?
  • Karl Bielefeldt发布的代码可能适用于某些硬件,但不适用于我的。
  • 由于缺少“演讲者”频道, StephenPaulger的想法失败了。
  • 受aking1012的启发,我通过修改内核代码(在找到编解码器的插孔感应代码之后)使其工作,但这是一个相当麻烦的解决方案。

所以,我仍在寻找一种简单的方法来做到这一点。

sound
  • 9 9 个回答
  • 9358 Views

9 个回答

  • Voted
  1. Best Answer
    htorque
    2011-05-12T07:42:38+08:002011-05-12T07:42:38+08:00

    在 Oneiric 的 UDS 期间,有一个关于插孔检测的会议。有关详细信息,请参阅蓝图。听起来这将完全符合我的要求:不同设备的不同音量级别 - 只是不是在每个硬件上:

    <htorque> 我很好奇的事情:我能很快为不同的设备设置不同的音量(例如,内部声音静音,耳机 75%)吗?

    <coling> 这将被支持(在某些硬件上)是的。时间刻度“很快”:p
    <coling>(我还希望在插入/拔出插孔时显示 OSD(当前音量))

    11.10 更新

    这现在应该可以在 Oneiric 中使用- 不幸的是,我的 ThinkPad T510 似乎是目前不支持的系统之一。

    David Henningsson 的另一个后续行动:

    长话短说,这是一个令人向往的功能,我们正朝着这个方向前进,但速度很慢,因为该功能比乍看起来要复杂得多。

    好消息:在即将发布的 Ubuntu Oneiric (11.10) 中,这确实有效。坏消息:它并不适合所有人。

    更多在这里。

    12.04 更新

    它现在可以在 Ubuntu 12.04(开发版)中与我的 ThinkPad T510(和许多其他型号)一起使用。

    • 4
  2. Luciano Facchinelli
    2011-01-28T06:30:37+08:002011-01-28T06:30:37+08:00

    要从控制台设置音量级别,请使用命令 amixer。例如:

    amixer sset 主播放 0%

    将您的等级设置为 0%

    当您插入耳机时,我不知道如何更改它...但也许有人可以帮助您

    • 3
  3. zacharyliu
    2011-01-28T16:08:23+08:002011-01-28T16:08:23+08:00

    Ear Candy具有一些处理耳机插入/移除的功能。

    • 2
  4. Karl Bielefeldt
    2011-02-04T11:18:57+08:002011-02-04T11:18:57+08:00

    我不知道你有多少编码经验,但你提到inotifywait了所以我假设你至少对 shell 脚本感到满意。以下基于本文的 C 程序应该能够检测到您的耳机被插入或拔出,​​之后您可以执行任何您想要的操作。

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

    该程序采用一个参数,它应该是耳机输入事件设备的路径。这是/dev/input/event7给我的,但您可能需要尝试一些才能找到它在您的系统上。您将需要对该设备的读取权限。程序将在退出前打印设备名称以及第一个事件的类型、代码和值。

    • 2
  5. Pedro Loureiro
    2011-02-04T07:59:04+08:002011-02-04T07:59:04+08:00

    检查 dmesg 和其他日志文件。插入/拔出可能会触发一些特定的消息。

    然后,您可以使用守护程序来解析该日志文件并检测事件。我想你知道从这一点上该怎么做:)

    • 1
  6. StephenPaulger
    2011-02-04T10:29:11+08:002011-02-04T10:29:11+08:00

    如果你这样做

    amixer sset 'Speaker' playback 0%
    

    扬声器音量将被静音,但耳机将继续工作。拔下耳机意味着没有声音。这几乎是你想要的......

    然而...

    如果您更改音量控制,“扬声器”音量设置将再次设置。这是因为 pulseaudio 试图巧妙地设置音量(有关更多信息,请参阅http://pulseaudio.org/wiki/PulseAudioStoleMyVolumes)。不过,我们可以阻止它弄乱卷。

    打开 /etc/pulse/default.pa

    并找到线

    load-module module-udev-detect
    

    并将其更改为

    load-module module-udev-detect ignore_dB=1
    

    重新启动脉冲音频。

    killall pulseaudio
    

    现在,如果您将扬声器音量静音,则更改主音量不会影响它。所以耳机会工作,但扬声器会保持沉默。

    • 1
  7. Zilmar
    2013-06-05T17:07:19+08:002013-06-05T17:07:19+08:00

    我想你可以用这个来实现你所需要的:https ://bbs.archlinux.org/viewtopic.php?pid=1105458#p1105458

    • 1
  8. t3pleni9
    2015-01-05T21:33:45+08:002015-01-05T21:33:45+08:00

    检查 ACPID 套接字的变化,可以在 python 或 C 或 shell 脚本的帮助下完成,(用于控制耳机插件在节奏盒上播放和暂停的Python 代码)。检查 ACPID 电压的变化以检测耳机插件和耳机插头是否拔出。不过可以预期会有几秒钟的延迟。

    • 1
  9. towolf
    2011-02-09T13:10:36+08:002011-02-09T13:10:36+08:00

    Pulseaudio 有一个默认提供的模块,旨在实现这一点:

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

    • 0

相关问题

  • 从网络广播录制声音

  • 播放声音时延迟

  • 5.1环绕声[关闭]

  • 声音,在多个程序之间停止

  • 即使插入耳机,我的扬声器也会发出声音[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    我需要什么命令来解压缩/提取 .tar.gz 文件?

    • 8 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Martin Hope
    EmmyS 我需要什么命令来解压缩/提取 .tar.gz 文件? 2011-02-09 14:50:41 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve