Audio

帶組合插孔的耳機:強制內部麥克風用於輸入,耳機用於輸出

  • January 26, 2018

Linux 系統在配置音頻設備方面一直存在(> 5 年)問題,尤其是帶有組合插孔的普通耳機。由於許多人想使用他們最喜歡的 linux 系統進行影片聊天,因此各種論壇上都有令人沮喪的未解決問題的記錄。

我知道外部麥克風的驅動程序(在帶有組合插孔的耳機中)目前不可用(或未開發(?))。

因此,鑑於此,使用者應該能夠使用內置麥克風進行輸入,使用耳機進行輸出。

沿著這條線,我進入了兔子洞(探勘了 5-6 歲的問題)並嘗試了很多東西,但最終都沒有成功(我使用的是普通的組合插孔耳機和執行 ubuntu 16.04 的惠普筆記型電腦)。

很多人都對這個問題進行了各種報導。這是經常發生的事情..

未連接耳機時,

內置麥克風和揚聲器執行良好。

PulseAudio 顯示: 在此處輸入圖像描述

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"

連接耳機時,

通過耳機輸出效果很好。但是外部麥克風(位於耳機上)不起作用(結巴的噪音,驅動程序不存在,好吧),但是內部麥克風也被“拔下”。(因此無法錄製任何聲音。)

PulseAudio 顯示: 在此處輸入圖像描述

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

經過多次試驗和測試,我發現這個問題可以通過硬體而不是軟體來解決。使用“USB 耳機/麥克風分配器”,我能夠強制內部麥克風用於輸入,耳機用於輸出。

輸出需要設置為“USB 音頻設備”。 在此處輸入圖像描述 輸入將是預設的內置內部揚聲器。只需要確保它處於打開狀態。 在此處輸入圖像描述 它也適用於Skype。只需將輸入和輸出設置為預設值並關閉麥克風的自動調整即可。 在此處輸入圖像描述

Linux 沒有“配置音頻設備的歷史問題”。問題實際上是設備製造商,主要是筆記型電腦,他們只是在筆記型電腦上預裝了 Windows 驅動程序,這些驅動程序可以準確配置以處理筆記型電腦硬體,因為製造商當然知道硬體是如何設置的。另一方面,製造商不想分享細節,不記錄它們並保密;畢竟,他們提供了 Windows 驅動程序。這就是為什麼通常必須通過痛苦且耗時的逆向工程找出筆記型電腦的所有非標準功能才能在 Linux 下使用它們。

關於音頻,基本上所有現代設備都使用英特爾 HDA 架構,該架構是自描述的,並提供編解碼器(模擬音頻晶片)的圖形表示。原則上,BIOS 應該提供“引腳配置”,即編解碼器晶片的哪個引腳連接到內部揚聲器和麥克風,連接到線路輸入、線路輸出和耳機或耳機組合插孔。

然而,尤其是在過去的幾年裡,製造商似乎並沒有發現正確配置 BIOS 的必要性(畢竟他們已經提供了 Windows 驅動程序)。所以周期是:新的筆記型電腦型號問世,具有實際硬體和足夠技術理解的人弄清楚 BIOS 是如何存在的以及配置應該是什麼樣子,核心開發人員在其中添加了一個怪癖(對該硬體的特殊處理)處理這個問題的驅動程序,使用最新的驅動程序,使用相同硬體的其他人不會注意到並且很高興。直到下一個模型問世,循環再次開始。與此同時,許多不滿意的使用者在它不起作用的地方在網際網路上留下了他們的痕跡,在各地的論壇上提問,通常沒有得到正確的答案。

所以是的,外部麥克風的驅動程序已經開發並可用(事實上,它們與編解碼器的其餘部分相同)。/sound/pci/hda/您可以通過檢查核心源文件和 grep 中的“怪癖”來查看累積的所有怪癖(非標準行為) 。

這意味著,如果您碰巧有一台筆記型電腦的外部耳機麥克風無法正常工作,那麼有人(也許是您?)必須深入研究技術細節,使其工作,並將其報告給 ALSA 核心開發人員。

您可以查看編解碼器晶片報告的有關其內部結構的內容

cat /proc/asound/card*/codec\#*

這給出了內部圖表,您可以手動跟踪它,或者嘗試像codecgraph視覺化它的程序(並不總是給出好的結果)。“引腳複合體”代表引腳。看看你擁有的那個,試著猜測它可能代表外部麥克風,即使它被貼錯標籤。如果您已經辨識它,請使用hdajackretask它來正確標記引腳(或猜測直到您辨識它)。在驅動程序更新之前,有一些方法可以在啟動時將此重新標記為預設設置。

至於內置麥克風和耳機的組合:ALSA 有一個混音器元素,稱為“自動靜音模式”。這將導致 ALSA 在插入或拔出耳機插孔時靜音內部麥克風/揚聲器並取消靜音外部麥克風/耳機(反之亦然)。alsamixer在或中禁用此amixer功能,根據需要將內部和外部麥克風/揚聲器/耳機靜音和取消靜音。

您也可以在 Pulseaudio 中進行配置:開始pavucontrol,在輸入和輸出選項卡中選擇正確的埠。

如果內部和外部“埠”都不可用,或者如果您想將其設為預設值,這也是可能的,儘管這樣做有點麻煩:查看 中的文件/usr/share/pulseaudio/alsa-mixer/,閱讀解釋它們如何工作的註釋. 您需要一個新的音效卡“配置”,它結合了兩條“路徑”,一條用於內部麥克風,一條用於外部耳機,使用正確的 ALSA 混音器元件。這可能需要一些時間才能使其正常工作,Pulseaudio 在這方面不是很直覺。

不,沒有簡單的方法可以做你想做的事;你得弄髒你的手。

引用自:https://unix.stackexchange.com/questions/381071