作ってみた!ラズパイガジェット達はこちら

Speaker pHAT 単体で音楽再生+Bluetoothボタン制御

広告
zerowと100円Bluetoothボタン 設定(setting)

結構、気に入っているSpeaker pHATを使って、単純な音楽再生機を作りました。
コンセプトは、子供や機械に音痴な女性でも電源を入れてボタン1つで音楽を聴けるデバイスです。

ボタン1つなのであまり多くは制御できません。SDカード内の曲を再生するため大量の曲を聴くにも適しませんし、基本は勝手に再生するデバイスとなります。そういう単機能のデバイスでも惜しくなく使えるのがRaspberry Pi Zero 系の利点かも知れません。でも機能は充分ですし、音もなかなかですよ。

Raspberry Pi のセットアップ

RaspbianOS(今回は2018-04-18-raspbian-stretch-lite)をインストールしました。ちょうどバージョンアップしたばかりですね。

Raspbianのインストールに関して、初期設定などは過去の記事をご参考にしてください。

イメージファイルからRaspbianのインストール

Raspberry Pi 3bのインストールと初期設定[2018年 Raspbian Stretch With Desktop]

Raspberry Pi の初期設定(RASPBIAN JESSIE WITH DESKTOP)

 

Speaker pHATセットアップ

Raspbianが導入されてもそのままではSpeaker pHATは何にもなりません。動かすのに必要なライブラリや設定変更をしてくれるソフトウェアをPimoroniからダウンロードし実行させます。
これらはRaspbian liteですからWi-Fi経由のSSHでRaspberry Pi Zero Wのデバイスにアクセスします。Macからだとターミナルアプリケーションで行います。

Pimoroni公式のSpeaker pHAT専用ソフトウェアは以下、GitHubで公開されています。

GitHub pimoroni/speaker-phat
https://github.com/pimoroni/speaker-phat

SSHで接続したターミナルから以下のコマンド一発です。

curl -sS https://get.pimoroni.com/speakerphat | bash

途中、Yes/Noの選択が数回出てきます。基本はYESで構いません。

テスト

ダウンロードしたディレクトリ(通常は)ホームディレクトリにPimoroniというディレクトリがあります。
その中にtestディレクトリがあり(~/Pimoroni/speakerphat/test)再生できる音声とシェルスクリプトがあります。
test.m4a test.mp3 test.py test.sh test.wav

test.shでLEDと音声のテストができます。

MPDインストール

MPDはMusic Player Daemonの略でサーバサイドのアプリケーションです。再生にはクライアントアプリケーションが必要です。よくPCで音楽を再生するのはただのプレイヤーですね。音楽を管理するものと再生させるものが別と考えていいです。今回はSpeaker pHAT自体で再生させますが、スマホや他のPCデバイスから再生を指示するイメージですね。そのためMPDとクライアントアプリケーションを同居させます。

mpdとクライアントアプリケーションのmpcのインストール

sudo apt-get install mpd mpc

参考https://www.musicpd.org

mpdが総称としてのMPDと同じなので解りづらいですね・・・。初心者は特にそう疑問に思うでしょう。ソフトウェアの方は小文字のmpdで表現されます。mpcは同じ開発(と言ったらいいか?)で、コマンドラインで利用するクライアントアプリケーションです。
他にもクライアントアプリケーションはたくさんあって、Windows用であったり、iOS、Androidなど多様です。実際に今回も外から制御できます。緊急用にスマホで操作できると便利です。

設定のconfが全てです。それで制御できるようになります。逆に言えばconfファイルで決まるということですね。

参考 http://deviceplus.jp/hobby/raspberrypi_entry_014/

confファイルはnanoなどで開き、編集していきます。長いので、上から順に探してください。

sudo nano /etc/mpd.conf

変更する箇所

music_directory         "/home/pi/music"

ここはデフォルトでも構いません。ホームディレクトリの方が作業し易いので変更しました。

group "audio"

コメントを外して(先頭の#を消す)audioと編集します。

#bind_to_address "localhost"

コメントを付けて(#を先頭に追加)してコメントアウト(非設定)します。これで外からもアクセスできます。今回の趣旨とは別ですが不便なので。

auto_update "yes"

ライブラリの自動更新設定。

auto_update_depth "3"

ライブラリをスキャン更新する階層の深さです。入れ子のディレクトリで3つまでということです。

audio_output {
type "alsa"
name "speaker-phat"
# device "hw:0,0" # optional
mixer_type "software" # optional
# mixer_device "default" # optional
# mixer_control "PCM" # optional
# mixer_index "0" # optional
}

ここはspeaker phatならこれでいいと思います。mixer_type “software”にすることで音量を制御できます。

 

これ以外の部分は好みで変更してください。基本はこれだけでOKだと思います。

sambaインストール

外から音楽ファイルを転送できるようにsambaをインストールしておきます。

sudo apt-get install samba

confファイルの編集

sudo nano /etc/samba/smb.conf

共有名[pi]で以下のように追記します。

[pi]
comment = Raspberry Pi
path = /home/pi/music
guest ok = yes
read only = no
public = yes
browsable = yes
force user = pi

sambaサービスのリスタート

sudo systemctl restart smbd.service
sudo systemctl restart nmbd.service

sambaだけではなく他のサービスも現在はsystemctlでリスタートしますね。

合成音声の追加

せっかくスピーカーが付いているpHATなので、任意の言葉を喋らせようと思います。
音声合成のソフト?サービス?は無償・有料で様々増えてきました。ここでは有名な2つのうち、Open JTalkを使います。AquesTalk Piというのもあります。AquesTalkPiの方よりOpenJTalkの方がPythonで扱うには適しているなと感じただけですので、お好みでどうぞ。

OpenJTalkのインストール

sudo apt-get install open-jtalk

OpenJtalkはパッケージになっていて使いやすいですね。

参考https://qiita.com/lutecia16v/items/8d220885082e40ace252

男性の声の追加

以下で男性の声をインストールできます。

sudo apt-get install open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

音声を使って喋らせるにはコマンドで指定するのですが、長くて煩わしいです。そこでシェルコマンドにしてそれを利用します。

今回、ファイル名は jvoice-m.shとします。

sudo nano jvoice-m.sh

以下の内容で保存します。

#!/bin/sh
TMP=/tmp/jsay.wav
echo "$1" | open_jtalk \
-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $TMP && \
aplay --quiet $TMP
rm -f $TMP

この.shに実行権を与えます。

chmod 755 jvoice.sh

実際の利用は以下の書式をコマンドで実行します。

./jvoice-m.sh こんにちは

jvoice-m.shがある同じディレクトリでのコマンドなので、別の場所なら絶対アドレスで記載してください。

これなら短い指定で済みます。これをうまく利用するには別途、Pythonなどの実行ファイルで短いプログラムを組むと楽です。簡単な形式なら.shのシェルスクリプトでもOKです。

女性の声も追加

同じく女性の声も追加します。

wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip

記事執筆時点で最新verは1.7でした。

unzip MMDAgent_Example-1.7.zip

圧縮ファイルを解凍して、以下のように/usr/share/hts-voice/へコピーします。

sudo cp -R ./MMDAgent_Example-1.7/Voice/mei /usr/share/hts-voice/

先程の男性の声と同じようにシェルスクリプトにします。変更する箇所は男性の声を指定していた部分を女性の物にアドレスを変更します。

-m /usr/share/hts-voice/mei/mei_normal.htsvoice \

sudo nano jvoice.sh

これを新規で保存します。

#!/bin/sh
TMP=/tmp/jsay.wav
echo "$1" | open_jtalk \
-m /usr/share/hts-voice/mei/mei_normal.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $TMP && \
aplay --quiet $TMP
rm -f $TMP

実行は以下のコマンドです。

./jvoice.sh おはよう

男性用のmを外したファイル名にしてあります。お好みで。

男性用 jvoice-m.sh
女性用 jvoice.sh

 

これらを使い、ボタンのON/OFFのタイミングで喋らせようと思います。

100円ショップのBluetoothボタン

実際は300円ですw
ダイソー系の100円ショップでしたが、300円です! 以前から増えたちょっと良い物300円みたいなコーナーにありました。んー。安いけれど、100円ショップで買うと高いと思うのはなぜ?w

参考https://qiita.com/vimyum/items/8b7548ca8cf45383c5b0

これを使用できるようにBluetooth関連のライブラリなどもインストール(以下、現在のRaspbianでは必要無いものもありますが念のため確認も含めて実行しても構いません)

sudo apt-get install bluez bluetooth libbluetooth-dev build-essential

次に、参考サイトで知ったbluebuttonというプログラムをそのまま利用します。(プログラムを書いてくれた人、紹介してくれた人、ありがとうございます)

sudo apt-get install ruby
sudo gem install bluebutton

なんか、gemというコマンドはrubyのパッケージ管理らしく(?)先にrubyもインストールします。

300円Bluetoothボタンとペアリングするため対話式bluetoothctlを実行します。

sudo bluetoothctl

[bluetooth]#に変わります。ここでNo default controller availableと出る場合、管理者権限での実行にしていないからだと思います。ここでだいぶハマった・・・。sudoを付けてbluetoothctlは実行してください!初歩的なことでした・・・。

スキャンします。

[bluetooth]$ scan on

すると、

[NEW] Device FF:FF:3F:F6:48:42 AB Shutter3

このように出ていればOK。適当な時間でctrl+Cで中断します。検出できない場合は、もう一度scan on のコマンドを叩けば出てくると思います。(Bluetoothボタンの電源スイッチを確認してください)

 

FF:FF:3F:F6:48:42がMACアドレスです。このMACアドレスをコピーしてペアリングで指定してください。順番にコマンドしていきます。

connect FF:FF:3F:F6:48:42
pair FF:FF:3F:F6:48:42
trust FF:FF:3F:F6:48:42

なぜかconnctしてからでないとpairできませんでした。最後にtrustすれば再起動後やデバイスのON/OFFをしても繋がります。

このようになっていればOKです。(例)

[bluetooth]$ pair FF:FF:1D:14:79:80
[CHG] Device FF:FF:1D:14:79:80 Paired: yes
Pairing successful
[AB Shutter3 ]$ trust FF:FF:1D:14:79:80
[CHG] Device FF:FF:1D:14:79:80 Trusted: yes
[AB Shutter3 ]$ quit

最後はquitまたはexitで抜けます。

次の記事でシェルスクリプトまたはPythonプログラムでボタン押下の挙動と合成音声の再生をしてみます。
続きはこちら→ Bluetoothボタンで動作と合成音声の再生