LoginSignup
5
5

Linuxでワイヤレスイヤホンの実力を発揮!pulseaudio-modules-btを導入する

Last updated at Posted at 2021-10-17

2023/08/09 追記
このモジュールが持つ機能はPulseAudio 15で統合されました。
現在リポジトリはアーカイブされており、PulseAudio 15を使用することが推奨されています。
(この記事のような設定は不要です)

LinuxではPulseAudioと連携して動くBlueZと拡張モジュールのおかげでワイヤレスイヤホンが使えます。

標準ではSBCという基本のコーデックしかサポートされていないため、WindowsやMacでさえaptXをサポートしているのに対して劣っています。

そこで、有志が開発した「pulseaudio-modules-bt」というモジュールを入れることで高音質コーデックがLinuxでも使えるようになります。

対応表

コーデック 送信 受信
SBC
AAC
aptX
aptX HD
LDAC -

ビルド

環境はUbuntu 20.04を前提に進めていきます。

まずはじめにビルドに必要なパッケージをインストールします。

$ sudo apt install build-essentials gcc cmake pkg-config ffmpeg git libfdk-aac-dev libavcodec-dev libpulse-dev libdbus-1-dev libsbc-dev libltdl-dev libbluetooth-dev

libldac

libldacを最初にビルドします。
GitHubからクローンしてビルドします。

$ git clone https://github.com/EHfive/ldacBT.git
$ cd ldacBT
$ git submodule update --init
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DINSTALL_DIR=/usr/lib -DLDAC_SOFT_FLOAT=OFF ..
$ sudo make DEST_DIR=$DEST_DIR install

pulseaudio-modules-bt

ビルドする前にオリジナルのモジュール(pulseaudio-modules-bluetooth)をバックアップします。

$ export MODDIR=`pkg-config --variable=modlibexecdir libpulse`
$ sudo find $MODDIR -regex ".*\(bluez5\|bluetooth\).*\.so" -exec cp {} {}.bak \;

それからGitHubからクローンしてビルドします。

$ cd
$ git clone https://github.com/EHfive/pulseaudio-modules-bt.git
$ cd pulseaudio-modules-bt
$ git submodule update --init
$ git -C pa/ checkout v`pkg-config libpulse --modversion|sed 's/[^0-9.]*\([0-9.]*\).*/\1/'`
$ mkdir build && cd build
$ cmake ..
$ make
$ sudo make install

モジュールの設定

設定をいじるとさらにコーデックの品質を上げられます。

項目がいろいろありますが、とりあえずおすすめの設定を入れます。

/etc/pulse/default.pa を編集します。
70行目あたりに .ifexists module-bluetooth-discover.so という行があります。
その次の行の load-module... の行を編集します。下の内容で書き換えます。

default.pa
load-module module-bluetooth-discover a2dp_config="ldac_eqmid=hq ldac_fmt=s32 sbc_min_bp=53 sbc_max_bp=53 sbc_freq=44k sbc_sband=8 aac_afterburner=on aac_bitrate_mode=5"

ここではこのような設定をしています。

Key Value 備考
ldac_eqmid hq LDACのビットレートモード: 最高(990kbps)
ldac_fmt s32 LDACのビット深度: 32ビット
sbc_min_bp 53 SBCの最低許容ビットプール値: 53 (328kbps)
sbc_max_bp 53 SBCの最大許容ビットプール値: 53 (328kbps)
sbc_sbands 8 SBCのサブバンド数: 8
sbc_freq 44k SBCのサンプリング周波数: 44.1kHz
aac_afterburner on AACのAfterBurnerエンコード機能: 有効
aac_bitrate_mode 5 AACのビットレートモード: VBR(5)

※SBCのビットプール値は小さくなるほどビットレートが高くなる。32=192kbps, 41=256kbps, 53=328kbps。
※AfterBurnerエンコード機能はlibfdk-aacの機能で、より精度を上げてエンコードするオプション。

もしLDAC使用時に音が途切れる場合は ldac_eqmidsq または auto にしてください。
SBC使用時に音が途切れる場合は sbc_min_bp53以下 の値にして 調節してみてください。

PulseAudioの再起動

最後にデーモンを再起動してモジュールを読み込ませます。

$ pulseaudio -k
$ pulseaudio --start

試聴する

デーモンを再起動するとワイヤレスイヤホンとの接続が解除されるので、あらかじめ接続しておきます。
何か音楽ファイルを再生して、再生できれば成功です。
現在使われているコーデックは以下のコマンドで確認できます。

$ pacmd list-sinks | grep bluetooth.a2dp_codec
                bluetooth.a2dp_codec = "AAC"

何も出てこない場合はモジュールがうまく読み込めていない可能性があるので何回かデーモンを再起動してください。

使ってみた感想

ビットレートはかなり高めになっているのでワイヤレスイヤホンの実力が十分に発揮できます。
もしかすると、AndroidやiOSで使っているときよりも音質が高い可能性があります。

普段使いはWI-C310ですが、Androidでは44.1kHzでしか使えなかったものがLinuxでは48kHzで使えています。ぜひお試しください!

リンク

pulseaudio-modules-bt

ldacBT

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5