結構、気に入っているSpeaker pHATを使って、単純な音楽再生機を作りました。
コンセプトは、子供や機械が苦手な女性でも、電源を入れてボタン1つで音楽を聴けるデバイスにしたいと思ったからです。
ボタン1つなのであまり多くは制御できません。
SDカード内の曲を再生するため大量の曲を聴くにも適しませんし、基本は勝手に再生するデバイスとなります。
そういう単機能のデバイスでも惜しくなく使えるのがRaspberry Pi Zero 系の利点かも知れません。機能は充分ですし、音もなかなかですよ。
Raspberry Pi のセットアップ
Raspberry Pi OS(今回は2018-04-18-raspbian-stretch-lite)をインストールしました。
インストールに関して、初期設定などは過去の記事をご参考にしてください。
Speaker pHATセットアップ
Raspberry Pi OSが導入されてもそのままではSpeaker pHATは何にもなりません。動かすのに必要なライブラリや設定変更をしてくれるソフトウェアをPimoroniからダウンロードし実行させます。
今回はRaspberry Pi OS liteですからWi-Fi経由のSSHでRaspberry Pi Zero Wのデバイスにアクセスします。Macからだとターミナルアプリケーションで行います。
Pimoroni公式のSpeaker pHAT専用ソフトウェアは以下、GitHubで公開されています。
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
mpdが総称としてのMPDと同じなので解りづらいですね・・・。初心者は特にそう疑問に思うでしょう。
ソフトウェアの方は小文字のmpdで表現されます。mpcは同じ開発(と言ったらいいか?)で、コマンドラインで利用するクライアントアプリケーションです。
他にもクライアントアプリケーションはたくさんあります。Windows用であったり、iOS、Androidなど多様です。スマホで操作できると便利です。
設定のconfが全てです。それで制御できるようになります。逆に言えばconfファイルで決まるということですね。
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はパッケージになっていて使いやすいですね。
男性の声の追加
以下で男性の声をインストールできます。
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円です!
ダイソー系の100円ショップでしたが、300円です。以前から増えたちょっと良い物300円みたいなコーナーにありました。

これを使用できるように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と出る場合、管理者権限での実行にしていないからだと思います。ここでだいぶハマった・・・。
スキャンします。
[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プログラムでボタン押下の挙動と合成音声の再生をしてみます。
