塩田紳二のPDAレポート

Bluetoothのオーディオスタックを追求する



 最近Bluetoothの機器がわりと入手しやすくなってきた。一部の携帯電話に搭載されたり、車載機材などが対応してきたからだと思われる。比較的製品が多いのは、携帯電話用のヘッドセット、次いでステレオのヘッドフォンである。一般にマイクとヘッドフォンの組み合わせをヘッドセット、ステレオ方式の再生が可能な両耳式のものをヘッドフォンという(モノラルでもヘッドフォンということもあるが、現在ではそうした製品はごく少数)。

 Bluetoothのステレオヘッドフォンにはいくつかメリットがある。接続距離が10m程度あり、普通の部屋なら、だいたいカバーできる。隣の部屋や部屋の外でもまだつながる。筆者の狭い家では、仕事部屋の隣の部屋でもちゃんと受信できる。これまで国内で発売されていたワイヤレスのヘッドフォンは、大半が赤外線を使うもので、範囲から外れるとすぐに音が切れるし、ノートPCのIrDAなどでノイズが入ることがある。しかしBluetoothなら無線なので、送信部との位置関係にはほとんど無関係だし、部屋の中を動き回っても音が切れることがない。

 もう1つは、もともと携帯電話やPCで利用する仕様であるため、PCのそばで使ってもノイズの影響を受けない。国内で手に入るFMワイヤレス方式のものなど、アナログ無線通信を使うワイヤレス方式のヘッドフォンは、PCのそばではほとんど使い物にならない。そういうわけで、音楽用のワイヤレスヘッドフォンとしては、メリットが多く、特にPCユーザーにとっては、理想的な方式といえる。

 しかし、実情を見ると、まだ問題が残っている。実際にPC用のBluetoothスタックとBluetoothヘッドフォンの組み合わせは、どんなものでもOKというわけではない。組み合わせによっては、音声が頻繁に途切れたり、あるいは、音楽の再生速度が変化することがある(モーターの回転がおかしいテープの再生のような感じ)。しかし、中にはちゃんと音も切れず、再生速度も正しく音が出るものもあり、仕様としての問題というよりは、実装に関わる問題のような感じだ。

 この組み合わせ問題だが、どうもPCの構成や他のアプリケーションとの関係というよりは、Bluetoothスタック、PC用Bluetoothハードウェア(USBドングルなど)とヘッドフォンの3つの関係に依存しているようだ。

 筆者の環境では、東芝の「dynabook SS MX」の内蔵のBluetoothが一番安定して動作していて、最近のBluetoothヘッドフォンでは、ロジクールの「FreePulse」、ソニーの「VGP-BRM1」は音が途切れることなく再生できる。ただし、同じ東芝のBluetoothスタックを使うデスクトップPCとPlanexのBluetoothアダプタ(BT-miniEDR)では、FreePulseは問題ないが、VGP-BRM1は音飛びがしてしまう。また、モバイルキャストのアダプタ「mLink R for gigabeat」(MPX3000RG)では、東芝のマシンでは問題なく動作するものの、デスクトップPCでは音が途切れてしまう。Bluetoothスタックやヘッドフォンだけでなく、USBのBluetoothアダプタの違いも関係があるのかもしれない。

ロジクールの「FreePulse Wireless Headphones FP-10」。iPodなどに装着可能な送信部とセットになった製品 ソニー Bluetooth オーディオコントローラー「VGP-BRM1/B」。送信アダプタとのセットまたは、単体で入手可能。 モバイルキャストの「mLink R for gigabeat」(MPX3000ADRG)。AVRCPに対応し、シンク側から音楽プレーヤーの操作が可能。また、シンク側はヘッドフォン端子を持ち、好みのヘッドフォンを使うことができる

 また、Windows Mobile 5.0マシンが持つA2DP(Advanced Audio Distribution Profile)スタックとの接続も試して、多いときには数分に1回程度、音が一瞬切れてしまう。VGP-BMR1は、頻繁に切れるし、MPX3000RGは、切れる頻度は低いものの切れている時間が数秒と長い。

 最近では、携帯音楽プレーヤー向けに、アナログ入力の送信アダプタとセットになったBluetoothアダプタも少なくない。オプションとして用意されているものや、最初からセットでしか販売されていないものもある。筆者の手元にあるのは、ほとんどがセットか、オプションで送信アダプタが用意されているものだった。これら、送信アダプタがセットやオプションになっているものでは、送信アダプタと組み合わせると音が飛ぶようなことはない。しかし、PCのBluetoothスタックと組み合わせると、前記のように音飛びなどの問題が出る。

 専用の送信アダプタで使っても、接続距離10mとか、PCのそばで利用できるというBluetoothのメリットを感じることはできるのだが、せっかくPCにBluetoothアダプタをつけたのに、ちょっとつまらない感じはある。ただ、特定のPCとペアリングする必要がなく、ヘッドフォン出力に接続すればどんな機器とでも使えるので、便利といえば便利なのだが。

 いくつかをそろえて聞き比べてみると、専用アダプタとの組み合わせでも、ノイズが乗っていたり、音が平板な感じになってしまうものがある。たとえば、MPX3000RGは、かすかにシュルシュルというノイズが聞こえる。VGP-BRM1は、東芝のノートPCと組み合わせたとき、ピアノの静かな曲などで少し平板な感じがあった。これはヘッドフォン自体は外付けになるので、ノートPCに同じヘッドフォンを接続して比較してみた場合である。同じと言われるとそうかもしれないというレベルだが、音にちょっと物足りない感じがした。

 どうして、こんなにいろいろと違いが出てしまうのか、少し追求してみた。

【表】今回評価したBluetoothヘッドフォン/サウンドアダプタ
メーカー型番名称など専用送信
アダプタ
ヘッドフォン部Bluetooth
Ver.
SCMS_TノートPC
との接続
(dynabook
SS MX+
内蔵)
デスクトップ
との接続
(VALUESTAR
G typeX+
Planex BT-miniEDR)
Windows Mobile
との接続
(HTCz内蔵
Bluetooth)
ロジ
クール
FP-10FreePulse同梱一体2.0
(たまに
瞬断する)
ソニーVGP-BRM1-あり
(単体購入可能)
外付け2.0 ××
(頻繁に
音途切れる)
×
(頻繁に
途切れる)
モバイル
キャスト
MPX3000RGmLink R
for gigabeat
同梱外付け1.2 ××
(頻繁に
音途切れる)
×(頻度は
低いが
数秒
途切れる)

●A2DPとは?

 まずは、原理的なところから。Bluetoothのヘッドフォンは、A2DPを利用する。このプロファイルは、AVデータの転送用プロファイルGAVDP(Generic AV Distribution Profile)を利用する。このGAVDPでは、AVデータの転送プロトコルであるAVDTP(AV Distribution Transport Protocol)を使ってオーディオやビデオデータを転送するようになっている。このA2DPでは、音を送る側をソース、受ける側(ヘッドフォン側)をシンクと呼ぶ。A2DPやGAVDPなどをまとめてBluetooth A/V Profileなどと総称することがある。

【図1】A2DPは、AVデータの汎用転送プロファイルGAVDPの上にある。このGAVDPでは、AVデータの転送プロトコルAVDTPが定義されている

 A2DPのプロファイルでは、接続時にソースとシンクで、CODECや転送レートなどのパラメータをネゴシエーションして決める。必須のCODECとしてはSBCと呼ばれるものがあり、A2DPに対応した機器はソース、シンクとも必ずこれを装備している。PCのBluetoothスタックと組み合わせると通常は、このSBCが使われる。SBCとは、Sub Band CODECの略で、音を周波数により4つまたは8つのバンドに分割、各バンド別にAdaptive PCM(最適化PCM)にエンコードするCODECだ。

 44.1kHzで16bit、ステレオ(2ch)のPCMでは、必要なビットレートは、1.4Mbps(=44100*16*2)とBluetooth 1.xの転送能力を超えてしまう。このため、ある程度の圧縮はどうしても必要となる。このとき、処理が重すぎると遅延が大きくなってしまう。また、ヘッドフォンのような簡易な機器で使うものであるため、少なくともデコーダ側の負荷はあまり高くできない。SBCはこのために作られたCODEC方法で、簡易な方法の割に音質の低下が少ないとされている。

 SBCは、入力されたPCMデータを4〜16サンプル分まとめて1ブロックとする。基本的な処理は、このブロックに対して行なわれる。44.1kHzのとき16サンプル分は、360μsecに相当する。なお、バンドの分割時、合成時には、このブロックに含まれるデータとすでに送信した(受信した)データを含め80サンプルに対して処理を行なう。これは、周波数分解/合成する精度を上げるためだ。

 入力信号を8(または4)の周波数帯別の成分に分割する。非常に短い時間で区切ったとき、周波数の高い領域でも信号はゆっくりと変化する。周波数が低くなるほど、変化は小さくなっていく。各バンドをAdaptive PCMでエンコードすると、最低限必要なビットのみで情報が表現される。変化が大きいところでは、より多くのビットが割り当てられるが、変化が小さいところでは、少ないビットしか割り当てられない。

 SBCでは、bitpoolと呼ばれる値を使って、さらに、データ全体を表現するビットを制限する。このとき、人間の聴覚特性に合わせて各周波数帯のビット割り当てを加減する。簡単にいうと、bitpool値を大きくすると、各バンドを表現するビット数が増え、小さくすると各バンドを表現するビット数が少なくなる。

 Bluetoothでは、電波状態や他の通信などにより、1つのセッションが利用可能な転送レートが変化する。このため、エンコードしたデータが利用可能なビットレートを上回る場合には、bitpool値を小さくし、データを小さくして転送することが可能になる。逆に、ビットレートに余裕がある場合には、bitpool値を大きくしてより高品位なデータを送信することが可能になる。bitpool値を小さくすると、品質が落ちることになるため、SBCは、非可逆な圧縮である。

 なお、SBCでは、ジョイントステレオを利用できる。ジョイントステレオは、L(左チャンネル)、R(右チャンネル)の単純な2チャンネル(シンプルステレオという)と、L+R、L-Rを使うミッドサイドステレオを切り替える方式である。ステレオのセンター部分にボーカルなどがある場合、同じ成分がL、Rにあるわけで、このまま圧縮を行なうのは効率が悪い。このようなときにミッドサイドステレオを使うと、センター部分がL+Rに集まり、L-Rにはそれ以外の成分が含まれるようになる。このようにすることで、共通成分とそうでない部分が分かれ、それぞれにより多くの情報を残したまま圧縮が可能になる。逆にセンター部分が小さくL、Rに共通部分がないときには、シンプルステレオを使う。これを自動で切り替えていくのがジョイントステレオである。

 SBCでは、音源のサンプリング周波数は変換せずにそのまま利用する。サンプリング周波数は、44.1または48kHzのどちらかをソース側が必ずサポートし、シンク側は、この両方に対応できなければならない。このため、CDやMP3などを再生する場合には、サンプリング周波数は変化しない。

 音声の転送なので、一定時間内に転送を行なう必要がある。A2DPでは、ブロック単位でSBCでエンコードしフレームデータを作成、これを複数まとめてパケットとして送信する。SBCではサンプリングレートは変化しないため、一定間隔で送信を行なえばよく、一回に送るデータ量が音源の状態や通信状態に応じて変化するものになる。

【図2】SBCは、入力された音声データをAnalysis Filterで8つの周波数帯別の成分に分解し、これをAdaptive PCMで、スケールファクタ(倍率)とビット値に分け、必要なビット値からbitpool値を計算して送信データとする。 受信側では、スケールファクタbitpool値から各バンドのビット割り当てを求め、スケールファクタと合わせて元のバンド別のデータを再現、その後、Synthesis Filterで合成してPCMデータを作り出す

●Bluetoothヘッドフォンの実装

 手元にあるBluetoothヘッドフォンの中で、ロジクールのFreePulseは、PCのBluetoothスタック(東芝Bluetoothスタック)と組み合わせて、唯一、複数のマシンで、途切れずに音声を再生させることができた。

 このロジクールのFreePulseは、Open Interface North Americaが開発した「SOUNDabout」というA2DPスタックが組み込まれていることがわかった。手持ちのBluetoothヘッドフォンで、実装が判明したのはこれだけである。それで、つてを頼って、同社に取材を申し込んだところ、契約の関係から、どのメーカーに採用されたのかについては言えないものの、一般的な製品やBluetoothの話はできるとのことで、同社の森下和彦氏およびCTOであるGreg Burns氏に話をうかがうことができた。

 SBCでは、bitpoolと呼ばれるパラメータを増減することで、転送データ量を加減することができる。bitpool値とはバンド分割され適応化PCMでエンコードされたデータの合計ビット数を表すもの。この値が大きいほどより多くのビットでデータが表現されることになる。セッションを開始するときに行なわれるネゴシエーションで、SBCを選択したとき、双方の性能から、bitpool値の最小値と最大値が決まる。

 ところが、「簡易な実装では、bitpool値に固定した値を使うものがある」という。固定値を使うこと自体はA2DP/SBCの仕様で許されているが、他の通信などで帯域があまり使えない場合に、データ転送量を小さくして対応することができない。このため、あまり高い固定値を使うことができず、「200kbps程度のビットレートになるようなパラメータが使われる」ことが多いという。SBCで200kbps程度のビットレートは、音質として中間クラスで、高品質の場合には、300kbps以上のビットレートが必要とされている。このため、200kbps程度でしか転送を行なわない送信部とヘッドフォンの組み合わせでは「音質が劣ることがある」という。SBCは、非可逆のCODECで、同じbitpool値だと、音源の変化がゆっくりしたときには十分でも、音源の変化の激しいときには、データを表現するビットが足りなくて音質が落ちてしまう。

 実際には、bitpool値は、音がまったくない場合には、2程度まで小さくすることができ、パケットサイズも小さくすることができる。しかし、固定した値では、不要なサイズのデータを常に送っているため、他の通信の影響を受けやすくなる、あるいは他の通信が利用する帯域を圧迫してしまう。

 ヘッドフォンから再生される音の再生速度が変化したり途切れてしまう件だが、Burns氏によれば、「シンク側のメモリ(バッファ)があふれてしまったり、あるいはデータが不足するような現象が発生している」のではないかという。

 通信状態などが悪い、あるいは他の通信が行なわれているなどで、必要なビットレートが得られないとき、固定したbitpool値では、必要なデータを時間内に送信することができなくなる。このようになると、シンク側では、データが不足し音が途切れてしまう。音楽の再生は、通信状態にかかわらず常に一定レートで行なわれるため、通信状態が回復したときに、貯まっていたデータを次々と送信することになってしまう。そうなると、シンク側のメモリがあふれてしまう可能性が出てくる。

 また、こうした現象が起こるのは、「ソース側で実装を間違っている可能性もある」らしい。本来SBCでは、サンプリングレートは一定であるのに、これを変化させたり、あるいはデータを間引くなどしてデータ量や再生ビットレートを調整するような間違った実装が行なわれていても、再生スピードがおかしくなったり、音が途切れるようなことが起こるらしい。

 本来、送信間隔は一定で、送信データ量で通信状態に合わせるプロトコルであるのに、固定したデータ量(bitpool値)しか受け付けない、あるいは送信しないという簡易な実装に問題があるようだ。一部のBluetoothヘッドフォンでは、再生中にBluetoothマウスを動かすと、音が途切れたりするものがあるようだが、こうした現象は、ヘッドフォン側が固定したbitpool値でしか動作しないせいかもしれない。

●SOUNDaboutはどこが違うのか?

 FreePulseに使われているSOUNDaboutと他社A2DPスタックとの違いを聞いてみた。まず、SOUNDaboutではeSBCと呼ばれるCODECを装備しており、ソース、シンクがともにSOUNDaboutの場合、eSBCを使うようになっているという。これは、FreePulse付属の送信アダプタと組み合わせたときに相当する。eSBCは、SBCをベースにしたCODECだが、音質を高めるために改良してあるものだ。A2DPでは、接続時にネゴシェーションを行ない、お互いが持っているCODECを報告、その中で最も良いものを選択する。このため、FreePulseは、通常のBluetoothスタックにSBCで接続し、送信アダプタと組み合わせたときには、eSBCを使うようになる。

 SBCとeSBCの一番の違いは、バンド分割の部分である。A2DPの仕様書にあるSBCの定義では、バンド分割のためのデジタルフィルタ(Analysis Filterと呼ばれる)のアルゴリズムとそのパラメータが例示されている。この通りにフィルタを実装すると、バンド境界の周波数成分が両方のバンドに現れてしまう。すると、デコード時に各バンドを合成するときに誤差が出てしまう(合成する部分をSynthesis Filterという)。eSBCでは、「独自のAnalysis/Synthesis Filterを実装しており、こうした誤差が入らないようになっている」という。SOUNDaboutは、こうした実装を「僅かなCPU負荷の上昇に止めている」ため、一般的にBluetoothヘッドセットに使われているような組み込み系CPUで利用可能で、より良い音を出すことができるのが特徴だという。

 SOUNDabout自体は、bitpool値を変化させ転送データ量を変化させることができるように仕様書に忠実に実装されているという。このため、音楽の変化や、通信状態に合わせてbitpool値を変化させることが可能だ。ソース側の実装がちゃんとしていれば、他のデバイスへの通信が途中で行なわれてもちゃんと音楽を再生することが可能になる。

●ところでプレーヤーの制御は?

 そういうわけで、どうも、手持ちの機材で音楽を聴くには、FreePulseを付属の送信アダプタと組み合わせるのがいいようだ。遠く離れて音楽を聴くことはできるのだが、できれば、曲のスキップや一時停止ぐらいは、手元でやりたい。FreePulseには、ミュート機能はあるが、ソース側を止めるのではなく、単に音を出さないようにするだけ。できればもう少し便利に使いたい。

 BluetoothでA2DPと対になって使われることが多いのがAVRCP(Audio/Video Remote Control Profile)。これは、メディアプレーヤーや再生ハードウェアなどの制御を行なうためのプロファイルだ。一部のBluetoothヘッドフォンには、再生/ポーズ、スキップなどのボタンを持つものがあるが、この制御に使われるのがAVCTPである。残念ながら、LogitechのFreePulseには、この機能はない。

InterLink Electronicsの「ExpressCard Media Remote for Bluetooth」。デバイスとしてはHIDポインティングデバイス扱いだが、キーコードを送信してPC側のメディア関連機能を制御できる。形はExpressCard/54である。ただし、ExpressCardによる接続は、充電のため

 解決方法として、同じ距離から接続できるBluetoothキーボードデバイスを利用する方法がある。たとえば、Interlink Electronicsの「ExpressCard Media Remote for Bluetooth」(以下Media Remote)は、Bluetoothを使ったリモコンである。これは、Bluetooth接続のHIDデバイスであり、ポインティングデバイスとして接続される。最近のPCキーボードでは、メディアプレーヤー用のキーが付いているものが少なくないが、このために、Windowsでは、再生やスキップ、停止、ボリュームなどのメディアプレーヤー操作用のキーコードが定義されている。このMedia Remoteは、カーソルキーやこうしたメディア関連キーのコードを送信する。このMedia Remoteは、単体でどのPCともペアリングできるし、音楽プレーヤー以外のソフトをカーソルキーで操作することも可能。

 名前にあるようにExpressCardスロットに装着できるが、これは充電のため。これもBluetoothなので、10m離れて操作できるし、ExpressCardサイズなので持ち運びも簡単。残念ながら、国内では認定されていないので、海外取材のとき専用の品である。米国のホテルは、筆者の仕事部屋よりも大きい。それでも、ベットの上から隣の続き部屋にあるPCの制御が可能だった。

 その他、メディア関連のキーを持つ、Bluetoothキーボードも利用できる。持ち運びはできないが、隣の部屋に置いておくことぐらいはできる。これなら、国内で承認されて普通に入手可能なものがいくつかある。


●まだまだ未熟?

 今回話を聞いた感じでは、A2DPによる音楽再生自体、かなり複雑な動作であり、相当のノウハウがないと、さまざまなメーカーの製品と組み合わせて、正しく音を鳴らせられないという感じだ。A2DPに対応したヘッドフォンなど、昨年あたりからようやく入手が容易になったという感じなので、ちゃんとしてない製品も中にはあるのだろう。

 A2DPでは、一定の処理をPCの負荷や通信状態にかかわらず行なわねばならないので、これがうまく動く環境は、全般的によい環境や機器の組み合わせだと評価できるだろう。

 しかし、問題は、購入して実環境で動かしてみないと、評価ができないことだ。筆者もここまで到達するまでに、いくつもBluetoothアダプタやヘッドフォンを購入しなければならないかった。増えてきたBluetooth機器だが、まだ、なにを買ってもいいというわけではなく、組み合わせなどでいろいろと問題がありそうな感じである。

□関連記事
【2006年11月10日】ロジクール、Bluetooth EDR準拠の無線ヘッドフォン(AV)
http://www.watch.impress.co.jp/av/docs/20061110/logic.htm
【2005年6月7日】【塩田】Bluetoothって便利?
http://pc.watch.impress.co.jp/docs/2005/0607/pda43.htm

バックナンバー

(2007年8月17日)

[Text by 塩田紳二]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp ご質問に対して、個別にご回答はいたしません

Copyright (c) 2007 Impress Corporation, an Impress Group company. All rights reserved.