DragonBoard 410c(Debian)でPechatを使用してみる(Bluetooth経由の音声出力)

DragonBoard 410c(Debian)でPechatを使用してみる

DragonBoardの唯一困った点は音声出力のpinがデフォルトではないことかなと思います。 できれば、このあたりもついていると良かったかなと。最近は音声認識や自動音声や音声による操作もあるので、こういう方向もアクセスできるといいなあと思ったり。

ただ、DragonBoardにはBluetoothがついているのでBluetooth用の音声機器は接続できます。以前のエントリでRaspberryPiでBluetoothスピーカーのPechatを使用してみました。 一応無事には接続し使用できたのですが、XからのGUI経由でしか設定できなかったので、微妙な感じでした。そのリベンジも兼ねてDrabgonBoardでも設定をチャレンジしてみます。

uepon.hatenadiary.com

ちなみに結論に急ぎたい方は回答編まですっ飛ばしてください。

DragonBoardでBluetooth-音声デバイス設定を行う

一応、前提とする環境を確認します。OSのディストリビューションを確認します。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 9.0 (stretch)
Release:        9.0
Codename:       stretch

もちろん、Debianですが、自分が使用したOSイメージはdragonboard410c_sdcard_install_debian-233.zipです。最新ではなく一つ古いバージョンかなと思います。(特にこだわりがなければ最新イメージのほうがいいかなと思います。)

Documentation - 96Boards

音声デバイスとしての制御はPulseAudioを使用するので、pulseaudio関係のパッケージのインストール状況も確認します。

$ dpkg -l | grep pulse
ii  libpulse-mainloop-glib0:arm64                 10.0-1                            arm64        PulseAudio client libraries (glib support)
ii  libpulse0:arm64                               10.0-1                            arm64        PulseAudio client libraries
ii  libpulsedsp:arm64                             10.0-1                            arm64        PulseAudio OSS pre-load library
ii  pulseaudio                                    10.0-1                            arm64        PulseAudio sound server
ii  pulseaudio-module-bluetooth                   10.0-1                            arm64        Bluetooth module for PulseAudio sound server
ii  pulseaudio-utils                              10.0-1                            arm64        Command line tools for the PulseAudio sound server
ii  xmms2-plugin-pulse                            0.8+dfsg-18 

デフォルトでインストールも完了しています。

Bluetoothの接続を確認する

あとはCLIからBluetoothの接続をおこなってみます。Bluetoothの確認用コマンドはbluetoothctlです。

$ sudo bluetoothctl -a
[NEW] Controller 00:00:00:00:XX:XX linaro-alip [default]
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:00:00:00:XX:XX Discovering: yes
[NEW] Device CC:30:80:00:XX:XX Pechat-00F8A1
[NEW] Device AE:12:42:3B:XX:XX 36bde7-bt
[CHG] Device AE:12:42:3B:FF:12 RSSI: -86
[bluetooth]# pair CC:30:80:00:XX:XX
Attempting to pair with CC:30:80:00:XX:XX
[CHG] Device CC:30:80:00:XX:XX Connected: yes
[CHG] Device CC:30:80:00:XX:XX UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device CC:30:80:00:XX:XX UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device CC:30:80:00:XX:XX ServicesResolved: yes
[CHG] Device CC:30:80:00:XX:XX Paired: yes
Pairing successful
[CHG] Device CC:30:80:00:XX:XX ServicesResolved: no
[CHG] Device CC:30:80:00:XX:XX Connected: no
[bluetooth]# connect CC:30:80:00:XX:XX
Attempting to connect to CC:30:80:00:XX:XX
[CHG] Device CC:30:80:00:XX:XX Connected: yes
Connection successful
[CHG] Device CC:30:80:00:XX:XX ServicesResolved: yes
[CHG] Device AE:12:42:3B:XX:XX RSSI: -87
[CHG] Device AE:12:42:3B:XX:XX RSSI: -74
[Pechat-00F8A1]# quit
Agent unregistered
[DEL] Controller 00:00:00:00:XX:XX linaro-alip [default]

無事にペアリングもコネクトもできました。あとはServiceの設定などを行うのみです。以下はほとんどRaspberryPiのときのエントリーそのままになります。RaspberryPiでは失敗していたのでかなり不安ではありますが…

/etc/systemd/system/pulseaudio.serviceファイルを作成

$ sudo vim /etc/systemd/system/pulseaudio.service

【/etc/systemd/system/pulseaudio.service】

[Unit]
Description=Pulse Audio

[Service]
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm

[Install]
WantedBy=multi-user.target

/etc/dbus-1/system.d/pulseaudio-bluetooth.confファイルを作成

$ sudo vim /etc/dbus-1/system.d/pulseaudio-bluetooth.conf

【/etc/dbus-1/system.d/pulseaudio-bluetooth.conf】

<busconfig>

  <policy user="pulse">
    <allow send_destination="org.bluez"/> 
  </policy>

</busconfig>

以上で設定ファイルの編集は終了となります。

pulseaudioサービスの設定

最後に起動時に自動的に設定をされるようにサービスの開始と有効化を行っておきます。

$ sudo systemctl start pulseaudio.service
$ sudo systemctl enable pulseaudio.service

これで完了です。 あとは先程と同じくBluetoothの状態の確認をしますが、基本無事にコネクトができているので一安心です。

後は音声が正常に再生されればいいのですが…

$ aplay /usr/share/sounds/alsa/Front_Center.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

あれ? エラーは出ないが、音がならない…RaspberryPiとは違う状況…

最初はmixserの設定で音量が下がっているのかなと思ったのですが、そんなこともなくさすがに微妙な感じになってしまいました。

仕方ないのでサービスはストップし、起動時は無効にすることにします。

$ sudo systemctl stop pulseaudio.service
$ sudo systemctl disable pulseaudio.service

回答編

結局、コマンドラインからの設定は成功しませんでした。(RaspberryPiでもうまく行っていなかったので、こちらがそのままの方法でうまくいくとは思いませんでしたが。)

最後にXを使用してBluetoothの設定を行ってみます。(事前にPechatの電源は入れておいてください。)

まずは、Xの下部のメニューバーをクリックし【設定】→【KDEシステム設定】を選択します。すると設定のダイアログウインドウが開きます。

f:id:ueponx:20170624101410j:plain

その中から【ネットワーク】→【Bluetooth】を選択します。

f:id:ueponx:20170624101422j:plain

するとBluetoothで接続されたデバイスの一覧が表示されます。 画面上にPechatが表示されているのがわかるかと思います。

f:id:ueponx:20170624101443j:plain

一覧からPechatを選択してみます。

f:id:ueponx:20170624101452j:plain

するとダイアログの右側にヘッドフォンの画像が表示されます。 その画面中のTrustedの部分にマウスでチェックをしてみます。

f:id:ueponx:20170624101502j:plain

その後、ダイアログ右側にある【Connect】をクリックします。 接続がうまくいくとボダンの文字はDisconnectという文字列に変更します。

f:id:ueponx:20170624101511j:plain

一応この時点でもaplayコマンドで音がなりませんでした。さすがに八方塞がりかと思ってしまうのですが、今度は下部のメニューバーをクリックし、【サウンドとビデオ】→【PluseAudio Volume Control】を選択します。

f:id:ueponx:20170624101520j:plain

選択後に開いだダイアログの【Output Device】を確認すると本体側(B410c)の設定とPechat側の設定が存在することがわかります。問題はなさそうでもあったので、この時点でaplayコマンドで再生させるのですが、問題はなさそうでしたが音声はなりませんでした。そのため、今度は本体側の外してみます。【Configure】タブを選択しD410cの【Profile】をOffに変更します。

f:id:ueponx:20170624101529j:plain

特に問題はなさそうですが、以前音声デバイスの優先順位の設定をしていたときに、優先度が異なると音声がならないということがあったことをふと思い出しました。

f:id:ueponx:20170624101537j:plain f:id:ueponx:20170624101544j:plain

ペアリングさせなおすのですが、これで問題はなく設定は完了になりそうです。

音声の再生

$ aplay /usr/share/sounds/alsa/Front_Center.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

音声が再生されました。やっと正常に動作します。 再起動時などにはペアリングなどは解除されるので起動時に再度Pechatの電源ボタンをOnにしてペアリングさせてあげれば問題はないかなと思います。

おわりに

やっぱり、コマンドラインからの設定はうまく行かず…。Xからの設定でうまくいっているので事実上問題はないのですが…残念です。現在の自分の能力ではそこまでということか。トホホ。