最近、WindowsからOpenSUSE(KDE付き)に切り替えましたが、まだ学習曲線をたどっています。
内蔵マイク付きのヘッドフォンを使用するか、モニターの内蔵スピーカーとWebカメラのマイクを使用するかを頻繁に切り替えます。 KMixを介してフォノンメニュー(下の例)を使用して、使用したいデバイスを上に配置するようにデバイスを再配置できますが、次のようなホットキーで実行できるようにしたいと思います。 Audio Switcher アプリケーションはWindowsで動作します。その際、マスターチャンネルも新しいチャンネルに設定して、オーディオを簡単に調整できるようにしたいと思います。
(a)新しいデフォルトのオーディオ再生とオーディオ録音デバイスをその場で選択できるスクリプトを使用する方法はありますか(b)マスターチャネルを同じ再生デバイスに設定する(c)ホットキーまたはデスクトップ上の他の簡単な方法?
ほとんどの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
利用可能な出力シンクを確認するには
$ 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
利用可能な入力ソースを確認するには
$ 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
デフォルトを確認するには
$ 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
デフォルトを設定するには
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>
一部のカードには複数の切り替え可能なポートがあり、必要なポートがデフォルトではない場合があります。
利用可能なポートを確認します。
$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
を使用してマスターチャネルを設定できます。
次のコマンドを使用して、各デバイスのマスターミキサーを見つけます。最初に、マスターチャネルを確認するチャネルに手動で設定してから、次のコマンドを実行します。
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
そのコマンドの結果と制御するオーディオシンクを使用して、次の構文を使用してマスターチャネルを変更します。
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
最後に、現在のすべてのオーディオを新しいチャネルに切り替え、それをデフォルトとして設定し、マスターチャネルとして設定するスクリプトは次のようになります。
#!/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
おかげで この答え 私は最終的に解決策を見つけました、以下の指示を参照してください
常にHDMI出力を混合して表示しますプロファイル「アナログオーディオ」と「HDMIオーディオ」の両方をリンクする新しいプロファイルを作成します。
私の理解からこのファイル/usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf
AlsaとPulseaudio間のすべてのマッピングプロファイルを一覧表示します。
1。
あなたに関連するマッピングを検索してくださいAnalog profile
およびHDMI profile
定義。 (description:はに示すDevice Profilesと一致する必要がありますオーディオボリューム 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。
次のコマンドでPulseオーディオを再起動します:
pulseaudio --kill; sleep 1; pulseaudio --start
4。
KDEフォノン設定>オーディオハードウェアセットアップに移動し、新しいプロファイルを選択します。
これで、両方のプロファイルが混在して表示されるはずなので、簡単に切り替えることができます。
このプラズモイドミキサーを使用することをお勧めします: https://store.kde.org/p/1100894/
(追加ステップ)両方の出力を強制的に有効にします
コンピュータスピーカーとTV出力の両方のオーディオを同時に使用してもかまわない場合(基本的に、オーディオ出力を切り替える必要はありません)。
以下の設定を選択すると、ミキサーに新しいエントリが表示されます
私の状況は簡単です。 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」出力で固有のパターンを探し、必要なパラメーターを使用してスクリプトを呼び出すことができます。
以前のコメントに基づいて、次のスクリプトを作成し、それをホットキーにバインドして、KDEプラズマで使用して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