友人に頼まれた音楽プレイヤーを作りました。お子さんが音楽にハマるお年頃のようです。今時の子らしくボカロが大好きらしい。ハイレゾでも聴けるプレイヤーが欲しいと聞いた時、ちょうどPirateAudioが発売されたので、それで作ろうとなりました。
タイトル通りなのですが、タルコンガって知ってます?
ゲームのコントローラーです。知ってはいても使ったことはありませんでしたので、実物がどの程度の大きさなのか見当も尽きませんでした。
友人はスピーカーが収まるような形で連想したようです。そのまんまですが。
追記 マウント時にファイル名が日本語文字化けしていたのを修正しました
音楽プレイヤーとしての仕様
最初にどういった仕様にするのか決めました。
お子さんはあまりPCには詳しく無い。タブレットの操作はできるので、タブレットで操作させるにはMopidyでも充分です。
また、音楽ファイルは予めmicroSDカードへ転送しておくこととし、追加削除したいとのこと。
追加削除はUSBメモリーを指して読み込ませることにしました。スクリプトを書いてそれを何かトリガーで実行させる方法です。読み込ませるタイミングは再起動などか、物理ボタン、またはUSBメモリーが接続されたら?などいくつかありますが、今回は別途にBluetoothボタンと連携して終了と再起動をさせます。
今回の仕様
〜PCが使えない子供のために〜
- 音楽ファイルはmicroSDカードへそのまま保存する
- 曲の追加/削除はUSBメモリーを接続して行う
- 読込はスクリプトで再起動時に行う
- Bluetoothボタンで電源のオフと再起動
本当はクラウド経由とかにしておくとラクチンですし、Spotifyならサービス利用だけですから簡単なんですが、どうしてもローカルの手持ちファイルを聴きたいとのことでしたので、このようにしました。
前回の記事のようにPirateAudioをセットアップして、あとは入れ物を考えます。
タルコンガをスピーカーにする
そのお子さんが使っていたタルコンガをスピーカーにしたらどうかと友人が持ってきました。
これがタルコンガです。
確かにスピーカーみたいです。
スピーカーが小さいのでこれだとだいぶ大きな入れ物になります。それならRaspberry Pi Zero Wだって仕込めますから面白そうです。
そしてこれ、かなり良く出来ていて衝撃に強いように作られています。破壊してみて任天堂のこだわりが感じられました!叩く物だから強度は必要ですからね。
どこからもアクセスできない作りなので破壊することにしました。
バラバラにしないと取り外せなかった。小一時間かかります。とにかくバラしてもどうやって組み立てているのか皆目見当も付かない程に良く出来ています。
スピーカーを仕込む
画像のように仕込みました。4cmくらいのスピーカーなのでかなり余ります。
スピーカーを取り付けている黒い半透明の物はプラ板です。100円ショップで購入しました。同じく黒いL字金具も100円ショップで購入し、ケースとナイロンネジ(M2.5)で止めています。
穴は家にドリルがあったのでそれでチマチマと開けました。
切り取りなどは汚いですが、そういったツールも持っていないのでPカッターとハサミで加工です。
想像通りで取りあえず動かないようにキチンと収まりました。道具が欲しいですね・・・。
さて、Raspberry Pi Zero Wを何処に配置するか?
\ Raspberry Pi 4はメモリー8GBが最新 /
乗っけてしまえ
100円ショップで以前にも使ったコレクションケースが良いあんばいの大きさだったので購入。
上に載せてしまえ!ということになりました。
透明なケースなので埃から守ってくれます。

取り付けはこれまたL字金具を使い、差し込むことで取り外しできるようにしました。位置取りが上手くいって良かったです。
L字金具の片方が長かったので思い付きました。
配線は裏に元々穴が空いていたので、そこを拡張して使いました。
本当は既存のボタンも何とか使いたかったのですが、なにせ2つに割らないとならないので諦めました。やるとしたらBluetoothボタンを仕込んで電源にするくらいかな。(GPIOが埋まってますので)

完成!
とりあえず完成です。作るより、どうするか考える方が時間がかかりました。
これが全貌です。

下の台に箱などを用意し、クッション性のある敷物だと、より一層重低音が締まります。
シャカシャカにはなりません。スピーカーの裏もそれなりに距離があります。今回は底にフェルトを入れるの忘れました。
前面はこのままの方がいいかなーと思いましたが、1枚の紙を通すとより安定した音になります。

まさに太鼓のように見えます!

音楽ファイルを読み込むスクリプト
さて、中身は基本はmopidyです。
USBメモリーから音楽を追加、削除するためにスクリプトを簡単に書きました。
以下のようなスクリプトを作成しUSBを差してから実行します。

#!/bin/bash
# mount usb
sudo mount -r -o uid=pi,iocharset=utf8 /dev/sda1 /mnt/usbram
# copy music
sudo rsync -av --delete /mnt/usbram/music/ /home/pi/media
# unmount
sudo umount /mnt/usbram
# service reboot
sudo systemctl restart mopidy
echo "Scan..."
sudo mopidyctl local scan
echo "All done!"
実行させるトリガーは、起動時に読み込ませまることにします。
ポイント
マウントのオプションで -o uid=pi,iocharset=utf8 を付けてマウントします。日本語ファイル名の文字化けがあったので追加しました。ただ、ST7789のディスプレイ表示は化けます・・・。なぜ?
rsync -av --delete で同期元にないファイルを削除させます。他にもオプションがありますのでrsyncで検索してみてください。
適当なスクリプトですみません。これでも一応動いていますが、不要な物を省いたりしてください。
※scanのコマンドを実行してもライブラリが更新できない場合は、Irisのsettingにあるボタンからスキャンしてみてください。
今回は自動実行に/etc/rc.localとしました。スクリプトは/usr/local/bin/へコピーしておき、/etc/rc.localへshファイルを追記します。
sudo cp cp_music.sh /usr/local/bin/ sudo nano /etc/rc.local
最後に追記(今回のファイル名はcp_music.sh)
cp_music.sh
exit 0
再起動のさせかた
問題は再起動をどうやらせるか、ということです。使うのはお子さんなので遠隔で操作できませんから、ややこしくなりますが、やはりBluetoothボタンに割り当てようと思います。

AB-shutterボタンは便利です。安いのに。色もお子様らしいし。
2つのボタンは使えません。1つを長押しか1回押しかで2つの機能を割り当てます。(ボタンを別々に制御するやり方もありますが今回はパス!)
これまでも何回か記事にしています。そちらをご覧ください。
1回押しに割り当てる再起動用
#!/usr/bin/python import os os.system("sudo shutdown -r now")
長押しに割り当てるシャットダウン用
#!/usr/bin/python import os os.system("sudo shutdown -h now")
それぞれ名前を「saikido.py」と「owari.py」などPythonファイルで保存します。
実行権を与えます。
sudo chmod +x saikido.py && sudo chmod +x owari.py
Bluetoothボタンをペアリングできたらbluebuttonというファイルにイベント動作を設定します。
取りあえず/home/piにあるとして以下、設定します。
sudo nano ~/.config/bluebutton
#以下を記述 keyup=saikido.py keydown=echo DOWN longup=echo LONG UP longdown=owari.py
Bluetoothボタンを待ち受け状態にします。
sudo bluebutton -c ~/.config/bluebutton
これを常にしておきたいので、cornでshファイルを実行させます。
先ずshファイルを作って
#!/bin/bash sleep 10 sudo bluebutton -c ~/.config/bluebutton
sleep10と待たせているのは、ペアリングが失敗しないようにということです。
実行権を与えて
sudo chmod +x waiting_bluebutton.sh
以下、cornに記述します。
crontab -e
Select an editor. To change later, run 'select-editor'.
- /bin/nano <---- easiest
- /usr/bin/vim.tiny
- /bin/ed
Choose 1-3 [1]: 1
@reboot /home/pi/waiting_bluebutton.sh
これで完了です!

以上、タルコンガ(コントローラー)をPirateAudioとRaspberry Pi Zero Wを使って音楽プレーヤーにしてみました。
友人のお子さん、喜んでくれると良いけど・・・、実は女の子だからもっとカッコイイ方が良かったか?! 子供っぽいとか鼻で笑われそうだわ、この外観では。
備忘録(Mopidyサブコマンドなど)
以下、忘れやすいので覚え書きで置いておきます。
サービスで実行しているmopidyの場合はサブコマンドも変わってきます。そもそもconfファイルの置き場所も異なります。
ユーザーmopidyでconfigの内容を確認するコマンド
sudo mopidyctl config
変更を反映させるのにmopidyのサービスを再起動させるコマンド
sudo systemctl restart mopidy
ユーザーmopidyとしてローカルファイルを再スキャンするコマンド
sudo mopidyctl local scan
ユーザーによる相違点
特にmopidyは、この辺は本当に理解し難い。
ユーザーmopidy | ユーザーroot | ユーザーpi |
/etc/mopidy/mopidy.conf | /root/.config/mopidy/mopidy.conf | ~/.config/mopidy/mopidy.conf |
sudo mopidyctl local scan | sudo mopidy local scan | mopidy local scan |
サービスで稼働させる場合は常にユーザーはmopidyなので注意が必要ですね。
m4aファイルの再生にはgstreamer1.0-plugins-badのインストールで再生可能
mp3の他、24bitハイレゾ対応なのでFlacで再生させています。これにm4aなどを追加するのにgstreamerを追加しておきましょう。
sudo apt install gstreamer1.0-plugins-bad
以上、コンガの制作現場からお送りしました!
コメント