Ink

Contents related to tech, hobby, etc

アプリケーション毎のオーディオレベルを調整する

|

アプリケーション毎のオーディオレベルを調整する

PulseAudioを使用している際、たまにアプリケーション毎の 音量バランスがバグる(過剰な表現)時がある。

私の環境では、qutebrowserの音量が異常に小さくZoomやShotcutの 音量が異常にデカくなっており、Zoom会議に参加しながら共有された YouTubeの動画を見ることができない等の問題がありました。

原因

sink-input のVolumeが小さくなっていることがあります。

pactl list sink-inputs
Sink Input #37
	Driver: protocol-native.c
	Owner Module: 11
	Client: 124102
	Sink: 0
	Sample Specification: s16le 2ch 48000Hz
	Channel Map: front-left,front-right
	Format: pcm, format.sample_format = "\"s16le\""  format.rate = "48000"  format.channels = "2"  format.channel_map = "\"front-left,front-right\""
	Corked: no
	Mute: no
	Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
	        balance 0.00
	Buffer Latency: 131813 usec
	Sink Latency: 100186 usec
	Resample method: speex-float-1
	Properties:
		media.name = "Audio Stream"
		application.name = "shotcut"
		native-protocol.peer = "UNIX socket client"
		native-protocol.version = "35"
		application.process.id = "882662"
		application.process.user = "me"
		application.process.host = "myHost"
		application.process.binary = "shotcut"
		application.language = "C"
		window.x11.display = ":0"
		application.process.machine_id = "<省略>"
		application.process.session_id = "2"
		module-stream-restore.id = "sink-input-by-application-name:shotcut"

この中の Volume: に表示されているのが、各Sink inputのボリュームです。 100%より小さい場合、100%にした方が良いかもしれません。 注意点として、 実際に音を鳴らしているなど音声が流れているないし流れる状態にある 必要があります。 そうでない場合、Sink inputの一覧に表示されません。

解決方法

該当の sink-input のボリュームを100%にしてあげます。

pactl set-sink-input-volume <ID> 100%

SinkのIDは、先程の pactl list sink-inputs の冒頭にある

Sink Input #37

の#以降の数字で、この例だと37です。

解説

PulseAudioでは、全てのアプリケーションは "client" としてサーバーに接続されます。 そして各アプリケーションに於いて何かしら音声が流れると、新しい sink-input が作成 されて登録されます。ここから、音声が sink に渡って音が鳴るわけです。

この sink-input にはそれぞれにボリュームが設定されているので、そこを調節してあげると アプリケーション間のボリューム調整ができます。

PulseAudioの仕組み等については、Pulseaudio under the hoodというブログ記事が、 公式で紹介されているほど詳しいです。