晴れたり沼ったり

へんなものに沼ることがあります。

pirate audio / volumio part2

Pirate Audio phone版へ volumio ベースのソフトを載せてLCDも出すアプリの私的修正版(改竄版ともいう)のセットアップ方法です。


1. volumio を pirate audio をつけた状態でセットアップする。Pi Imagerから入れるのが便利。(設定はWiFiホットスポット接続の方法で行う)
セットアップ中でdacの種類を聞かれるのでhifiberry dacにする。
 volumio名を仮に volumio と設定したとする。(デフォルト)


2. PCからwebで volumio.local/dev
へアクセスし、SSHをenableにする。

 

3. teratermあるいはrlogin(おすすめ)等のSSHクライアントで
volumio.local へSSHする。user/passは volumio/volumio

なんぼなんでもなパスワードなので後で変えるかSSHは全部終わったらオフにしないと。

 

4. 以下のコマンドを順次入れる。ラズパイユーザならいつものおまじない。
sudo apt update
sudo apt upgrade

 

5. ここを参照して python3環境にする。
https://qiita.com/piyo_parfait/items/5abbe4bee2495a62acdc
最後の方の

update-alternatives --config python

sudo update-alternatives --config python

でないと変更できない。
python3.6で書かれているが、現時点では3.7がvolumioイメージに入ってるpythonバージョン。

 

6.こちらの元ネタを参照しつつ下にある書き間違い(あるいは元ネタが書かれた時点から変更が必要になったもの)を直しつつコマンドを投入。


現時点での正しいコマンド(2023.1.8時点)

sudo apt install python3-rpi.gpio python3-spidev  python3-pip python3-pil python3-numpy git
sudo pip3 install st7789
sudo apt install fonts-ipaexfont

 

 

7. /boot/config.txt に追加する部分を実施
ここの白泰工房さんの内容通りに /boot/config.txt に追加する部分を実施。ここは書いてある通り。このあたりで一回リブートしておく。

 

8.書いてあるとおり、githubから git cloneでコピーを実施

 

9. コピーしたディレクトリ内の pirateaudo.service の修正
cd PirateAudio
sudo -s したのち好きなエディタで下記の2箇所を書き換え

User=root は dirty すぎるが:-)

 

ExecStart=/home/volumio/PirateAudioVolumio/PirateAudioVolumio.py

User=root

10. PirateAudioVolumio.pyの修正
import ST7789
の行の前に次の2行を追加。pathの方を正しく認識させるほうがいいかもしれないけど、とりあえずこれで動くはず。

import sys
sys.path.insert(0,'/home/volumio/.local/lib/python3.7/site-packages/')

 

 

問題は積んでるDACの関係でハードウェアボリューム調整できないってことで.....

 



(ここで2日ほど沼で溺れかけ、moodaudioいれたりオリジナルのmopidyにしていろいろ触ったりしたあげく............ 結局PirateAudioVolumioに戻る)

 

 

volumio の設定をこうしてあげればとりあえず歪みまくりの100%地獄からは抜けられた。最初にやっときに ミキサーのソフトウェアが白でグレーアウトしてるみたいに錯覚したので選べないと思い込んだのがこの沼の始まりだったのはヒミツ^^;

 

この状態で alsamixer を コマンドラインから投入して F6 でデバイスを指定してあげると音量調整できた!

 

ってことはコマンドからは例えば

amixer -c2 sset SoftMaster 5%+

とかやれば5% アップできるわけで、こいつをボタンにアサインしてあげればいいことになる。

PirateAudioVolumio.py の修正パッチはこんな感じ。

up/downボタンの場合はvolumioのAPIをコールせず直接コマンドを呼び出してしまうというお行儀の悪いやり方でとりあえず対応。お行儀が悪いのでボリュームのGUIのバーは増減しない:-) あとでもうちょっと調べよう....

とにもかくにもオリジナルを作ってくれた「白泰工房」さんには感謝感謝。

 

ここで組み上げたものは radiofriends3で取ったFM番組の中身をながら聞きするときに使う予定。

 

diff -c PirateAudioVolumio.py.orig PirateAudioVolumio.py 
*** PirateAudioVolumio.py.orig  Fri Jan 12 17:56:19 2024
--- PirateAudioVolumio.py       Sat Jan 13 07:45:18 2024
***************
*** 19,25 ****
--- 19,28 ----
  from PIL import ImageFont
  import json
  import time
+ import sys
+ sys.path.insert(0,'/home/volumio/.local/lib/python3.7/site-packages/')
  import ST7789
+ import subprocess
  
  #
  # GLOBAL
***************
*** 57,62 ****
--- 60,68 ----
  VOLUMIO_URL  = "http://127.0.0.1:3000"
  VOLUMIO_CMD  = VOLUMIO_URL + "/api/v1/commands/?cmd="
  VOLUMIO_STAT = VOLUMIO_URL + "/api/v1/getstate"
+ DOWNCMD = "amixer -c2 sset SoftMaster 3%-"
+ UPCMD = "amixer -c2 sset SoftMaster 3%+"

  #
  # Volumioから属性の読み込み
  #
***************
*** 147,164 ****
  
      if panelMode == 1:
          cmd = VOLUMIO_CMD + GPIO_COMMANDS[GPIO_BUTTONS.index(pin)]
-     elif panelMode == 2:
          if pin == 6:
!             cmd = VOLUMIO_CMD + GPIO_COMMANDS[4]
          if pin == 20:
              cmd = VOLUMIO_CMD + GPIO_COMMANDS[5]
          if pin ==  5:
              lcdDraw.text*1
              os.system("sudo shutdown -h now")
              lcdDisp.display(lcdImage)
              time.sleep(120)
!     
!     requests.get(cmd)
  
  
  # GPIOピンにコールバック関数を定義
--- 153,178 ----
  
      if panelMode == 1:
          cmd = VOLUMIO_CMD + GPIO_COMMANDS[GPIO_BUTTONS.index(pin)]
          if pin == 6:
!             cmd="down"
          if pin == 20:
+             cmd="up"
+     elif panelMode == 2:
+         if pin ==  6:
+             cmd = VOLUMIO_CMD + GPIO_COMMANDS[4]
+         elif pin == 20:
              cmd = VOLUMIO_CMD + GPIO_COMMANDS[5]
          if pin ==  5:
              lcdDraw.text*2
              os.system("sudo shutdown -h now")
              lcdDisp.display(lcdImage)
              time.sleep(120)
!     if cmd == 'down':
!         subprocess.run(DOWNCMD, shell=True)
!     elif cmd == 'up':
!         subprocess.run(UPCMD, shell=True)
!     else:
!         requests.get(cmd)
  
  
  # GPIOピンにコールバック関数を定義

 

 

追記: もう一個不具合があった。起動時などにスクリプトが落ちることがあって、おいかけてからここを修正する必要があった。

47行目付近(上のパッチを当てたあとの行数)に

pArtistY =   0

pArtistY =  50

とあるけど、この1行目は pArtistX = 0 

のタイポまたはコピペミスっぽい。修正すると起動時にコケることもいまのところなくなった。

 

*1:pTitleX,pTitleY),"SHUTDOWN START",font=smallFontTitle,fill=(255,0,0

*2:pTitleX,pTitleY),"SHUTDOWN START",font=smallFontTitle,fill=(255,0,0