静音和取消静音麦克风的命令

在语音/视频对话中,我希望能够在不必每次都经过所有这些步骤的情况下静音/取消静音麦克风:
声音指示器,声音首选项,选择输入,静音或取消静音麦克风。
我正在寻找以下两种方式之一:
一个可以通过命令行完成此操作的应用程序,
一种可以分配键盘快捷键来静音/取消静音麦克风的方法。

1如果你使用 Empathy 进行语音聊天,它内置了一个静音按钮(至少可以与 Google Talk 配合使用,但尚不支持 Skype)。 - JanC
2我正在寻找一种可以通过快捷方式运行的东西,类似于笔记本电脑的主音量静音/取消静音切换按钮。 - Lucian Adrian Grijincu
14个回答

打开「系统偏好设置」,然后选择「键盘」,点击「快捷键」,再选择「自定义快捷键」。

Keyboard shortcuts

点击添加

Custom shortcut

请填写:

Toggle Microphone

并且

amixer set Capture toggle

对于USB网络摄像头,您需要选择设备(-c 1),或者可能是其他数字。
amixer -c 1 sset Mic toggle

点击应用,然后将一个新的键与此命令关联(例如,暂停/中断键)。

这适用于最近的版本吗?谢谢。 - Diego V
1确实有效;多亏了Lucian。我在我的笔记本电脑上有一个“静音”键,我将它映射为Shift+静音,非常容易记住 :) - Pierre-Antoine
1在终端中,命令amixer set Mic toggle(而不是Capture)对我有效,但是任何分配的键盘快捷键似乎都无法实际运行。我尝试过ctrl+Audio Mute,还有ctrl+M(通过键盘按键捕获)。 - Jason Kleban
确认,这也适用于Ubuntu 16.10。 - Kushal
在MATE上,添加按键绑定的菜单有些不同,但工作方式相同。谢谢! - Stephen Angelico

你可以用静音按钮关闭麦克风。
amixer set Capture nocap

并解除麦克风静音

amixer set Capture cap

1那在树莓派上运行得很好,只是你要用Mic替换Capture。 - WhiskerBiscuit

我在USB摄像头/麦克风和内置麦克风之间切换,而其他解决方案通常是根据“默认”设备来工作,而这通常不是我正在使用的设备,所以我编写了这个来静音所有麦克风。
pacmd list-sources | \
        grep -oP 'index: \d+' | \
        awk '{ print $2 }' | \
        xargs -I{} pactl set-source-mute {} toggle \
        && pacmd list-sources | \
        grep -oP 'muted: (?:yes|no)'

我喜欢这种原子化的方法。考虑使用类似'index: \d?\d'的方式来处理双位数的源索引。 - brettinternet
2"index: \d+" 是更合适的正则表达式,但是没错,那个也可以 :) - blockloop

amixer set Capture toggle && amixer get Capture | grep '\[off\]' && notify-send "MIC switched OFF" || notify-send "MIC switched ON"

2我喜欢你将grep和通知结合的方式:超级整洁 =) - Musa Al-hassy

只需使用此命令即可静音/取消静音:

简单易行。

amixer -D pulse sset Capture toggle

你还可以添加通知来确保它是开启或关闭的,就像弗拉迪米里奇在同一个问题上所说的那样answer
amixer -D pulse sset Capture toggle && amixer get Capture | grep '\[off\]' && notify-send "MIC switched OFF" || notify-send "MIC switched ON"

受到Mark Rooney在静音/取消静音声音方面的回答的启发。

2这对我在Ubuntu 16.04上实际有效。可以省略-q - gronostaj
2为了i3wm,将bindsym XF86AudioMicMute exec --no-startup-id amixer -D pulse sset Capture toggle翻译成中文。 - Kristof Tak
1这个命令在我使用的Pop_OS! 19.10(基于Ubuntu 19.10)上有效。你可以使用命令amixer --device pulse sset Capture nocap来明确禁用麦克风捕捉,并且可以同时使用命令amixer --device pulse sset Capture nocap 0%将捕捉音量调整为0%。 - Patrick Dark

pacmd 是 PulseAudio(最新版本中使用的音频子系统)的命令行界面。我不知道你需要的确切命令是什么,但我认为你可能想尝试使用 set-sink-input-mute 函数。

pacmd 在没有指令的情况下是交互式的,所以你有很好的机会去尝试并将其转化为一个用于切换静音的单行函数。


pacmd只有在没有给它任何命令时才是交互式的。我使用pacmd list-sources获取输入和输出列表。在索引2下,我有一个输入设备(根据其名称)。然后,您可以运行pacmd set-source-mute 2 1来静音。最后一个参数是用于静音状态的布尔值。0或false表示取消静音,1或true表示静音。 - Vitaly
以下是一行代码来切换状态,而不是设置状态:pacmd list-sources | grep -e 'index' -e 'muted:' | sed -n -e '/index: 5/,$p' | head -n2 | tail -n1 | grep yes && pacmd set-source-mute 5 0 || pacmd set-source-mute 5 1。请注意,索引出现在三个位置,因此您需要更改这些位置。 - Pieter Bos


在20.04版本中,我看到可以在设置 -> 键盘快捷键 -> 声音和媒体下设置相同的快捷方式。

enter image description here

没有默认的键分配。

与Gnome 3.38.5 (Debian 11)中相同的内容。 - user2399321

在pulseaudio中切换默认麦克风的静音:

  1. 确保你安装了pulseaudio-utils包中的pacmdlibnotify-bin中的notify-send工具。
  2. 使用以下脚本:
#!/bin/sh

pacmd list-sources | awk '\
BEGIN {default_found=0;}

/^[\t ]*\*/ {default_found=1;}

/^[\t ]*name:/ {
    if (default_found) {
        name=$2;
        gsub("[<>]", "", name);
    }
}

/^[\t ]*muted:/ {
    if (default_found) {
        if ($2=="yes") {
            mute=0;
            icon="microphone-sensitivity-medium";
            status="unmuted"
        } else {
            mute=1;
            icon="microphone-sensitivity-muted";
            status="muted"
        }
        system("pacmd set-source-mute " name " " mute);
        system("notify-send --expire-time 1000 --icon " icon " Microphone: " status);
        exit;
    }
}

/^[\t ]*index:/{if (default_found) exit;}'

你可以使用以下方式静音:
/usr/bin/amixer -q -c 0 sset 'Master',0 mute

取消静音:
/usr/bin/amixer -q -c 0 sset 'Master',0 unmute

你只需要将'Master'替换为相应的混音器名称,在终端上使用"amixer"命令获取混音器设备列表。
关于设置键盘快捷键,请查看如何找到与给定键盘快捷键绑定的命令?的答案。

这些可以静音我的扬声器,而不是麦克风,但还是谢谢。 - Lucian Adrian Grijincu
你只需要用正确的混音器名称替换“Master”,在终端上使用“amixer”命令获取混音器设备列表即可。 - João Pinto
这似乎是有效的: #amixer set Capture toggle - Lucian Adrian Grijincu
你能编辑一下你的回答(我没有足够的声望)来包含这个答案,这样我就会接受它了吗? - Lucian Adrian Grijincu