Linux 系统在配置音频设备(尤其是带有组合插孔的常见耳机)时一直存在历史问题(>5 年)。由于许多人想使用他们最喜欢的 Linux 系统进行视频聊天,因此各个论坛上都有令人沮丧的未解决问题的记录。
我了解到外部麦克风(在带有组合插孔的耳机中)的驱动程序当前不可用(或未开发(?))。
因此,用户应该能够使用内置麦克风进行输入,使用耳机进行输出。
沿着这条线,我陷入了兔子洞(挖掘了 5-6 年的旧问题)并尝试了很多东西,但最终没有成功(我使用的是常见的组合插孔耳机和运行 ubuntu 16.04 的惠普笔记本电脑)。
许多人都以不同的方式报告了这个问题。这是常见的情况..
未连接耳机时,
内置麦克风和扬声器运行良好。
pacmd list-cards
显示:
ports:
analog-input-internal-mic: Internal Microphone (priority 8900, latency offset 0 usec, available: unknown)
properties:
device.icon_name = "audio-input-microphone"
analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: no)
properties:
device.icon_name = "audio-input-microphone"
analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
properties:
device.icon_name = "audio-speakers"
analog-output-headphones: Headphones (priority 9000, latency offset 0 usec, available: no)
properties:
device.icon_name = "audio-headphones"
连接耳机后,
通过耳机输出效果很好。但是外部麦克风(位于耳机上)无法工作(口吃噪音,驱动程序不存在,好吧),但内部麦克风也被“拔掉”。 (所以无法录制任何声音。)
pacmd list-cards
显示:
ports:
analog-input-internal-mic: Internal Microphone (priority 8900, latency offset 0 usec, available: no)
properties:
device.icon_name = "audio-input-microphone"
analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: yes)
properties:
device.icon_name = "audio-input-microphone"
analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: no)
properties:
device.icon_name = "audio-speakers"
analog-output-headphones: Headphones (priority 9000, latency offset 0 usec, available: yes)
properties:
device.icon_name = "audio-headphones"
那么,耳机可以提供输出,这很好,但是有什么方法可以强制内部麦克风进行输入呢? (以某种方式使available: yes
)
答案1
Linux 不存在“配置音频设备的历史问题”。问题实际上在于设备(主要是笔记本电脑)的制造商,他们只是在笔记本电脑上预装了 Windows 驱动程序,可以准确配置这些驱动程序来处理笔记本电脑的硬件,因为制造商当然知道硬件是如何设置的。另一方面,制造商不想分享细节,不记录它们并保密;毕竟,他们已经提供了 Windows 驱动程序。这就是为什么通常必须通过痛苦且耗时的逆向工程找出笔记本电脑的所有非标准功能才能在 Linux 下使用它们的原因。
关于音频,基本上所有现代设备都使用英特尔 HDA 架构,该架构是自描述的,并提供编解码器(模拟音频芯片)的图形表示。原则上,BIOS 应该提供“引脚配置”,即编解码器芯片的哪个引脚连接到内部扬声器和麦克风、线路输入、线路输出以及耳机或耳机组合插孔。
然而,特别是在最近几年,制造商似乎并不觉得有必要正确配置BIOS(毕竟他们已经提供了Windows驱动程序)。因此,循环是:新的笔记本电脑型号问世,具有实际硬件和足够技术理解的人弄清楚 BIOS 是如何存在的以及配置实际上应该是什么样子,内核开发人员在其中添加一个怪癖(对该硬件的特殊处理)驱动程序来处理这个问题,使用最新的驱动程序,使用相同硬件的其他人不会注意到并且很高兴。直到下一个模型出现,循环又开始。与此同时,许多不满意的用户在互联网上到处留下痕迹,在各地的论坛上提问,但常常得不到正确的答案。
因此,是的,外部麦克风的驱动程序已开发并可用(事实上,它们与编解码器的其余部分的驱动程序相同)。您可以通过检查内核源文件/sound/pci/hda/
并 grep 查找“quirk”来查看累积的所有怪癖(非标准行为) 。
这意味着,如果您碰巧拥有一台外接耳机麦克风无法工作的笔记本电脑,则必须有人(也许是您?)深入研究技术细节,使其正常工作,并将其报告给 ALSA 内核开发人员。
您可以查看编解码器芯片报告的有关其内部结构的信息
cat /proc/asound/card*/codec\#*
这给出了内部图表,您可以手动遵循它,或者尝试诸如codecgraph
可视化它之类的程序(并不总是给出好的结果)。 “Pin 复合体”代表引脚。查看您拥有的麦克风,尝试猜测哪个可能代表外部麦克风,即使它的标签错误。如果您已经识别出该引脚,请使用hdajackretask
它来正确标记该引脚(或者猜测直到识别为止)。有多种方法可以在启动时默认重新标记,直到驱动程序更新为止。
至于组合内置麦克风和耳机:ALSA 有一个称为“自动静音模式”的混音器元素。当插入或拔出耳机插孔时,这将导致 ALSA 将内部麦克风/扬声器静音并取消外部麦克风/耳机静音(反之亦然)。在alsamixer
或中禁用此功能amixer
,根据需要将内部和外部麦克风/扬声器/耳机静音和取消静音。
您还可以在 Pulseaudio 中进行配置:开始pavucontrol
,在输入和输出选项卡中选择正确的端口。
如果内部和外部“端口”都不可用,或者如果您想将其设置为默认端口,那也是可能的,尽管这样做有点麻烦:查看 中的文件/usr/share/pulseaudio/alsa-mixer/
,阅读解释它们如何工作的注释。您需要为您的声卡进行一种新的“配置”,结合两条“路径”,一条用于内部麦克风,一条用于外部耳机,并使用正确的 ALSA 混音器元件。这可能需要一些时间才能使其正常工作,Pulseaudio 在这方面不是很直观。
不,没有简单的方法可以做你想做的事;你得亲自动手。