外部サウンドアダプターを備えたPulseaudio:サウンド破損のトラブルシューティング

外部サウンドアダプターを備えたPulseaudio:サウンド破損のトラブルシューティング

サウンドカードを内蔵したノートパソコンに外部USBサウンドアダプタを使用しています。いくつかの問題があります:

  • デフォルトでは、アプリケーションは内部サウンドカードを使用し続けます。次の方法でこの問題を手動で解決できます。開くpavucontrol: 「出力デバイス」に移動し、アダプタ出力を見つけて「代替として設定」をクリックします。場合によっては、[再生]タブですでに再生されているアプリケーションを見つけて、そのシンクを変更します。

  • キーボードの音量ボタンは、外部アダプタではなく内部サウンドカードで動作し続けます。

  • アダプタには、物理​​音量を上げ、下げ、ミュート切り替えボタンがあります。押すと、システムは予期した操作を実行しますが、外部アダプタではなく内部サウンドカードで実行されます。未テストのマイクミュートボタンもあります。
  • 外部アダプタを使用して音量を設定するとpavucontrol機能しますが、35%以下に設定すると音はまったく聞こえません。ボリュームがかなり高いので、静かなソースには35%が適しており、騒々しいソースには適していません。アプリ固有のボリューム制限を設定して(pavucontrolウィンドウでクリック)、この問題を手動で解決できますが、面倒でアプリが新しいストリームを起動するたびに再実行する必要があります。

所有方法:

  • (1) アプリケーションはデフォルトでアダプタを再生します。
  • (2)キーボードの音量ボタンは選択したサウンドカード用です(ここではアダプタ)。
  • (3)物理アダプターボタンは選択したサウンドカード用です(ここではアダプター)。
  • (4)アダプターの音量設定は、無音状態に直接入らずに35%未満に下げることができます。

システムは XFCE 4.10 を実行する Ubuntu 14.10 です。アダプターは「ID 0d8c:000c C-Media Electronics, Inc. オーディオアダプター」です。

ベストアンサー1

実験的な解決策があります。

まず、アダプター・リスナー名を取得します。

最初はアダプタのリスナー名を見つける必要があります。シェルを開きます。bashデフォルトのロケールに切り替えて、ローカライズの問題を想定して予防します。

export LC_ALL=C 

受信者のリストを取得するには:

pacmd list-sinks | grep name:

出力を読み取り、コマンドラインに名前を手動でコピーして貼り付けることができます。ADAPTER_SINK_NAME=name_in_your_setup

より自動的に、以下の行は私に効果があり、多くの場合に機能する必要がある最初の非PCIアダプタの名前を見つけます。

ADAPTER_SINK_NAME=$( pacmd list-sinks | sed -n 's/^.*name: <\([^>]*\.usb[^>]*\)>$/\1/p' | head -n 1 )
echo $ADAPTER_SINK_NAME

代替目的pactl(ただし、上記の行を実行する必要があります。exportそうしないと、デフォルト以外のロケールでは何も見つかりません):

ADAPTER_SINK_NAME=$( pactl list sinks | sed -n 's/^.*Name: \(.*\.usb.*\)$/\1/p' | head -n 1 ) 
echo $ADAPTER_SINK_NAME

部分修理の実施(1)(2)(3)

今、これは質問のポイント(1)(2)(3)を提供します。

pactl set-default-sink $ADAPTER_SINK_NAME

興味深いことに、私は(2)と(3)を提供しますが、常に(1)ではなくpacmd set-default-sink ...pacmd代わりに)を最初に使用しました。pactl

(1)~(4) 全修正を受ける

それに基づいていますPulseAudioを使用して2つのサウンドカードで同時に音楽を再生できますか?原則は「同時に1つのサウンドカードで再生」です。 ;-)

pacmd load-module module-combine sink_name=adapter-soft-volume slaves=$ADAPTER_SINK_NAME
pactl set-default-sink adapter-soft-volume

これで、すべてが質問に記載されているとおりに機能します。

掃除してください。

上記のコマンドを複数回実行すると、結合された受信機は複数になり、最後の受信機ではなく最初の受信機が使用されます。何らかの理由で再起動するには、まず次のコマンドを実行して結合シンクをクリーンアップします。

pacmd unload-module module-combine

続行するには、今すぐクリーンアップ機能を使用しないでください。

ボーナス:現在再生中のストリームをアダプタに移動

上記のコマンドは、すでに再生されているストリームではなく新しいストリームで機能します。これにより必要なものが調整されます。

for SINK_ID in $(pactl list sink-inputs | sed -n 's/^Sink Input #\([0-9]*\)$/\1/p')
do
    echo Sink $SINK_ID
    pactl move-sink-input $SINK_ID $ADAPTER_SINK_NAME
    pactl move-sink-input $SINK_ID adapter-soft-volume
done

円形パスを生成する結合入力を含むすべての受信機入力を移動しようとします。幸いなことに、pulseaudioは正しいことを行い、Failure: Invalid argumentそれを表示するために一度印刷します。

自動化

次のスクリプトは、(1)〜(4)の利点を提供します。上記の内容を追加できますmove-sink-input。アダプタを接続するたびに実行するのが面白いかもしれません。

#!/bin/bash

export LC_ALL=C

ADAPTER_SINK_NAME=$( pacmd list-sinks | sed -n 's/^.*name: <\([^>]*\.usb[^>]*\)>$/\1/p' | head -n 1 )

if [[ -z "${ADAPTER_SINK_NAME:-}" ]]
then
    ADAPTER_SINK_NAME=$( pactl list sinks | sed -n 's/^.*Name: \(.*\.usb.*\)$/\1/p' | head -n 1 ) 
fi

echo will plug on $ADAPTER_SINK_NAME

# partial fix, can be run anyway to provide partial benefit if later steps fail
pactl set-default-sink $ADAPTER_SINK_NAME

pacmd unload-module module-combine # not useful first, used to clean things up if run several times

pacmd load-module module-combine sink_name=adapter-soft-volume slaves=$ADAPTER_SINK_NAME
pactl set-default-sink adapter-soft-volume

おすすめ記事