我的音频输入如何始终是网络摄像头麦克风?

每次我想使用Skype,我都必须进入声音偏好。 然后,将音频输入转为“ 网络摄像头 ”并取消选中“ 静音 ”按钮。 这很烦人。 有没有办法始终保持相同的配置?

更改PulseAudio的默认设置

运行pulseaudio时,可以通过将自定义配置文件放在HOME中隐藏的.pulse目录中来定义所有设置。 如果这些文件尚不存在,您可以使用/etc/pulse/的标准文件作为模板。 大多数条目在这些文件中都有冗长的解释。

  • ~/.pulse/default.pa加载模块并定义默认值
  • ~/.pulse/client.conf为声音服务器配置客户端
  • ~/.pulse/daemon.conf定义采样率和缓冲区

要使您的网络摄像头成为默认源,我们需要通过在终端中查看以下命令生成的列表来了解此源的名称和编号:

 pacmd list-sources 

然后我们在~/.pulse/default.pa编辑以下行:

 set-default-source [name] 

并用所需源的名称或源编号替换[name] 。 然后,我们需要通过添加以下行来确保源已取消静音:

 set-source-mute [name]|[#n]> 0 

提供源的名称或索引。 您可以添加PulseAudio Wiki中引用的各种其他设置(现在在手册页上: man pulse-cli-syntax )。

建议在更改配置文件之前首先通过命令行界面测试所有命令。 这可以 在终端 pacmd 打开

我同意问题是Pulseaudio没有将USB设备设置为默认设置,因为脉冲启动时它不存在。

所以我的解决方案是挂钩系统,当连接USB设备时发出通知… UDEV!

顺便说一句,这些说明有点时髦,我假设你在命令行做的事情很舒服,并成为更新udev文件和使脚本可执行的root用户。

首先,找出东西

USB ID

第一步是插入网络摄像头,通过输入找到神奇的供应商和产品编号

 lsusb 

我正在使用Microsoft Lifecam,它显示为

 Bus 001 Device 013: ID 045e:072d Microsoft Corp. 

重要的部分是045e:072d

Pulseaudio设备

接下来,在连接网络摄像头的同时,找出pulseaudio设备名称。 类型

 pacmd list-sources 

再一次,我正在寻找起始name:的行name:然后有一些关于Microsoft Lifecam的东西……在这里

 name:  

所以我的pulseaudio设备名称将是alsa_input.usb-Microsoft_Microsoft___LifeCam_VX-5500-02-VX5500.analog-mono

UDEV规则

然后我制作了一个新的udev规则,当插入一个vendor = 045e和product = 072d的USB设备时会触发该规则。 要制定规则,请创建一个名为/etc/udev/rules.d/ SOMETHING .rules的新文件(我称之为文件/etc/udev/rules.d/95-webcam-mic.rules )。

将此行放入文件中

 SUBSYSTEMS=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="072d", ACTION=="add", GROUP="audio", RUN+="/usr/local/bin/webcam-mic" 

务必使用网络摄像头的值替换ATTR {idVendor}ATTR {idProduct}

此规则的作用是运行脚本来设置输入的USB设备,即RUN+="/usr/local/bin/webcam-mic"部分。

最后,设置网络摄像头以进行输入

快速浏览时间。 每次我连接我的网络摄像头时,我都想运行命令

 pacmd set-default-source alsa_input.usb-Microsoft_Microsoft___LifeCam_VX-5500-02-VX5500.analog-mono 

但是命令需要像我一样运行(运行桌面的用户),但udev以root用户身份运行 – 所以当udev运行我的命令时,我需要它更改为我的用户然后运行命令。

所以我们有两个选择。

  1. 又脏又脏 。 让udev规则运行su james -c pacmd set-default-source...su james -c pacmd set-default-source...了我甚至无法完成输入命令。 如果更换摄像头怎么办? 如果您为其他用户安装该怎么办?

  2. 稍微清洁一点 。 运行一个脚本,该脚本读取一个默认文件,该文件包含pulseaudio设备名称和您的用户名。 如果你想要他们在GitHub上的文件。 首先是脚本/usr/local/bin/webcam-mic 。 默认文件/etc/default/webcam-mic只需根据gist中的注释定义2个shell变量。 将脚本放入/usr/local/bin/并使其可执行。 然后将默认文件放入/etc/defaults/并编辑它以使用您之前的用户名和pulseaudio设备。

祝好运!

Takkat的解决方案对我不起作用,对于仍有问题的人来说,这是我的解决方案。

Takkat解决方案对我来说有两个问题。 首先,我意识到启动之后需要延迟才能切换到麦克风(我在下面的解决方案中使用命令’sleep’)。 此外,命令’set-default-source’正在打开USB麦克风,但Skype不知道这一点并继续使用内置麦克风。

为此,首先安装pavucontrol很有用。 在pavucontrol中,打开“配置”选项卡,观察下面的命令会发生什么,以检查事情是否按预期工作。

然后,从终端输入:

 pacmd 

从那里输入:

 list-cards 

在输出中,找到所需USB音频的索引号(在我的例子中,这是’1’)。 然后查看默认卡和USB卡的“配置文件”下列出的行。 这些应该与pavucontrol中列出的相同,可以是“输出:输入+输出”,“关闭”或“输入:模拟单声道”等。仍然在pacmd命令行中,命令集 – set-card-profile 应该更改pavucontrol中的设置。 我们在这里要做的是将内部音频从双工切换到仅输出,将USB切换到输入。

找到相应的配置文件后,我们想要创建一个启动命令,以便在启动后立即更改一些设置。 要创建启动命令,请打开破折号并搜索“启动应用程序”,然后单击“添加”,然后在下面输入您选择的名称和相应的命令。

经过反复试验,我的启动命令最终看起来像这样:

 bash -c "sleep 30 && pacmd set-card-profile 0 output:analog-stereo && pacmd set-card-profile 1 off && pacmd set-card-profile 1 input:analog-mono" 

说明:我发现命令’sleep’是必要的,这意味着命令在暂停后执行,我设置为30秒(我认为这可以更少,玩这个)。 下一个命令(在’&&’之后)是使默认(内部)卡配置文件从输入+输出(双工,这是默认值)切换到仅输出。 下一个命令用于关闭USB声卡(在我的情况下,数字为’1’)。 最后一个命令是同一张卡在模式’input:analog-mono’中重新打开

您可能必须使用这些设置,找到有效的设置。

现在,当我启动时,我的USB麦克风可以在30秒后使用,Skype使用正确的麦克风。

试试这个,点击顶部面板上的扬声器图标,点击首选项。 在那里,您可以为麦克风选择默认输入选项,并可能更改一些硬件配置以使其正常工作。