ハードウェアボリュームコントロールがないサウンドカードを持っています(USBで接続されたCreative Sound Blaster X-Fiサラウンド5.1)。それでも、PulseAudioはハードウェアのボリュームコントロールがあると考えているようです。 pavucontrolでマスターボリュームを調整しても何も起こりません。ソフトウェアでマスターボリュームの調整を強制するにはどうすればよいですか? (PulseAudioに加えてALSAでsoftvolを使用したくないのは、これによりレイテンシーが増加し、PulseAudioがソフトウェアミキシングを行うことを知っているからです)。
私はPulseAudio5.0を使用しています。
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アプリケーションから機能します。
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%"
最後に、これらのコマンドをシステムショートカット(またはエイリアス)に追加して、キーボードからどこからでも音量を制御できます。