備忘録)MIDIでエレクトーンをハックする記事
Raspberry Pi × MIDIの外部出力について調べていて、たまたま見つけた。
とどめにPS2のコントローラー制御まで。
非常にグッときました。ご飯3杯いける勢いです。
「ゲームのコントローラーで既存の楽器(あるいは電子機器)を制御する」は組み合わせとしては無限大。
なので、心の引き出しにそっとストックしておこうと思います。(今は技術も時間も足りない)
そういえば、昔のMakeでは、ゲームボーイのソフトをハックしたり、センサーで既成のゲームをハックする作品もありました。近年はそういうタイプはあまり見ていない気がします。
Raspberry PiのMIDI出力がうまくいかないので、、
色々試したいが、万が一tenorion壊したら困るので、何かシステム・エクスクルーシブ出力に対応した安いMIDI機器がないか調べてみたのだが。
ポケットミクが税込・送料込990円で売られていた(※)ので、買ってしまった。
で、届いたのでとりあえず「MIDI Trail」を使って、既存のMIDIを流してみることにした。
普段、歌モノあんまり聴かないので、とりあえずブラジル音楽の巨匠エグベルト・ジスモンチである。
エグベルト・ジスモンチ「Frevo」を歌っていただいた。#ポケットミク pic.twitter.com/YwedxQ71U4
— pj-hack-tenorion (@hack_tnr) 2018年9月27日
本家。アルバム『Alma』に入っているピアノver.が一番好きです。
たぶん、今のPythonを少しいじればリアルタイムでMIDI流すこともできると思われるので、ドラゴンボールの擬音の音読とか喋らせてみたいところ。
目的から逸れたけど、面白そうなので余裕ができたら遊んでみよう。
※定価は4980円(税抜)。現在の最安値は2000円くらいです。
実録。RaspberryPiでPythonが動くまで
正直、こんなに手こずると思わなかった。
インポートは予想外に時間がかかるということを痛感した。
macで動いているコードをRaspberryPiで動かせるようになるのに、まさか丸1日かかるとは。
●numpy,pandas関連のインポートで2時間かかった。
=>CPUのスペックか。。まぁ、安定した通信環境で放置しておけば良いので。
(とはいえ、Amazon Primeで映画「銀魂」一本見終わって、愕然とした。)
pyenv関連は下記を参考にさせていただいた。
pandasはエラーにならなかったけれど、scipyは40分ぐらいしたところでエラーになり失念した。
plant-raspberrypi3.hatenablog.com
●pygameのインポートエラー
=>さほど時間はかからないが、'Unable to run "sdl-config". Please make sure a development version of SDL is installed.'というエラーが出た。
下記で解決できた。
●PILインストール
下記のコマンドですんなりいけた
$ sudo apt-get install python-imaging
●tkinterが一番はまった!!!!
色々情報が多いが必要なパッケージはpython3-tkだった。
ただし、先にpyenvを入れてると、関連づけがうまくできないようでエラーになってしまう。
ModuleNotFoundError: No module named '_tkinter'
一度pyenvをアンインストールして、入れ直したら解決した。
Ubuntのpyenv上でtkinterを使えるようにする - Python学習講座
・・・ここまでやって、ようやくエラーなしでコードが動くようになった。
が、tenorion本体にMIDI信号が流れていないのか、うんともすんとも言わない。
戦いはまだ続く模様。
もくもく会参加してきた
ひょんなことから「RaspberryPiもくもく会」に参加してきたのだった。
家だけで作業していると、イベント本番のトラブル対応に弱くなるので、予行演習も兼ねて行ってきた部分もあるのだけれど、色々勉強になりました。
[装備について学習したこと]
●有線LANケーブルはあった方が安心
Wi-FIが繋がらないと詰むので、ブリッジ接続の備えがあった方が良い。
「今時のマシンはクロスケーブルでなくてもいける」というが、ストレートケーブルで問題なさそう
●電源タップは口数だけで安心してはいけない
3口のタップを持参したが、アダプタが大きいため、2口しか使えなかった。
追加で延長か何か必要と気づいた。
●モニタ/キーボードはなんだかんだあった方が安心
ssh接続があれば問題ないと思っていたが、イベントにおいては心の安定のためにあったほうが良い。。
●バックアップのSDカードは常に用意。
時間ない時はRaspbian本体GUIのSDcard copierでいいのでバックアップを用意すべし。
●旅行バッグでは遠征の荷物が入りきらないと知った
機材はギリギリ入ったが、着替え等を入れるバッグが追加で必要と判明した。
(尚、機材だけで6kg近いのでリュックの購入を検討)
●ドライバセットはあった方が安心。
[環境周りで学習したこと]
●重めのインストールは通信の不安定なところでやってはいけない(かもしれない)
●カードも本体も、壊れるもの。
Pythonのライブラリインストール中に、突然落ちて、そのまま本体ごとお亡くなりになった。合掌。
直接関係あるか謎だけれど、「ちゃんとシャットダウンせずに、起動し直すと壊れることが多い」と教わった。
●FTP設定しておくと便利
実行コードを入れるのに、SDカード抜き差しするのは面倒。
[その他]
●セッティング・撤収は練習が必要。
●中身について説明するの下手なので、コードを印刷しておくと会話がしやすいかもしれない。
次回もくもく会は10/27とのことです。
raspberry-pi-moku.connpass.com
TKinterで簡易UIを作る
Raspberry Piのモニターから文字入力させるため、TKinterでUIを作った。
ボタンの色が、どうオプション設定してもうまくできないのが気になる。。
が、はまるポイントはそれぐらい。
今、3.5インチモニター+キーボード+マウスで進めているが、ごちゃごちゃしているので。
モニターのタッチパネル+ソフトウェアキーボードでやるなら、7インチないと厳しいだろうか。など。紆余曲折。
import tkinter as tk
from tkinter import messagebox
class Tkinter_app(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.create_widgets()
def create_widgets(self):
self.input_box=tk.Entry(width=30)
self.input_box.grid(row=0,column=0,columnspan=4, padx=5, pady=20,sticky=(tk.N, tk.S, tk.E, tk.W))
self.clear_btn=tk.Button(width=5, fg='#696969')
self.clear_btn["text"]="クリア"
self.clear_btn["command"]=self.clear_input_value
self.clear_btn.grid(row=1,column=1,padx=5, pady=10,sticky=(tk.N, tk.S, tk.E, tk.W))#,sticky=(tk.N, tk.S, tk.E, tk.W)
self.exec_btn=tk.Button(width=5,fg="#ff6347")
self.exec_btn["text"]="実行"
self.exec_btn["command"]=self.execute_input_value
self.exec_btn.grid(row=1,column=2,padx=5, pady=10,sticky=(tk.N, tk.S, tk.E, tk.W))#,sticky=(tk.N, tk.S, tk.E, tk.W)
def clear_input_value(self):
self.input_box.delete(0, tk.END)
def execute_input_value(self):
msg = self.input_box.get()
if len(msg)>0:
messagebox.showinfo("Now Playing..", msg)
root = tk.Tk()
root.title("電光掲示板")
root.geometry("480x320")
root.config(bg="#f5f5f5")
app=Tkinter_app(master=root)
app.grid(column=0, row=1)
app.mainloop()
下記、参考にさせていただきました。
Raspberry Piではまった。
気づいたら随分時間が経過していた。不覚。
今後2台目で同じことをやりそうなので、以下備忘録。
●環境
・本体:Raspberry Pi3 B+
・モニタ: QUIMAT 3.5" LCD DISPLAY
・SDカード:Sumsung MB-MC32GA
●はまった箇所
[モニタ]
1)Noobs経由でRaspbianを入れるとうまくいかない。
=>公式から "2018-06-27-raspbian-stretch.img"をダウンロードして、ETCHERを使ってSDカードに入れるのが最適解だった。
(フォーマットFAT32なので、4GB強のイメージファイルはコピペで移動できない)
2)専用ケースに入れると付属のHDMIジャックが奥まで入らない。接触不良で「No Signal」となって使えない。
=> 諦めて普通のHDMIケーブル使う(ただし見映えが悪い。かさばる。)
3)付属のDVDが読めない。
=>gitでドライバ落としてくれば事足りる。cloneは/boot 配下で実行。
4)ドライバのタッチパネル設定のコマンド「sudo ./MPI3508_480_320-show」がエラーになる。
エラー"this is not raspberrypi kernel, no need to update touch configure"
=> 本体ホストネームを初期設定(raspberrypi)から変更していたので出た模様。
ホストネーム"raspberrypi"で行うのが吉かと。
参考)ドライバのソースのこの部分。
if test "$nodeplatform" = "raspberrypi";then
[本体]
・「3B+はdefaultでWi-Fi無効」
=>通常は、 /etc/wpa_supplicant/wpa_supplicant.conf に設定追加すればOK。
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1network={
ssid="XXXXX"
psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
scan_ssid=1 #SSIDがステルスの場合必要
}
=> しかし我が家で追加しても動かなかった。
原因: なぜかWi-Fiのパスワードが、ルータの工場出荷状態に戻っていた。。
(他の機器繋がってるので気づかなかった)
[PC]
・数回Raspbianを入れ直していたら、SSHが繋がらなくなった。
=>sudo vi /Users/ユーザ名/.ssh/known_hosts で中身消す。
・・・迷走した結果、ssh接続してもhost downして動かなくなり、夜中にSDカードを再フォーマットするのを繰り返したり、色々ありました。。
相当のロスがあったが、ようやく開発に戻れる。
----------------
参考資料。
●モニタ周り、まとまっている記事。
Raspberry Pi で使えるポータブルモニタの決定版が出てた(タッチスクリーン付き、GPIOを占有しない、ケース付き、約3000円) - nomolkのブログ
●環境周り
Raspberry Piを自宅以外の場所で使う時に役立つ設定
Raspberry Pi 3をUpdateしたらWiFiに繋がらなくなった: 文系エンジニアの私的ナレッジベース