KDEでオーディオデバイスをすばやく変更する


16

最近、WindowsからOpenSUSE(KDEを使用)に切り替えましたが、まだ学習曲線をたどっています。

マイクを内蔵したヘッドフォンの使用と、モニターの内蔵スピーカーとウェブカメラのマイクの使用をかなり頻繁に切り替えます。KMixのPhononメニューを使用して(下の例を参照)、使用するデバイスを上に配置するようにデバイスを再配置できますが、ホットキーでできることを望みます音声スイッチャーのアプリケーションは、Windows上で行います。また、マスターチャンネルを新しいチャンネルに設定して、オーディオを簡単に調整できるようにします。

ここに画像の説明を入力してください

(a)新しいデフォルトのオーディオ再生およびオーディオ録音デバイスをその場で選択し、(b)マスターチャネルを同じ再生デバイスに設定する(c)ホットキーまたはデスクトップ上の他の簡単な方法?

回答:


10

ほとんどのGUIキットは同じバックエンドPulseAudioを使用します。pactl制御スクリプトを記述するために使用します。

NAME
       pactl - Control a running PulseAudio sound server

DESCRIPTION
       pactl can be used to issue control commands to the PulseAudio sound server.

       pactl only exposes a subset of the available operations. For the full set use the pacmd(1).

ソース: man pactl

  1. 利用可能な出力シンクを確認するには

    $ pactl list short sinks
    0   alsa_output.pci-0000_01_00.1.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    1   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    
  2. 利用可能な入力ソースを確認するには

    $ pactl list short sources
    0   alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    1   alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    2   alsa_input.pci-0000_00_1b.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    
  3. デフォルトを確認するには

    $ pactl info
    Server String: /run/user/1000/pulse/native
    Library Protocol Version: 30
    Server Protocol Version: 30
    Is Local: yes
    Client Index: 2
    Tile Size: 65472
    User Name: user
    Host Name: userpc
    Server Name: pulseaudio
    Server Version: 6.0
    Default Sample Specification: s16le 2ch 44100Hz
    Default Channel Map: front-left,front-right
    Default Sink: alsa_output.pci-0000_00_1b.0.analog-stereo
    Default Source: alsa_input.pci-0000_00_1b.0.analog-stereo
    
  4. デフォルトを設定するには

    pactl set-default-source id-or-name
    pactl set-default-sink id-or-name
    

    例:

    pactl set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    

    または:

    pactl set-default-source 2
    pactl set-default-sink 1
    

ノート:

  • これは新しいストリームのみに影響します。現在実行中のストリームを移動する必要があるため、次を使用します。

    pacmd move-sink-input <stream-id> <sink-id/name>
    

    コピー元の良い例:HDMIをラップトップに接続したときにHDMIオーディオに切り替える(14.04)

  • 一部のカードには複数の切り替え可能なポートがありますが、必要なポートがデフォルトではない場合があります。

    利用可能なポートを確認します。

    $pactl list sinks
    Sink #1
        State: RUNNING
        Name: alsa_output.pci-0000_00_1b.0.analog-stereo
        Description: Built-in Audio Analog Stereo
        Driver: module-alsa-card.c
        ...
        Ports:
            analog-output-speaker: Speakers (priority: 10000, not available)
            analog-output-headphones: Headphones (priority: 9000, available)
        Active Port: analog-output-headphones
        Formats:
            pcm
    ...
    

    設定するには:

    pactl set-sink-port <sink-id/name> <port-name>
    

    例:

    pactl set-sink-port 1 analog-output-headphones
    

マスターチャンネルを変更するには

このチュートリアルに従ってqdbus、次の方法でマスターチャネルを設定できます。

  1. 次のコマンドを使用して、各デバイスのマスターミキサーを見つけます。最初にマスターチャネルを手動でチェックするものに設定し、次にコマンドを実行します。

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. そのコマンドの結果と制御したいオーディオシンクを使用して、次の構文を使用してマスターチャネルを変更します。

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. 最後に、現在のすべてのオーディオを新しいチャネルに切り替え、デフォルトとして設定し、マスターチャネルとして設定するスクリプトは次のようになります。

    #!/bin/bash
    pactl set-default-sink alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo
    pactl set-default-source alsa_input.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-mono
    INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo &> /dev/null; done
    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "PulseAudio::Playback_Devices=:1" "alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo" 2>&1 > /dev/null

これはすばらしい答えのように見えますが、私のインストールがPulseAudioを使用しているとは思いません。コマンドを使用できますが、現在のデフォルトのソースとシンクは、フォノンメニューに表示されるものと同じではありません。そして、それらを変更しても効果はないようです。
ライアン

@RyanはopenSUSE 13.1 KDEでテストしたところ、うまく機能しているようです。唯一気づいたのは、設定がPulseAudioから変更された場合、フォノンパネルのインターフェイスが更新されないことです。インストールしpavucontrolて、画面上で3つを一緒に開きます(ターミナルw / pactl + pavucontrolパネル+フォノンパネル)。それぞれの設定を変更してみてください。時々、フォノンを閉じて再度開いて、実際の設定状態を確認する必要があります。
user.dz

両方のシンクをリンクする新しいプロファイルを作成できるため、それらは常に表示されpactl list short sinksます。以下の回答を参照してください
フランチェスコ

3

この答えのおかげで、私は最終的に解決策を見つけました、以下の指示を参照してください

混合で常にHDMI出力を表示 する「アナログオーディオ」と「HDMIオーディオ」の両方のプロファイルをリンクする新しいプロファイルを作成します。

私の理解では、このファイルに /usr/share/pulseaudio/alsa-mixer/profile-sets/default.confはAlsaとPulseaudio間のすべてのマッピングプロファイルがリストされています。

1.
自分Analog profileHDMI profile定義に関連するマッピングを見つけます。(説明:オーディオボリューム Kde設定モジュールに表示されるデバイスプロファイルと一致する必要があります)

私にとっては次のとおりです。

[Mapping analog-stereo]
device-strings = front:%f
channel-map = left,right
paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2
paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic
priority = 10

[Mapping hdmi-stereo-extra1]
description = Digital Stereo (HDMI 2)
device-strings = hdmi:%f,1
paths-output = hdmi-output-1
channel-map = left,right
priority = 2
direction = output

2.
上記のマッピング定義に基づいて、上記の両方をグループ化する次の新しいプロファイルを作成しました。

[Profile output:analog-stereo+output:hdmi-stereo-extra1]
description = All
output-mappings = analog-stereo hdmi-stereo-extra1
input-mappings = analog-stereo

3.
次のコマンドでパルスオーディオを再起動します。

pulseaudio --kill; sleep 1; pulseaudio --start

4.
KDEフォノン設定>オーディオハードウェアセットアップに進み、新しいプロファイルを選択します。 ミキサー内の2つのプロファイル

これで、両方のプロファイルが混在して表示され、簡単に切り替えることができます。

HDMIは常にミキサーに表示されます
このプラズモイドミキサーを使用することをお勧めします:https : //store.kde.org/p/1100894/

(追加ステップ)両方の出力を強制的に有効にする

コンピューターのスピーカーとテレビの両方で同時に音声を出力することを気にしない場合(したがって、基本的に音声出力を切り替える必要はありません)。

以下の設定を選択すると、ミキサーに新しいエントリが追加されます

ここに画像の説明を入力してください


これは素晴らしいです、魅力のように動作します、ありがとう!
stsloth

0

以前のコメントを基に、次のスクリプトを作成し、KDE ​​Plasmaで使用するホットキーにバインドして、2つのオーディオデバイスを切り替えました。このプロセスを完全に自動化するのではなく、オーディオソースを制御するのが好きです。

必要に応じてオーディオデバイスを変更します。使用pactl list short sinksしてデバイスを決定します。

#!/bin/bash

# Audio sinks
HEADSET='alsa_output.usb-Corsair_Corsair_VOID_PRO_Wireless_Gaming_Headset-00.analog-stereo'
SPEAKERS='alsa_output.pci-0000_1f_00.3.analog-stereo'

# Get current audio sink
CURRENTDEV=$(pactl list short sinks | grep RUNNING | awk {'print $2'})

# Determine our next audio sink
if [[ "$CURRENTDEV" == "$HEADSET" ]]; then
    NEXTDEV=$SPEAKERS
else
    NEXTDEV=$HEADSET
fi

# Set our default device
pactl set-default-sink $NEXTDEV

# Move current streams (dont check for null, if null you wont see heads up display of audio change)
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
for i in ${INPUTS[*]}; do pacmd move-sink-input $i $NEXTDEV &> /dev/null; done


0

私の状況は単純です。hdmiとアナログの2つの出力があるため、user.dzの回答に基づいて(ありがとう)この小さなスクリプトを作成し、キーボードショートカットで呼び出します。

#!/bin/bash
# parameter: "hdmi" or "analog"

output=`pactl list short sinks |grep $1 | cut -f1`

pactl set-default-sink $output

for i in `pacmd list-sink-inputs |grep index: | awk '{print $2}'`; do
  pacmd move-sink-input $i $output
done

他のインターフェイスがある場合は、「pactl list short sinks」出力で一意のパターンを探し、必要なパラメーターを指定してスクリプトを呼び出すことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.