bta2dpd(8)を使って、NetBSDでBluetoothヘッドフォンを使う

NetBSD Advent Calendar 2017の4日目の記事です。

English version is here.

はじめに

Bluetoothでオーディオを再生するには、以前はbtsco(4)しかなく、 ubt(4)でbtsco(4)を使おうとすると、USBアイソクロナス転送が必要で、 NetBSDのechi(4)やxhci(4)ではアイソクロナス転送はサポートされて いないので、btsco(4)ではBluetoothのオーディオデバイスでは オーディオの録音、再生ができなかった。

しばらく前に、bta2dpd(8)と言うのがnat@によってNetBSD-currentに追加された。 これがxhci(4)で使えるのかが、ずっと気になっていた。 やっと、Jabra MOVE Wireless で試してみた。 結果としては、ubt(4)につないだJabra MOVE Wirelessで再生できた。

Bluetoothの基本的な設定

ペアリングやプロファイルの選択は、btsco(4)の場合と同じであった。 以下のようにすれば良い。

まずは、Bluetooth接続に必要なデーモン等を起動しておく。 以下のように追加する。


# vi /etc/rc.conf
bluetooth=YES
# /etc/rc.d/bluetooth start
configuring Bluetooth controllers: ubt0.
starting Bluetooth Link Key/PIN Code manager
starting Bluetooth Service Discovery server
もし、継続的に使用しないのであれば、以下のようにしても良い。

# /etc/rc.d/bluetooth onestart
configuring Bluetooth controllers: ubt0.
starting Bluetooth Link Key/PIN Code manager
starting Bluetooth Service Discovery server

ワイヤレスヘッドフォンをペアリング待ちにした上で、以下のように実行し、 ワイヤレスヘッドフォンのアドレスを取得する。


$ btconfig ubt0 inquiry
Device Discovery from device: ubt0 ... 1 response
  1: bdaddr XX:YY:ZZ:XX:YY:ZZ
   : name "Jabra MOVE v2.5.0"
   : class [0x240404] Wearable Headset  
簡便のためこのアドレスを/etc/bluetooth/hostsファイルに 登録しておく。ここでは、headset1と言う名前を付けておく。

# vi /etc/bluetooth/hosts
XX:YY:ZZ:XX:YY:ZZ headset1

次に、BluetoothのPINを設定する。


$ btpin -d ubt0 -a headset1 -p 0000
Jabra MOVE Wirelessでは、PINは0000で良いようだ。

次は、アドレスheadset1のデバイスをヘッドセット(HSET)に設定する。


# btdevctl -d ubt0 -a headset1 -s HSET -A

ここまでは、btsco(4)の場合と一緒である。 次がbta2dpd(8)の使用方法である。 まずテストしてみる。


$ file test.wav
test.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz
# bta2dpd -a headset1 test.wav
しかし、これではwavファイルしか再生できないので、例えばmplayer等で OSSで再生したものをヘッドセットで聞くには以下のようにする。

# bta2dpd -a headset1 /dev/pad
このように実行すると、以下のようにdmesgに表示された。

pad0: outputs: 44100Hz, 16-bit, stereo
audio2 at pad0: half duplex, playback, capture, mmap
pad0: Virtual format configured - Format SLINEAR, precision 16, channels 2, frequency 44100
spkr3 at audio2: PC Speaker (synthesized)
wsbell at spkr3 not configured
よって、/dev/sound2で再生すると、 /dev/pad(/dev/pad0と同じものを指している)に その内容がコピーされることになると分かる。 例えば、以下のようにmplayerで再生すれば、ヘッドセットで聞こえた。

$ mplayer -ao oss:/dev/sound2 test.mp3

おわりに

xhci(4)でBluetoothオーディオを使えるのは非常に便利だった。

Comments

Popular posts from this blog

#5000へCメールを送れないau端末でezweb.ne.jpの電子メールアドレスをIMAP4/SMTPで扱う方法

Vaio Pro 11/13用のサードパーティーのACアダプター

Windows 7 Professional用のNFSクライアントを使う (NFS 4.1のみ)