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

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

M5STACKでライフゲームを動かす。

テノリオンを動かすべく、M5Stack用MIDI Moduleを発注したので、年明けに作っていたライフゲームを移植してみた。

 

Pyxelを置き換えるぐらいですぐに終わると思いきや、予想外の展開。

 

MicroPythonはnumpyが使えない。

 

つまりnumpyで書かれた配列は全て書き換えなければならないという。

 

・・・numpy、今まで甘えてばかりでごめんね。反省。

 

数時間後、動いた。

 

  

ボタンぽちぽちで、簡単にリセットできるのは強い。

 

ランチ占いと同じく、再起動後の乱数が決まっているのだけれど、逆に「起動から何回めは全滅パターン」というのが分かっているので、結果オーライということにしておこう。

 

しかしMycroPython触るようになって、ライブラリのありがたみを痛感する。

触らなければ、ライブラリがない場合の実装方法を考えることはずっとなかったと思うので、勉強になった。しみじみ。

 

4/30追記)書籍「作って動かすAlife」のサンプル(MITライセンス)をもとに、MicroPython用にnumpyを除外して作っています。

GitHubのリンクはこちら。

M5STACK)ランチ占いの続き

前回、M5STACKで作った「ゆるふわランチ占い」。

納得の行くところまで作ってお終いのはずが、そうは問屋が卸さなかった。

 

まさか再起動する度に乱数が初期化されて、毎回同じメニューが出てくるとはな。

 

取り急ぎGoogle Apps Script版も作ってはみたものの、なんかやっぱりしっくりこない。ワクワク感が足りない。

あと、M5STACKの方が圧倒的に女子ウケが良い。

 

悩んだ挙句、加速度センサの値を加算して、乱数に加算する仕様に変更した。

ついでにメニューもちょっぴり変更して、重複も除外した。

 

燦然と輝く白飯が復活。

f:id:bastardeyes:20190127154907p:plain

ビジュアルは変わってないので集中線でカバー。

 めでたしめでたし。

 

完成したのでしばらくは何もしないつもりだったのに、うっかりAliExpressで安売りされているFaces等を買い込んでしまい。

 

MIDIモジュールあればテノリオンも動くことに気づいてしまったり。

 

 沼落ち感あるけれど、数週間後に到着するFacesが待ち遠しいので良いのではないかと。

無事届きますよう。

M5STACKで遊んでみた

1/6。RaspberryPiもくもく会に参加した帰りに、つい出来心でM5STACKを買ってしまった。

 

主な理由

  • 本業でbotとか作りすぎなので、ガジェットらしいものがやりたい。
  • ラズパイでは少々オーバースペック。
  • Python使えるらしい。
  • 電池とモニターとボタンが付いてる。
  • 小さくてかわいい。
  • 正月なのでうっかり財布の紐が緩んだ。

と軽い気持ちで挑んだものの、蓋を開けたら結構大変でした。(苦戦したポイントは後述)

 

ハマったポイント

  • Arduino IDEを使って簡単に環境構築できる」と思いきや、MicroPythonを使う場合は手順が違った。
  • M5CroudでWi-Fi接続する際、SSIDがステルスで選択できなかった。
  • M5Croud上でソースをuploadする画面が開けなかった。=>最終的にオフライン用のファームウェアを使った
  • MicroPythonでは日本語表示が標準機能にない
  • SDHCカード利用時、uos.mountsd()が通らない。諦めてから何度か再起動しているうちに動くようになった。(が抜いたらまた動かなくなった。結局SD使わない)

 

・・・というハマりの結果、以下のオフラインファーム利用に落ち着いた。

大まかな環境構築手順メモ

  1. USBドライバーをインストール

  2. ESP32のインストール(FW書き込みに必要)

  3. オフラインファームのインストール
  4. ampyのインストール(m5stack内のファイル書き込みに必要)

作ったもの

1択〜3択でランチの「選択肢」をざっくり教えてくれるもの
=>日頃から30面ダイスでランチを決めるのだが、選択肢を考えるのが地味に大変。
※店を具体的に選ぶと、混雑に悩んだり距離が微妙なので、店名で選ばない。

f:id:bastardeyes:20190114225446j:plain

おみくじの信憑性は気にしない。

f:id:bastardeyes:20190114225505j:plain

サイコロを振るアナログ感を大事にしたい。

 

MicroPythonによる日本語表示プログラムは、こちらを使わせていただきました。(コード内にもその旨記載)

ご飯画像はいらすとやより拝借。

 

コードはsamples/src/m5/todays_lunch/になります。

 

後学のためにC言語も勉強すべきだろうかと考える今日この頃。。

テノリオン×ライフゲーム

昨日のpyxel × ライフゲームに、さらにテノリオンを追加。

 

約3分かけて全部のセルが死滅する様を見たときは諸行無常を感じました。。

pyxel側にリセットボタンや世代カウントをつけるともう少し良いかもしれない。

 

 

色々試行錯誤の末、以下の設定で実装。

  • 生存セルの個数に応じて、都度音階を変える(スケール8種から選択)
  • レイヤーは複数用いない。レイヤー1-7のうち、4のみを利用。(レイヤーにより高低、リズムなど役割が異なる)

 

↓p3内を参照。

実は過去コード全部libのフォルダがgitignoreで除外されていることに気付いて猛省したのは内緒。

 

明日から仕事なので、そろそろ本業の勉強もまじめにやらねばと思いつつ、日曜にRaspberry Piもくもく会を控えているのでした。

 

テノリオンで何かやるか、別のものをやるか考え中。

 

 

pyxelでライフゲームを動かす

晦日、クリスマス前の連休についカッとなって購入した『キムタクが如く』をなんとかクリアしました。

シナリオもちゃんと面白いのですが、自転車やらネットカフェの看板やらを振り回して戦う様はダイナマイト刑事感があり、「ちょ、待てよwww」が聞けるのもポイント高し。

しかし、スタッフロールの海外ローカライズの記載を見て以来、「人妻系ヘルス こんばんワイフ」は果たしてどう翻訳されるのが気になって夜も眠れない。。

 

 

はい、あけましておめでとうございます。

 

2018年夏あたりから目標にしていたALife & テノリオン作品のマイルストーンとして、ライフゲームテノリオンで表現しようとしている今日この頃。

 

少し前見かけたpyxelが面白そうだったので、書籍「作って動かす ALife - 実装を通した人工生命モデル入門」のライフゲームのサンプル(MITライセンス)をpyxelで動かしてみました。

 

 

 

 

・・・さて、これをテノリオンに出力するのは難しくないのですが、扱うレイヤーが1つだと音が薄っぺらく単調になってしまうので、意外に奥が深そうな予感。

 

今年も頑張ります。

 

 

ワークショップ)「言語としてのスケッチ」交流会

ひょんなことからこちらのイベントに参加したのですが、学ぶことが多かったので記録に残したいと思います。(主催者には事前確認済みです)

 

 

講師が東京大学教授の山中俊治先生。会場がスケッチブックで有名なマルマン。
しかしタイトルが「交流会」なので、誰と誰が交流するのだろう?と思いながら会場へ。

 

5分遅れで到着した本社ビルのマルマンエレベーターがあまりにもマルマンすぎて、テンション爆上がりです。

f:id:bastardeyes:20181228011759j:plain

入り口のマットもマルマンでした

 

最初は山中先生の自己紹介〜過去のスケッチを鑑賞。
書籍「デザインの小骨話」等で見かけたスケッチもあれば、2009年「骨」展で展示されていた玉屋庄兵衛さんとのからくり人形作品のこぼれ話などもあり。

 

 

「あ、もうお腹いっぱいです」という気持ちになりかけたところでお絵描きの時間に突入。
というか、絵を描くワークショップだったんですね。ということにここで気づきました。

 

平行線を描く

肩の関節を使って円弧を描く。肘、手首を使って円弧を描く。
その応用で平行に線をスライドすると、平行線が描ける。

 

楕円を描く

楕円には始点も終点もない。
ペンを紙につけずに手首で連続して円を描く。途中からペンを乗せる。
(※自分は回転方向を左右逆にしたりペンの持ち方を変えても描き味が異なるという発見もあり。)

f:id:bastardeyes:20181228012322j:plain

さながら日本庭園のような楕円の集合。


左手を描く

頭を動かさず、できれば片目で見て描く。

なぜうまく描けないかというと、人間の目は色々な角度から捉えようとするため、違う向きの絵が混在してしまう。
脳が形を理解することで、形を見ることを妨げる。一度わかってしまうともう見なくなってしまう。

 

↓注)自分の絵です

f:id:bastardeyes:20181228012451j:plain

小指側から描いてたら、親指を描いてる途中でタイムアウト。故に爪がない。

 

余白を描く

左手が存在することで、切り取られた「空間」を描く。
それから、爪が存在することによって、「えぐられた肉」を描く。
=>手という既知のものを捉えるのではなく、空間という未知のものを観察することで、純粋に形のみを捉えることができる。

 

↓注)自分の描いた絵です

f:id:bastardeyes:20181228012646j:plain

フォトショップで切り抜いて残った、余白をイメージすると近いかも

 

手に構造を与える

手の輪郭ではなく、軸として存在する骨を描く。中心軸を見る。

↓注)自分の描いた絵です

f:id:bastardeyes:20181228012842j:plain

骨格が正しいかどうかは気にしてはいけない


自分は美術やデザイン技術についての専門知識や経験がなく、高校卒業以来まじめにスケッチをしていないのですが、描いた絵を順に比較して見ると、次第に立体的になっていくのが興味深い。

 

総括「言語としてのスケッチ」とは
=> 無垢な目で見ること、構造を理解すること

 

・・・自分はおそらく、この言葉を本や展示で文字として見た場合、概念としてわかったつもりで止まっていたかもしれない。
実際に手を動かして経験をすることで初めて得られるものが多いと思いました。

 

それこそ「脳が(形を)理解することで、(形を見ることを)妨げる。」なので、たまたま今日この文章を見た方は冬休みに画用紙を買ってお絵描きをしていただければと思います。

 

また、来月も異なるゲストにて、がようしラボのイベントが開催されるとのことですので、機会があれば是非ご参加ください。

 

 


山中先生がさらさらと描くスケッチの線に驚嘆。完成形の美しいものは、プロセスも美しい。

f:id:bastardeyes:20181228013020j:plain

山中先生の描く左手


 

f:id:bastardeyes:20181228013059j:plain

質疑応答とともに。貝はなぜ螺旋状に成長するのか、というスケッチ。

 

山中先生よりご紹介のあった参考書籍。ベティ・エドワーズ「脳の右側で描け」

www.amazon.co.jp

 

PythonとMIDIで電子楽器を鳴らそう

この記事は PyLadies Advent Calendar 2018 12月14日の記事です。

 

Advent Calendarもそろそろ折返しということで、ちょっと一服。
本日は実用性の薄いニッチなネタを書かせていただきます。

 

詳しい方からはマサカリが飛んで来そうですが、、ご家庭のキーボード(楽器のほう)などで自動演奏してみたい!という酔狂な方はご一読いただければ幸いです。

 

[自己紹介]

  • 「自動演奏&自動作曲をやろう!」という試みの一環で、TENORI-ONという電子楽器にPythonMIDI信号を作って流してます。(2018年8月〜)
  • 若い頃にテレビで明和電機を見て「こんな大人になりたい」と思った結果、何かを間違えました。

[今日のお品書き]

  • そもそもMIDIってなんぞ?(超絶ざっくり)
  • 電子楽器にMIDIファイルを流して自動演奏してみよう
  • Pythonで作ったMIDI信号を楽器に流してみよう

 

はい。本題入ります。

 

●そもそもMIDIってなんぞ?(超絶ざっくり)

主に音楽演奏や制作に使われる、MIDIプロトコルという規格。「Musical Instrument Digital Interface」の略。
=>キーボード、シンセサイザー等、ドレミファソの音をデジタルな音階で持っている楽器は概ねMIDIに対応している、と捉えてください。
※奥が深すぎるので豪快に割愛します。

●電子楽器にMIDIファイルを流して自動演奏してみよう

Pythonは関係ないです。簡単に、既存のMIDIファイルを電子楽器に流す方法を紹介します。

<用意するもの>

MIDI端子があるorUSB接続可能な電子楽器(主にキーボード)
=> 製品マニュアル要確認ですが、、本体外周を見回して、外部接続できそうな端子をチェックして見てください。(ヘッドホン端子
以外)
今回のサンプルは、USB接続可能な「ポケットミク」です。


・(入出力がMIDI端子の場合)USB-MIDIインターフェース
=> 製品の相性があるようですが、、ヤマハUX-16など。

 

・(入出力がUSBの場合)USBケーブル
=>本体-PC接続可能なもの。旧型のtype-Bなどの場合もあり。

 

MIDI音源 => ゲーム音楽が数多め。検索 "MIDI {ゲームのタイトル}"や"MIDI フリー素材" でhitします。


・PC => mac/windowsどちらでも。


MIDIプレーヤーソフト => フリーソフト「MidiTrail」がおすすめです。

<MidiTrailで流す!>

1)PCと電子楽器をUSB接続。両方とも電源ONにしておく
2)MidiTrailを起動
3)メニュー "Option" -> "MIDI OUT"でdefault portに"NSX-39"を指定

f:id:bastardeyes:20181214014349p:plain


4)メニュー "File" -> "Open"で、MIDI音源を選択
5)メニュー "PlayBack" -> "Play/Pause" 、または スペース で音源再生

f:id:bastardeyes:20181214014412p:plain

 

流してみました。

 

Pythonで作ったMIDI信号を楽器に流してみよう

<ライブラリについて>

・ガチ音楽なMIDIのファイルを作成する場合
=> ライブラリ「pretty_midi」が良さげ。音色がデフォルトで何種類か選べる。
 ドレミは[60, 62, 64]などノートナンバーで定義する必要はあり。
 ※リアルタイムでのMIDI信号生成には不向きな様子

 

・とりあえず気楽にリアルタイムで単音を出したい場合
=> ライブラリ「pygame.midi」がおすすめ。動的に信号を出して遊べる。
※自分はもっぱらこちらを使用。

 

<音の出し方>

・ざっくり言うと、note_onで音がでる。note_offになるまで残る。
・ピッチ(音の高さ)は60でド。1増えるごとに半音上がる。
・ベロシティ(音の立ち上がりまでの速度)は、とりあえず80ぐらいで設定して、あとはお好みで。

 

下記、欽ちゃんの仮装大賞のような音が作れるPythonのサンプルコードです。

 

 肝心なPython部分がざっくりすぎるのでアレですが、正直Python書くよりも環境周りの知識のなさにものすごく苦戦しました。。

楽器さえ繋げられればあとは楽しみながら試行錯誤できるはず!!

 

 

一応、来年のMaker Faire Tokyo2019に向けて、これらを使った新作を予定しております。ひとまず勉強せねばです。

合間にRaspberry Piもくもく会向けにライトなものも考えているので、どこかでTENORI-ONを持って出没するかもしれません。