背景
LinuxのBluetooth音量設定画面で、ヘッドホン(ATH-HL7BT)の接続プロファイルを選ぶ場面があった。選択肢が複数あり、どれが音質重視でどれが通話重視なのか分かりづらいので整理する。さらに、実際に使っていてマイクの声が小さく聞こえる問題も発生したので、音量まわりの仕組みと合わせて整理する。
プロファイルの設定
5つの設定の違い
| 設定 | 音質 | マイク | 用途 |
|---|
| Headset Head Unit (HSP/HFP) | 低い | 使える | 通話 |
| High Fidelity (SBC) | 良い | 基本使えない | 音楽・動画 |
| High Fidelity (SBC-XQ) | より高音質 | 基本使えない | 音楽・映画 |
| Headset (CVSD) | 低い | 使える | 通話 |
| Headset (mSBC) | 通話向け | 使える | 高音質な音声通話 |
- 音質を取るか、マイクを取るかで系統が分かれる
- 音楽・動画用の「High Fidelity」系はマイク非対応が基本
- 通話用の「Headset」系はマイク対応だが音質が下がる
HSPとHFPの違い
| 方式 | 特徴 |
|---|
| HSP | Headset Profileの略、通話用の古い規格、音量調整などの操作には非対応 |
| HFP | Hands-Free Profileの略、HSPを拡張した規格、音量調整や着信操作などに対応 |
- どちらも通話用のプロファイルで、コーデックにはCVSDまたはmSBCが使われる
- 表中のCVSD・mSBCは、HSP/HFPの中で使われるコーデックという位置づけ
SBCとSBC-XQの違い
| 方式 | 特徴 |
|---|
| SBC | Bluetoothで一般的に使われる音声圧縮方式、安定性と互換性が高い |
| SBC-XQ | SBCを高ビットレートで動作させる方式、対応環境なら圧縮による音質劣化を減らせる |
- SBC-XQは通信状況によっては音が途切れやすくなる場合がある
用途別のおすすめ
| 用途 | 設定 |
|---|
| 音楽・YouTube・映画 | SBC-XQ |
| ゲーム(音を聴くだけ) | SBC-XQ |
| Discord・Zoomなどでヘッドホンのマイクも使う | mSBC |
| mSBCで通話がうまくいかない | CVSD |
プロファイル切り替えの注意点
Bluetoothヘッドホンのマイクを使うモードに切り替えると、再生音質が大きく下がることがある。音楽鑑賞とマイク通話を同じヘッドホンで兼用する場合は、都度プロファイルを切り替える運用が必要になる。
音声システムの仕組み(PipeWire/PulseAudio)
プロファイルの選択とは別に、音量の大きさは別レイヤーの話になる。先にLinuxの音声システムの構造を整理する。
レイヤー構造
1
2
3
4
5
6
7
| ALSA(カーネルのサウンドドライバ層、物理デバイスを直接制御)
↑
PipeWire(サウンドサーバ、ルーティング・ミキシングを担当。最近のディストリのデフォルト)
↑
PulseAudio互換レイヤー(PipeWireがPulseAudioのふりをする機能)
↑
pactl / pavucontrol(操作コマンド・GUI)
|
pactlはもともとPulseAudio用のコマンドだが、PipeWireが互換レイヤーを持っているためそのまま使えるwpctlはPipeWire純正のコマンドで、pactlより低レベルな操作ができる
sinkとsource
- sink: 音の出口(スピーカー・ヘッドホン側)
- source: 音の入口(マイク側)
- Bluetoothヘッドセットの場合、再生側は
bluez_output.xxx、マイク側はbluez_input.xxxという名前のsource/sinkとして見える
音量の単位(%とdB)
- PipeWire/PulseAudioの音量表示は「%」だが、内部的には対数スケールのdB(デシベル)で管理されている
- 100% = 0dB(ソフトウェア的な増幅も減衰もしていない基準値)
- %が下がるほどdBは大きくマイナスになる。例えば7%は-70.57dB程度まで下がり、ミュートではないが実質ほぼ無音に近いレベルになる
マイクの音が小さいときの調査・対処
現状確認
1
2
3
4
5
6
7
8
9
10
11
| # Bluetoothカードを含むカード一覧
pactl list cards short
# source(マイク)一覧
pactl list sources short
# 現在のデフォルトsource
pactl get-default-source
# 対象sourceの詳細(音量・コーデックなど)
pactl list sources
|
pactl list sourcesの出力には、Volume(%とdB)、Mute、api.bluez5.codec(使用中のコーデック)などが含まれる
原因の特定
- 今回のケースでは、ATH-HL7BTの
bluez_input.xxx(マイク用source)のVolumeが7%(-70.57dB)になっていた - ミュートにはなっていなかったが、音量自体が実質無音に近いレベルまで絞られていたのが声が小さい原因
- プロファイル自体は
msbc(マイク対応のコーデック)で正しく動作していたため、プロファイル選択とは独立した問題だった
対処
1
| pactl set-source-volume <source名> 100%
|
- 対象のsource名を100%(0dB)に指定し直すことで、マイクの入力レベルを基準値まで戻せる
注意点
pactlでの変更はセッション中の設定変更であり、再起動やBluetoothの再接続で元の音量に戻る可能性がある- 繰り返し戻る場合は、何らかのアプリがマイク音量をAPI経由で下げている、あるいはOS側の自動ゲイン調整が関与している可能性があるため、再現するか確認した上で恒久的な固定方法を検討する
まとめ
Bluetoothヘッドホンの音声設定は、「プロファイル(SBC/SBC-XQ/HSP/HFP/mSBC/CVSD)」と「音量」という2つの独立したレイヤーで考える必要がある。プロファイルは音質とマイク対応の有無を決め、音量はPipeWire/PulseAudio側のsource/sinkに対する増幅・減衰の設定(%・dB)で決まる。マイクが小さいと感じたときは、まずプロファイルではなくpactl list sourcesで対象sourceのVolumeを確認し、必要であればpactl set-source-volumeで基準値(100%・0dB)に戻すのが有効。