PythonでTENORI-ONを動かすblog(仮)

PythonでMIDIを作ってYAMAHAのTENORI-ONをごにょごにょするよ。

Python3で加速度センサーを使う - その2

pigpio公式のサンプルに手を加えて。

 

基板を左に傾けると"<="を出力。右に傾けると"=>"を出力するようなコードを試しに作ってみた。

 

f:id:bastardeyes:20181021202227j:plain

 

 

インデントの都合があるので、試作用に書いたコードはgithubにあげてみました。

 

見たまんまですが若干補足。

  • テノリオン本体の裏に基板を貼り付ける形になるので、向きは裏返しになってます。
  • しきい値はお好みで設定していただければ良いと思います。
  • ざっくりした傾きしかとらないので移動平均法(※注)は特に設定していないです。
  • RUNTIME=60と設定しているため、60秒で自動終了します。
  • ハンダづけが下手くそなのはスルーでお願いします。。

 

「pigpio」のことを「ぴぐぴお」と読んでたのですが、「ぱい じーぴーあいおー」が正解なのだろうか。。

「ぴぐぴお」のほうが絶対かわいいと思う。

 

 

※注) 家にある資料で、一番参考になったのは「+Gainer」でした。

   コードはProcessingですが、移動平均法のプログラムが掲載されています。

  電子工作初心者に優しい電子回路サンプルが多いので、未だにお世話になっています。

 

Python3で加速度センサーを使う

歌うテノリオン失敗後、Phase2でやろうとしていた加速度センサーで少々実験を試みる。


電気系統は弱いのですが、意外にPython3での情報が少なくて、しばらくはまったので備忘録。。


[使ったもの]

※他、お好みで通電確認用のLED & 抵抗330オーム ×各1

 

[接続]

  • (赤)ピン1 <=> センサのVDD
  • (緑)ピン3 <=> センサのSDA
  • (青)ピン5 <=> センサのSCL
  • (黒)ピン9 <=> センサのGND ※ピン6でもOK

ピンの番号は、検索「gpio raspberry pi」で確認することをおすすめします。

このような画像が色々出てくるので間違いがないです。

f:id:bastardeyes:20181021005857j:plain

f:id:bastardeyes:20181021005800j:plain

プレッドボードなしで、直接ピン刺した方が楽でした。

f:id:bastardeyes:20181021005827j:plain


[利用ライブラリ]

  • Python3でGPIOを使うのであれば、ライブラリ「PIGPIO」がおそらくベスト
  • 加速度センサーであれば、公式のexamplesのリンク「I2C ADXL345 Accelerometer」のサンプルをダウンロードするのが手っとり早いです。


[サンプルファイル実行手順]
1)pigpiodデーモン起動する

$ sudo pigpiod


=> 本体起動時に、shで自動実行させるようにするのがベター

 

2)センサーのアドレスを確認する

$ sudo i2cdetect -y 1


=> 自分の環境では、"1d"を確認

 

3)サンプルファイルの10行目の変数を、上記2で取得した値"id"に置き換えて実行

#ADXL345_I2C_ADDR=0x53
ADXL345_I2C_ADDR=0x1d

f:id:bastardeyes:20181021010343p:plain

 

[はまったところ]

  • 検索「Python 加速度センサー」で調べると、Smbusというライブラリの情報が多く出てくる。

 =>ただし、Python2が前提。


Smbus2を使えばPython3でもできる、とか、Python3-smbusを使えば良いという情報もありますが、うまくいきませんでした。

 

[テノリオンへの設置]

ハンズに売られていた「高ナット」は金属しかない&高さがありすぎたので、超低頭小ネジの6mmとプラスチックナットで軽く浮かせました。

本体側をマスキングテープで保護した上から、グルーガンで固定しようかと思います。

 

f:id:bastardeyes:20181021011011j:plain

 

 

f:id:bastardeyes:20181021011030j:plain

 

 

 

 

失念、歌うテノリオン。

近況。突如、本業でフロントエンド開発をすることになり、学習で慌ただしかった数週間。


現実逃避に「日のログイン数をニキシー管で表示するIoTやりたい」など思い立ってググるも、お値段の高さに頓挫。

 

しかしセグメントLEDでは浪漫に欠けるので、「この際キリ番になると音が鳴るようにするか・・?」と思ったが、テノリオンでも代替できそうということにふと気づく。。

 


閑話休題

 

すっかり秋ですね。
さて、タイトルである「歌うテノリオン」の失念について。一応試すだけ試してました。

 

[やったこと]

  • ポケットミクをMTRに繋いで録音(※注1)
  • 付属のCD-Rのアプリ「User Voice Manager」でテノリオン専用ファイルに変換(※注2)
  • SDカードに変換ファイルを入れて、ロード(※注3)

 

[敗因]

  • ロードしても無音だった。尺の問題か、音量の問題か、その他要因かは不明。
  • そもそもユーザ設定音声は、MIDIエクスクルーシブを用いた出力に利用できない。
  • プリセットの音色変更もMIDIエクスクルーシブを用いた出力には利用できない。

=> ユーザの入力文字に応じて、音色変更をしたかったので、結構な痛手。


ただし、やろうと思えばテノリオンとポケットミクのデュエットはできそう(※注4)なので、12月以降に余力があればちょっとやってみようと思いました。

 

 

注1)macにUSB接続して、「garageband」で録音の予定でしたが、うちのモデルでは対応しておりませんでした。


注2)windows専用アプリでした。


注3)取説PDF参照。


注4)想定している構成
Raspberry Pi1号 => テノリオン => Raspberry Pi2号 => ポケットミク

 

Raspberry Piのデスクトップにショートカットを作る

7インチディスプレイを入手したので、タッチパネルとソフトウェアキーボードだけで完結できるようにしたい。

 

と思ったのだが、USBキーボードなしだと色々不便というのを痛感した。

 

とりあえずVNC接続とソフトウェアキーボードの起動はアイコンクリックするだけにしたい。

 

GUIからの最初の設定がうまく行かなかったので、こちらのサイトを参考に。

 

lxshortcutのインストールは、ssh接続でも可能。

sudo apt-get install lxshortcut

↓はGUIが起動してしまうので、VNC接続してコマンド入力。(vnc_shotcutの部分は任意名称を設定)

lxshortcut -o vnc_shortcut

GUIのコマンド欄に↓のコマンドを入力し、「OK」をクリックすると、デスクトップにショートカットが作成される。

tightvncserver

格段に楽になった。

 

ソフトウェアキーボードのコマンドは

matchbox-keyboard &

 

しかしmatchbox-keyboardが扱いづらい。フォントが小さくて見づらいのだけど、カスタマイズはあんまりできないらしい。

 

tkinterのカスタマイズ情報を見つけたので、この際USBキーボードに戻すべきか、若干迷っている。

 

 

pythonのファイル起動もsh叩くだけでできるようにしたかったのだけど、黒い画面しか出なかったので、テキストファイルにコマンド書いて、コピペで対応で妥協している。

※テキストファイルもFTPでPCから転送できるようにすると便利

無印のモニター用ケースを作る

3.5インチでは色々厳しかったので、7インチのタッチパネルディスプレイを買った。

 

値段の面で色々迷ったものの、解像度1024×600のこちら。

ELECROW ディスプレイ LCDモニター

 

 

感想。

  • 本体にHDMI・USB接続だけで使えるのは、拍子抜けするほど楽。
  • 静電容量式のタッチペンも買っておくべきだった。
  • 電力消費が気になる。画面右上に稲妻マークが出ているので、他にUSB出力が必要な場合は、バスパワーUSハブがあったほうが良いかも。

 

家で使う分には申し分ない。が、基板剥き出しで裸族お立ち台状態となると一抹の不安がよぎるので、ケースを作ることにした。

 

 

100均では目ぼしい素材がなかったので、無印良品で調達。

www.muji.net

厚さ2mm。ドリル使っても割れない&頑張ればカッターでも加工できるのは素晴らしい。

結構汎用性高そうなのだけど、メイク用品ゆえDIYクラスタからは注目されない気がする。

 

作り方。

 1)モニターのネジ穴に合わせた穴と、HDMI・USB用の穴を開けて、四角く切る。

一番先にモニターのネジ穴に合わせた穴を開けるのがベター。

 

 2) トレー | ナット | 基板 | ネジ山付きスペーサーを重ねて、表から1本のネジで止める

f:id:bastardeyes:20181006185144j:plain<f:id:bastardeyes:20181006185501j:plain

 

3) 4箇所にネジ穴と、スイッチ用の穴を開けたメイクトレーをもう1枚重ねて、裏からネジで止める。

(写真はスイッチ穴開けてない状態)

f:id:bastardeyes:20181006190152j:plain

図にするとこんな感じで止めてます。

f:id:bastardeyes:20181006190451p:plain

 

完成。作りは雑だけど、いかにも無印っぽいものができました。

 

f:id:bastardeyes:20181006190654j:plain

机に平置きして利用する前提ですが、壁掛けにも使えるかもしれない。

熱がこもりそうであれば、裏にドリル穴増やそうかと。

 

 工作久しぶりすぎて、苦戦しました。。

 

歌うテノリオンは可能か?

これまで製品付属のクイックガイドと、ファームウェアv2.1の追加資料しか読まずに進めてきたので、今更ながらちゃんとしたマニュアルをダウンロードしてきた。

 

で、目次だけチラ見して気になったのがP.80。

付属のCD-Rからサンプリング音声を取り込んで出力する機能について、である。

 

WAVEまたはAIFFファイルを取り込んで、テノリオンから流すことができるらしい。

 

特に流したい音もないのでこれまでずっとスルーしてきたのだが、、

 

もしかして、ポケットミク→MTRでWAVEファイル作成したら、初音ミクの声で歌うテノリオンができるのだろうか。

 

言ったもん勝ちの精神で生きているのでネタにしてみたが、意外にアリな気もしなくもない。

 

・・・とりあえず、タッチパネルからの文字入力→テノリオン出力が直近の課題である。

 

 

 

 

Raspberry PiからのMIDI出力

意外なぐらい情報がなかった。

10年前の情報ですが、こちらで解決しました。

Ubuntu日本語フォーラム / 【HowTo】MIDI音源・デバイスの接続と再生・録音

 

パッケージ alsa-utils は、Raspbianに含まれているので、特に必要なし。

1)aconnect でMIDIポートの入出力を確認。


pi@raspberrypi:~ $ aconnect -i -l 
client 0: 'System' [type=カーネル]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=カーネル]
    0 'Midi Through Port-0'
client 20: 'NSX-39' [type=カーネル,card=1]
    0 'NSX-39 MIDI 1   '
pi@raspberrypi:~ $ aconnect -i -o
client 0: 'System' [type=カーネル]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=カーネル]
    0 'Midi Through Port-0'
client 20: 'NSX-39' [type=カーネル,card=1]
    0 'NSX-39 MIDI 1   '

2) 'Midi Through' => 任意の出力先を指定。


pi@raspberrypi:~ $ aconnect 14:0 20:0   

これだけでOK。ポケットミクでもテノリオンでも同じです。

 

ポケットミクを喋らせるコードは、こちらのサイトを参考させていただきました。

自作デジカメ制作 【機能拡張編その2】世界初!初音ミクの声で歌うデジカメ - karaage. [からあげ]

※変数portは以下に変更して、pygame.midi.init()の下に記入してます。

port = pygame.midi.get_default_output_id()

 

 

テノリオンはthinterの入力から出力までできたけれど、動きがもっさりしているので要改善。

f:id:bastardeyes:20180930211810j:plain

 

完成イメージがもてるまで1か月半。うちRaspberry Piで丸1か月かかったか。。

Linuxの知識のなさを痛感した。