web-dev-qa-db-ja.com

PulseAudioでソフトウェアマスターのボリュームコントロールを強制する方法は?

ハードウェアボリュームコントロールがないサウンドカードを持っています(USBで接続されたCreative Sound Blaster X-Fiサラウンド5.1)。それでも、PulseAudioはハードウェアのボリュームコントロールがあると考えているようです。 pavucontrolでマスターボリュームを調整しても何も起こりません。ソフトウェアでマスターボリュームの調整を強制するにはどうすればよいですか? (PulseAudioに加えてALSAでsoftvolを使用したくないのは、これによりレイテンシーが増加し、PulseAudioがソフトウェアミキシングを行うことを知っているからです)。

私はPulseAudio5.0を使用しています。

1
Watcom

EMU 0202USBオーディオカードの場合と同様の状況。 Alsaは、デバイスをミュートする以外は実際には何もしない「PCM」ミキサーコントロールを示しています。

$ amixer -c USB

Simple mixer control 'PCM',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 200
  Mono:
  Front Left: Playback 200 [100%] [0.00dB] [on]
  Front Right: Playback 200 [100%] [0.00dB] [on]

PulseaudioシンクのHW_VOLUME_CTRLフラグは、デフォルトのプロファイルセット用に構成されたalsa-mixerパスから取得されます。

/usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf.common

[Element PCM]
switch = mute
volume = merge

あなたはそれを無視するようにpulseaudioに指示することができます、そしてpulseaudioは代わりにソフトウェアで音量を制御します:

/usr/share/pulseaudio/alsa-mixer/paths/emu-usb-output.conf

[Element PCM]
switch   = mute
volume   = ignore

/usr/share/pulseaudio/alsa-mixer/profile-sets/emu-usb.conf

[General]
auto-profiles = yes

[Mapping emu-usb-stereo]
device-strings = hw:%f
channel-map = left,right
paths-output = emu-usb-output

次に、udev ENV{Pulse_PROFILE_SET}=emu-usb.confルールを使用するか、alsa-cardを手動でロードして、この特定のカード用にカスタマイズしたプロファイルを使用するようにpulseaudioに指示します。

/etc/Pulse/system.pa

load-module module-alsa-card device_id=USB name="emu-usb" card_name="emu-usb" profile_set=emu-usb.conf profile="output:emu-usb-output" ...

これにより、HW_VOLUMEフラグのないpulseaudio alsa_output.emu-usb.emu-usb-stereoシンクが生成され、通常のパルスボリュームコントロールはalsaアプリケーションから機能します。

4
Tero Marttila

USBドライバーの実行と保守が簡単に思える解決策がArchWikiにありました(再び): https://wiki.archlinux.org/index.php/PulseAudio#Keyboard_volume_control

次のコマンドでシンクラベル(int)を見つけます。

pactl list sinks short

次に、ボリュームを制御し、USBドライバーに対応するシンクをミュートします(1としましょう)。

sh -c "pactl set-sink-mute 1 false ; pactl set-sink-volume 1 +5%"

最後に、これらのコマンドをシステムショートカット(またはエイリアス)に追加して、キーボードからどこからでも音量を制御できます。

0
dtrckd