web-dev-qa-db-ja.com

コンボジャック付きヘッドフォン:入力には内蔵マイク、出力にはヘッドフォンを強制

Linuxシステムでは、オーディオデバイス、特にコンボジャックを備えた一般的なヘッドフォンを構成する際に、歴史的な問題(> 5年)がありました。多くの人々がお気に入りのLinuxシステムをビデオチャットに使用したいので、さまざまなフォーラム全体に未解決の問題のイライラする記録があります。

外部マイク用のドライバー(コンボジャック付きのヘッドフォン)が現在利用できない(または開発されていない(?))とわかりました。

したがって、ユーザーは内部マイクを入力に、ヘッドフォンを出力に使用できる必要があります。

この線に沿って、私はうさぎの穴を掘り下げ(最大5〜6年前の問題を掘り下げました)、多くのことを試みましたが、結局成功しません(ubuntu 16.04を実行する一般的なコンボジャックヘッドフォンとhpラップトップを使用しています)。

多くの人々がこの問題をさまざまに報告しています。一般的には次のことが起こります。

ヘッドフォンが接続されていない場合、

内蔵マイクとスピーカーがうまく機能します。

PulseAudioショー: enter image description here

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ショー: enter image description here

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

9
rraadd88

多くの試行錯誤の結果、この問題はソフトウェアではなくハードウェアで解決できることがわかりました。 「USBヘッドフォン/マイクスプリッター」を使用して、入力用の内蔵マイクと出力用のヘッドフォンを強制することができました。

出力を「USBオーディオデバイス」に設定する必要があります。 enter image description here 入力はデフォルトの内蔵スピーカーです。オンになっていることを確認するだけです。 enter image description here Skypeでも動作します。入力と出力をデフォルトに設定し、マイクの自動調整をオフにするだけです。 enter image description here

1
rraadd88

Linuxには、「オーディオデバイスの構成における歴史的な問題」はありません。問題は、実際にはハードウェアのセットアップ方法を正確に把握しているため、デバイスの製造元、主にラップトップであり、ラップトップのハードウェアに対応するように正確に構成できるWindowsドライバーがプリインストールされたラップトップを出荷するだけです。一方、製造元は詳細を共有したくなく、それらを文書化せず、秘密にします。結局のところ、彼らはWindowsドライバーを提供しています。そのため、ノートパソコンの非標準機能はすべて、Linuxで使用できるようにするために、面倒で時間のかかるリバースエンジニアリングを通じて見つけなければならないことがよくあります。

オーディオに関しては、基本的にすべての最新のデバイスがIntel HDAアーキテクチャを使用しています。これは自己記述型であり、コーデック(アナログオーディオチップ)のグラフ表現を提供します。原則として、BIOSは「ピン構成」、つまりコーデックチップのどのピンが内部スピーカーとマイク、ライン入力、ライン出力、およびヘッドフォンまたはヘッドフォンのコンボジャックに接続されるかを提供することになっています。

ただし、特にここ数年、メーカーはBIOSを正しく構成する必要があるとは思わなかった(結局のところ、すでにWindowsドライバーを提供している)。したがって、サイクルは次のとおりです。新しいラップトップモデルが登場し、実際のハードウェアと十分な技術的理解を持つ誰かがBIOSの嘘や構成が実際にどのように見えるかを理解し、カーネル開発者が奇妙なこと(そのハードウェアの特別な扱い)を追加します。最新のドライバーでは、同じハードウェアを使用している他の人々は気づかず、満足しています。次のモデルが出て、サイクルが再び始まるまで。その間、うまくいかない多くの不幸なユーザーは、多くの場合、正しい答えが得られないまま、どこにでもフォーラムにたどり着くまで、インターネット上に痕跡を残しています。

そのため、はい、外部マイク用のドライバーが開発され、利用可能です(実際、これらは他のコーデックと同じドライバーです)。カーネルソースファイルを/sound/pci/hda/で調べ、grepで「quirk」を調べると、蓄積されたすべての癖(非標準の動作)を確認できます。

つまり、外部ヘッドフォンマイクが機能していないラップトップを使用している場合、誰か(多分あなたですか?)が技術的な詳細を調べ、それを機能させて、ALSAカーネル開発者に報告する必要があります。

あなたはコーデックチップがそれらの内部構造について報告するものを見ることができます

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

これにより内部グラフが表示されます。手動で追跡するか、codecgraphなどのプログラムを試して視覚化できます(常に良い結果が得られるとは限りません)。 「ピンコンプレックス」はピンを表します。あなたが持っているものを見て、それが誤ってラベルされていても、外部マイクを表すかもしれないと推測してみてください。 hdajackretaskを使用して、ピンを識別した場合(または推測するまで推測した場合)にピンに正しくラベルを付けます。ドライバーが更新されるまで、ブート時にこの再ラベル付けをデフォルトにする方法があります。

内蔵マイクとヘッドフォンの組み合わせについて:ALSAには、「オートミュートモード」と呼ばれるミキサー要素があります。これにより、ALSAは、ヘッドフォンジャックが接続または取り外しされたときに、内部マイク/スピーカーをミュートし、外部マイク/ヘッドフォンのミュートを解除します(またはその逆)。 alsamixerまたはamixerでこれを無効にし、必要に応じて内部および外部のマイク/スピーカー/ヘッドフォンをミュートおよびミュート解除します。

Pulseaudioでこれを構成することもできます:pavucontrolを開始し、入力および出力タブで適切なポートを選択します。

内部と外部の両方の「ポート」が利用できない場合、またはそれをデフォルトにしたい場合も可能ですが、少し面倒です:/usr/share/pulseaudio/alsa-mixer/のファイルを見て、コメントを読んでくださいそれらがどのように機能するかを説明します。正しいALSAミキサー要素を使用して、内部マイク用と外部ヘッドフォン用の2つの「パス」を組み合わせたサウンドカードの新しい「構成」が必要です。これが正しく機能するまでには時間がかかる可能性があります。Pulseaudioは、この例ではあまり直感的ではありません。

いいえ、やりたいことを簡単に行う方法はありません。手を汚す必要があります。

11
dirkt