
私は最近、Windows から OpenSUSE (KDE 付き) に切り替えましたが、まだ学習中です。
私は、内蔵マイク付きのヘッドフォンと、モニターの内蔵スピーカーとウェブカメラのマイクを頻繁に切り替えて使用しています。KMixのPhononメニュー(下の例)を使用すると、使用したいデバイスを一番上に配置できますが、ホットキーで実行できると便利です。オーディオスイッチャーアプリケーションが Windows 上で実行する操作と同じです。これを行うと、オーディオを簡単に調整できるように、マスター チャンネルも新しいチャンネルに設定したいと思います。
何らかのスクリプトを使用して、(a) 新しいデフォルトのオーディオ再生デバイスとオーディオ録音デバイスをその場で選択し、(b) マスター チャネルを同じ再生デバイスに設定しながら、(c) デスクトップ上のホットキーまたはその他の簡単な方法で、それを実行できる方法はありますか?
答え1
ほとんどの 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>
コピーするのに適した例: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
。
次のコマンドを使用して、各デバイスのマスター ミキサーを見つけます。まず、チェックするマスター チャンネルを手動で設定してから、次のコマンドを実行します。
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
答え2
感謝この答えついに解決策を見つけました。以下の手順をご覧ください
混合モードでHDMI出力を常に表示 「アナログオーディオ」と「HDMIオーディオ」の両方のプロファイルをリンクする新しいプロファイルを作成します。
私の理解では、このファイル
/usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf
には Alsa と Pulseaudio 間のすべてのマッピング プロファイルがリストされています。
1.Analog profile
定義に 関連するマッピングを見つけますHDMI 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 フォノン設定 > オーディオ ハードウェア設定に移動し、新しいプロファイルを選択します。
これで、両方のプロファイルが混在して表示されるようになり、簡単に切り替えられるようになります。
このプラズモイドミキサーを使用することをお勧めします:https://store.kde.org/p/1100894/
(追加手順)両方の出力を強制的に有効にする
コンピューターのスピーカーとテレビの両方から同時にオーディオが出力されてもかまわない場合 (つまり、基本的にオーディオ出力を切り替える必要はありません)。
以下の設定を選択すると、ミキサーに新しいエントリが表示されます。
答え3
以前のコメントに基づいて、次のスクリプトを作成し、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
答え4
どこでも検索しました...見つかりませんでした... Pythonでスクリプトを作成したので、それを使用します)
import os
speakers = []
st = 0
au = os.popen("pacmd list-sinks")
audiotm = au.read()
audio = list(audiotm.split())
indices = [i for i, x in enumerate(audio) if x == "name:"]
for num in range(len(indices)):
speakers.append(audio[indices[num]+1])
for num in range(len(speakers)):
speakers[num] = speakers[num][1:len(speakers[num])-1]
dir = os.path.abspath(__file__)
dir = dir[:-5]
try: f = open(dir + "lststate.txt","r");st = int(f.read()) ;f.close();
except:f = open(dir + "lststate.txt","w");f.write(str(st)); f.close();
if st == len(speakers): st = 0;
OUT = speakers[st]
st += 1
f = open(dir + "lststate.txt","w");f.write(str(st)); f.close();
z = os.popen("pactl list short sink-inputs")
OUTID = z.read().split()
x = os.popen("pacmd set-default-sink " + OUT)
for num in range(0,len(OUTID),7):
y = os.popen("pactl move-sink-input " + OUTID[num] + " " + OUT)
exit()