Table of Contents
今回のスコープ
- 脳死で接続するとHSP/HPPで接続してしまい音質が悪くなってしまう
- Sony WF-1000XM3をA2DP AACでUbuntu 20.04と接続するまでの設定
1. 実行環境
Desktop
項目 | |
---|---|
マシン | HP ENVY TE01-0xxx |
OS | ubuntu 20.04 LTS Focal Fossa |
CPU | Intel Core i7-9700 CPU 3.00 GHz |
RAM | 32.0 GB |
GPU | NVIDIA GeForce RTX 2060 SUPER |
1
2
3
4
5
6
7
8
% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
% uname -srvmpio
Linux 5.13.0-27-generic #29~20.04.1-Ubuntu SMP Fri Jan 14 00:32:30 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Bluetoothヘッドホン
項目 | |
---|---|
Bluetoothヘッドホン | WF-1000XM3 |
通信方式 | Bluetooth標準規格 Ver.5.0 |
出力 | Bluetooth標準規格 Power Class 1 |
最大通信距離 | 見通し距離 約10m |
使用周波数帯域 | 2.4GHz帯(2.4000GHz-2.4835GHz) |
対応Bluetoothプロファイル | A2DP, AVRCP, HFP, HSP |
対応コーデック | SBC, AAC |
対応コンテンツ保護 | SCMS-T |
伝送帯域(A2DP) | 20Hz - 20,000Hz(44.1kHzサンプリング時) |
Package Requirements(今回インストールするもの)
Package | 説明 |
---|---|
libavcodec-dev | de/encoders for audio codecs |
libldac | Sony LDAC de/encoders |
pulseaudio-modules-bt | bluetooth経由で音声を流すためのLinuxのライブラリ |
bluez | Bluetoothドライバ |
bluez-tools | Bluetoothドライバ設定ライブラリ |
2. Bluetooth技術
Bluetoothとは, 免許申請や使用登録の不要な2.4GHz帯の電波を用い, 数m~数十m程度の比較的短距離の情報機器間で, 電波を使い最大24Mbpsの無線通信を行う規格です. IEEE規格名は「IEEE 802.15.1」. 機器同士をペアリング(原則1対1の通信に制限)してデータの送受信を行います.
Bluetoothの特徴
- Wi-Fiのように大容量のデータを高速で送ることはできませんが, Wi-Fiと比べ接続が簡単で, 消費電力も小さい
- 赤外線で無線通信を行うIrDAと比較して通信間にある障害物に強い
- Bluetoothでは通信の指向性がないため, 機器のレイアウトや向きを自由に変更することが可能というメリットがある
Bluetooth対応機器を購入する場合、機能や性能を100%発揮させるためには、主に通信に関わる「バージョン」と、機器同士の機能連携に関わる「プロファイル」、そして通信距離に関わる「Class」の確認が重要です。
Column: IrDA
IrDaとはInfrared Data Associationの略で, 携帯電話のアドレス帳などのデータ交換を行う場合に使用される赤外線を使って無線通信をする技術のこと. 通信可能範囲は30cm~2m程度とBluetoothと比較して狭く, 固い壁で隔てられた場所同士の通信はできません.
ちなみにゲームボーイカラーの赤外線はIrDA規格ではありませんが, SONYのポケットステーションの赤外線はIrDA準拠です.
それぞれの無線通信が使用する周波数帯
通信技術 | 周波数帯 |
---|---|
Bluetooth | 2.4GHz帯 |
GPS | 1.2GHz/1.5GHz帯 |
IEEE802.11 無線LAN | 2.4GHz/5GHz帯 |
第3世代携帯電話 | 2GHz/800MHz帯 |
5G | Sub6帯の3.7GHz/4.5GHz帯, ミリ波帯の28GHz帯 |
2.4GHz帯は無線免許を必要とせずに利用できるため, 電子レンジやコードレス電話などの多くの機器で使用されており, これらを同時に使用すると電波の干渉が起こる可能性があります.
Bluetoothのバージョン
Bluetoothが誕生したのは1999年。このときのバージョンが「Bluetooth 1.0」。その後、何度か大きなバージョンアップを繰り返し、2016年にメジャー・バージョンアップ「Bluetooth 5.0」が発表され2020年1月に発表された「Bluetooth 5.2」が最新となります。
メッシュネットワークとは?
メッシュネットワークとは、複数のBluetoothの対応機器(スマホが親だとしたら、Bluetoothイヤホンのような子にあたる接続先の機器)同士が網の目のようにつながるネットワークのことです。たとえば、Bluetooth照明機器が1階から2階まで、家中の部屋に設置されていたとします。このとき、自分のスマホでいちばん近くにあるBluetoothライトに「家中の電気を消せ」と指令を出せば、このメッシュネットワークを通じて家中のBluetoothライトに命令が伝わり、一斉に電気を消すことができます。
つまり、Bluetoothに接続した機器同士が通信を中継する役割を果たしてくれるというわけです。これを利用すれば、遠く離れた部屋にあるBluetooth付きエアコンを、Bluetoothライトのネットワークを通じてコントロールする、といったことも今後は可能になります。
活用例
- 店舗の棚などにビーコンを設置し、買い物客のスマホにその商品の詳細な情報(たとえば食品なら成分や生産地、賞味期限、おすすめの料理法など)を配信
- スマートウォッチやヘルスケア用のウェアラブル・デバイスが、Bluetooth搭載の体重計や家電などと自動的に連携して情報を収集、管理してくれ、コントロールもできる
- Bluetoothスピーカーや電球、エアコンなどの家電を別の部屋のスマホから操作できる
- GPS電波が届かない屋内でも、スマホだけで高精度に位置を特定できるので、ビーコンを用いた屋内での位置ナビゲーションサービス
Bluetooth 5.2とオーディオシェアリング
2019年に発表されたBluetooth 5.1(方向探知機能追加)に続き、2020年に発表された最新のBluetooth 5.2では、新技術のオーディオ技術「LE Audio」が搭載されました。「LE Audio」では、「マルチ・ストリーム・オーディオ」機能によりブロードキャストで複数デバイスに音声を送信できるほか、ハイレゾ音源にも対応している新コーデック(圧縮伝送方式)のLC3により、低消費電力で高品質の音声データ送信が可能となりました。その代表的活用例が「オーディオシェアリング」機能です。「オーディオシェアリング」機能によって、自分のスマホの音楽を友人と共有する、映画館で音声を共有する、などができるようになっています。
プロファイル
「プロファイル」とはBluetooth機器同士で通信を行うための規格のことです。スマートフォンとプリンターをつなぐためのプロファイルや、2台のPC同士で通信するためのプロファイルなど、多くの種類が存在しますが、ここではワイヤレスのBluetoothイヤホン/ヘッドホンに関連するプロファイルを紹介します。
プロファイル名 | 機能内容 |
---|---|
A2DP | Advanced Audio Distribution Profile, 音声をレシーバー付きヘッドフォン(またはイヤホン)に伝送する。HSP/HFPと異なり、ステレオ音声・高音質となる。 |
GAVDP | A2DP、AVRCPなどをサポートするための基本となるプロファイル。ビデオストリームと音声ストリームを配信するために使用されます。 |
HSP | Headset Profile, Bluetooth搭載ヘッドセットと通信する。モノラル音声の受信だけではなく、マイクで双方向通信する。 |
HFP | Hands-Free Profile, 車内やヘッドセットでハンズフリー通話を可能にする。HSPの機能に加え、通信の発信・着信機能を持つ。 |
VDP | ビデオ配信をする。 |
コーデック
Bluetoothのコーデックとは、スマホや音楽再生プレイヤーなどのデバイスからワイヤレスイヤホンやヘッドホンなどに無線で音楽のデータを送る際の符号化の規格です。圧縮の規格でもあるので元の音楽データを圧縮エンコードしBluetoothで飛ばし、受信デバイスのイヤホンなどでデコードすることで音楽の再生をしています。そのため、コーデックの違いにより、音質や遅延に違いが出ます。
コーデック | 特徴 | 遅延 | ビットレート | サンプリングレート |
---|---|---|---|---|
SBC | Sub Band Codec, Bluetooth標準コーデック 音質と遅延に難有り |
220m/s | 64-328kbps | 48kHz/16bit |
AAC | iPhoneでメインに採用されるコーデック 音質は良いが規格的には大遅延 |
120m/s[CBR] 800m/[VBR] |
128Kbps 可変256kbps 320kbps |
48kHz/16bit |
aptX | 実質的にAndroidの標準コーデック 比較的良い音質で低遅延 |
70m/s | 384kbps | 48kHz/16bit |
aptX HD | ハイレゾ対応コーデック 高音質で遅延も少なめ |
130m/s | 576kbps | 48kHz/24bit |
aptX Adaptive | 可変ビットレートであらゆる環境に対応したコーデック 接続環境に合わせて高音質重視~低遅延重視まで自動で判断 ハイレゾ対応 |
50-80m/s | 276~420kbps | 48kHz/24bit |
LDAC | ハイレゾ対応の最高音質のコーデック 音質は良くても遅延も多い Xperiaを中心に採用される |
1000m/s | 330kbps/660kbps/990kbps | 96kHz/24bit |
代表的な音源フォーマットのビットレート一覧
- FMラジオ:約96kbps
- mp3/AACなどの圧縮音源をBluetooth A2DP(SBC)接続:事実上64~約200kbps
- mp3/AACなどの圧縮音源を記録したメディア:事実上64~320kbps
- CD(-DA):1,411kbps
1,411kbpsのデータ量のCD音質データや256kbps程度のデータ量のmp3/AAC等の音楽データをBluetooth A2DP(SBC)接続で伝送する場合にBluetoothでの無線接続部分がボトルネックとなり音質が低下してしまうことがわかります.
Bluetoothのクラスとは?
Bluetoothのクラスとは、電波の最大出力や到達距離を規定した名称です。最大通信距離によって「クラス1」、「クラス2」、「クラス3」の3つの種類に分けられています。
クラスの種類 | 最大出力 | 通信最大距離 |
---|---|---|
クラス1 | 100mW | 約100m |
クラス2 | 2.5mW | 約10m |
クラス3 | 1mW | 約1m |
なお日本国内では「クラス1」といえど10mWが限界のため最大値の1/10が最大出力です。
3. Ubuntu 20.04とWF-1000XM3の接続設定
接続設定手順としては以下です:
- Bluetooth Managerのインストール
- pulseaudio-modules-btの設定 & GUIでprofile/codecsの設定
Bluetooth Managerのインストール
1
2
3
% sudo apt update
% apt install bluez bluez-tools
% apt install blueman
Ubuntuでは問題は怒らないと思いますが、Bluetooth serviceが立ち上がっておらずBluemanが起動できないという恐れがあります.
この場合はsystemctl
経由でbluetooth serviceはenableすれば良いとなります. この設定は
1
2
3
4
5
6
7
8
9
10
11
12
% sudo systemctl enable bluetooth.service
% sudo systemctl status bluetooth.service
● bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-03-17 09:59:16 JST; 1h 59min ago
Docs: man:bluetoothd(8)
Main PID: 908 (bluetoothd)
Status: "Running"
Tasks: 1 (limit: 38299)
Memory: 2.7M
CGroup: /system.slice/bluetooth.service
└─908 /usr/lib/bluetooth/bluetoothd
Blueman経由でWF-1000XM3と接続するばあいはGUI経由か, Terminalにblueman-manager
と入力して接続設定を開いて、あとはボタンをポチポチするだけです.
pulseaudio-modules-btの設定
Ubuntu側でコーデック対応に必要なパッケージをインストールし、接続確認するだけです。まず必要パッケージのインストール.
1
2
3
4
5
6
% sudo add-apt-repository ppa:berglh/pulseaudio-a2dp
% sudo apt update
% sudo apt install pulseaudio-modules-bt libldac
pulseaudio -k
pulseaudio --start
% reboot
次に正しくインストールされているか確認します. この時、Blueman経由でWF-1000XM3と接続しておきます.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
% pacmd list-cards
name: <bluez_card.XX_XX_XX_XX_XX_XX>
driver: <module-bluez5-device.c>
owner module: 29
properties:
device.description = "WF-1000XM3"
device.string = "94:DB:56:CC:3E:92"
device.api = "bluez"
device.class = "sound"
device.bus = "bluetooth"
device.form_factor = "headset"
bluez.path = "/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX"
bluez.class = "0x240404"
bluez.alias = "WF-1000XM3"
device.icon_name = "audio-headset-bluetooth"
device.intended_roles = "phone"
profiles:
headset_head_unit: Headset Head Unit (HSP/HFP) (priority 30, available: unknown)
a2dp_sink_sbc: High Fidelity Playback (A2DP Sink: SBC) (priority 40, available: unknown)
a2dp_sink_aac: High Fidelity Playback (A2DP Sink: AAC) (priority 40, available: yes)
a2dp_sink_aptx: High Fidelity Playback (A2DP Sink: aptX) (priority 40, available: no)
a2dp_sink_aptx_hd: High Fidelity Playback (A2DP Sink: aptX HD) (priority 40, available: no)
a2dp_sink_ldac: High Fidelity Playback (A2DP Sink: LDAC) (priority 40, available: no)
off: Off (priority 0, available: yes)
active profile: <a2dp_sink_aac>
sinks:
bluez_sink.XX_XX_XX_XX_XX_XX.a2dp_sink/#3: WF-1000XM3
sources:
bluez_sink.XX_XX_XX_XX_XX_XX.a2dp_sink.monitor/#4: Monitor of WF-1000XM3
ports:
headset-output: Headset (priority 0, latency offset 0 usec, available: yes)
properties:
headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
properties:
profiles の欄に選択可能なものが表示されます.available: no となっているものは使えません. あとはBlueman(GUI)経由でprofile/codecを自分の好みにあった規格に設定するだけで完了です.
Appendix: ビットレートとは
ビットレートは、動画の1秒あたりのデータ量を示す値です。 bps(bits per second)と表記され、1Mbpsに設定されている場合、1秒あたりデータ量が0.125MB(1byte=8bit)の動画ということになります。 ビットレートが高い動画ほど、データ量が多く高画質です。
References
- Sony WF-1000XM3
- pulseaudio-modules-bt
- Linux PCではBluetoothにLDACコーデックが使えるらしい
- Rubyと筋肉とギターとわたし > elementaryOSにbluetoothドライバが入ってなかったのでいれようとした
(注意:GitHub Accountが必要となります)