トップページ > SYSTEM Yのページ > 全ユニットの紹介 > 087: クマはち > 088: MIO2 > 089: ホワイトボード No.1

088: MIO2

2011年11月30日(水)~

スポンサー広告

米本: まずはこの動画を。MIO2を使うとこんなことが出来ます!

米本: MIDIのノート情報をGATE信号として出力するユニット。これでMIDI機器からSYSTEM Yのユニットたちやアナログシンセをコントロール出来るようになったんだ。二見信洋さんとのコラボ作品の中では、大きなターニングポイントとなったユニットだね。

米本: MIDIチャンネルは1chで固定。一番下のドレミファソラシドと、1~8のアウトプットがそれぞれ対応しています。

二見: 名前は『MIDI IN to Other Output』を略して『MIOO』。ぬ、なんか格好ワルいから『MIO2』、みおツーと読みます。(´д`*)元々は開発コードネームだったんですが、米本さんがエラく気に入ってくれたので本採用となりました。

米本: お互いあの当時、某アニメに凝ってからね(笑)。

二見: そうですなあ、おいどんはAZにゃんが・・・(´д`*)

米本: あれ?そのキャラだったっけ? これ以上続けると別のマニア来そうだからやめて…(笑)。
ところで二見さん、↓これ覚えてる?

二見: うわあああ!10年くらい前に作ったパラレル送信機!(中央のユニットがインターフェース、パソコンの画面は改良したJAVAアプレット) 確か、JAVAアプレットで初めてアプリケーションを作ったんだったなあ。このアプレットも3000行を越す大作!良くやったなあ。全くJAVAとか知らなかったけど。

米本: そう、シリアルポートからの信号をパラレル送信したくてね。そうすればパソコンから自作楽器をコントロール出来るじゃない?もちろんMIDIで制御できれば理想だったけど、MIDIインターフェースなんて作れないと思ってたし。2002年ごろ、まずはトランジスタ技術に載っていた通信の工作記事を元に、ボード部分を私が工作して、comポートから制御するJAVAアプレットを二見さんが改良して。かなり良いところまで完成していて、自作楽器を自動演奏できてとても楽しかった。
その後、仕事が忙しかったりパソコンを買い換えてcomポートが無くなったりと、いろいろあって開発は途中で終わっちゃって。でも自作楽器を自動演奏させたい、MIDIで動かしたいって夢はずっと持ち続けていたんだ。
そして2010年の終わりごろから再び一緒に工作を始めて、BPMでのマイコン導入、"STARSHIP INVASION""BLUE FORMURA"の成功で、2011年夏、満を持して二見さんにMIDIでGATE信号を出力するユニットのアイデアを伝えたんだ。

二見:  いやー、マイコン始めて6ヶ月くらいしか経っていないモンに、出来るわけないと思ったし。 さらにねえ、いきなりMIDI INをやらせる人もいないよね。最初は比較的簡単なMIDI OUTから始めると思うんだけど…。

米本: INもOUTも同じようなもんだと認識しているあたり、当時の私の無知ぶりを証明してますな。ごめんごめん、ぎゃはははは(笑)。

二見: さて、ちょーMMでも話が出ていますが、子供の頃に出会ったカシオのキーボードに付いていた見知らぬコネクタが実はMIDIとの出会いだったのです。学校の皆に聞いても知らぬ存ぜぬのオンパレードで、独学、といっても、書籍を買って読むくらいで意味を理解しようと頑張っていました。だけど、おいどんの極度にワルい頭では理解できず、今に至ったワケなのであります。いやーあ、こういうのが作りたかったのよ、ほんとに。

米本: そうだよねぇ、MIDI関係の自作って敷居が高いよね…。

二見: なので、今回はマジメに取り組みました。っつーヵ、中学校からこのようにマジメに色々やっていれば、今頃は世界征服もメじゃなかったんでしょうなあ。

まず最初に問題だったのが、MIDIの仕様が判っていなかったコトでした。
米本さんの家にあるMIDI規格書を見ながら格闘する日々が続き、31250BPSのデータ転送が行われており、ノート情報は3バイトが基本だということが判りました。

UARTという全く知らぬ記号が書かれており、ナニコレ?と頭を悩ませました。
とりあえず判らないコトは置いておき、データを分解する方式を作りました。
※計算式※
MIDIデータ:1秒÷31250BPS=0.000032秒
      MIDIデータ1ビット当たり32μ秒
      (1バイトは8ビットです)
MIDIデータの1ビット送信に32μ秒かかるコトが判ったので、データを輪切りにするような方式を作ってみました。
マイコンのデバッグモニタ(パソコン上で動作確認すること)で見る限りは問題ないようなイゴきをしていたんだけれど・・・。実際に回路を組むと全く動作しない。更にプログラムの動きを確認するために、LCD(液晶ディスプレイ)も付けたんだけど、こちらにも何も表示されない。で、どうしたものかと米本さんに代○木のマックで相談したんですよ。ね?

米本: そうそう、二見さんはMIDI端子にLEDをつなげてピカピカ光らせたりと、ハード的なところからMIDIに入っていったから信号の捉え方が逆さまなんじゃないか?とピンときたの。

米本: 通常はHになっていてLになることで通信が始まると専門書には書いてあるのだけど、二見さんは通常はLでHになることで通信が始まると逆に思っているのでは?と。それとMIDIの受信回路部分に何等かのエラーがないか?と。ある程度MIDI関係の工作をしてきて、思っていた以上にシビアな面もあるからね。

二見: ソレを聞いたおいどんは、頭の中が爆発しました。データの送受信の方式が逆転しているとは全く知らず、ちょーMMで出てきた概念が覆されました。データが出ているときだけ電圧が出ているものと、かれこれ20年以上勘違いしていたワケです。
ついでに、MIDI受信用の回路も作ってもらって、受信形式を変更してやってみるも失敗。データ受信をするようになったけれど、全くデタラメなデータを受信している。当時は理由が判りませんでした。(今考えれば、タイマー割り込みによる分解をしていなかったので、実行時間にズレが生じたものと思われる)

どうしようもなかったので、今度はUARTという機能にチャレンジ。コレは良く調べると、昔のパソコンには標準装備だったRS-232Cに使われているものでした。今回使用したマイコンはPIC16F886で、このマイコンにはなんと、UARTが搭載されていました。 コレ幸いと、早速使うためのコンフィギュレーションを書き足して、もらった受信回路をつなげたら理想どおりにイゴきました。LCD上にも、来ているデータが表示されていました。
しかし、実はここからが難関でした。データを無事受信することが出来ましたが、そのデータの処理が大変。高級なMIDI機器から必ず出ているアクティブセンシングや、他のチャンネルから出るデータの回避など、時にはデータが来すぎてマイコンが暴走することもありました。

そんな中でも一番苦労したのは、カシオのキーボード特有の現象です。
【MIDIデータの例】
※表記の数字は16進数とし、ノートオフはベロシティ0とする。
チャンネル1のC0を出す:90 24 7F
チャンネル1のC0を消す:90 24 00
が基本的な動作と思っていました。しかし、カシオのキーボードはこのように出しました。
チャンネル1のC0を出す:90 24 7F
チャンネル1のC0を消す:24 00
???
チャンネルの部分がないのです。コレはとっても一大事。他の機器だと使えるのに、カシオ製だけ使えない。 なので、カシオのキーボードも使えるように、最初のチャンネル指定(90)を無視する方式にしました。しかし、コレはすべてのチャンネルから送られてくるデータを受信して、それがMIO2で通常のデータとして扱われてしまうものとなってしまう。 と、そこで米本さんに相談したんだよね。

米本: そうそう「すべてのチャンネルから送られてくるデータを受信」と聞いて、オムニモードのことだと思って、別にちゃんと動くならそれも良いと思ったのだけど、しかし他のMIDI機器と組み合わせることを考えると、チャンネルが設定できないと困ることにすぐに気付いて。いろいろと悩んでいるうちに、昔習ったランニングステータスのことを思い出して、もしかしたらこれか!とMIDI規格書や教科書を引っ張り出して調べ直して、二見さんに伝えたんだ。

二見: オムニモード??あ、なんか聞いたことがあるなあ、と一番最初に買ってもらったカシオのキーボードMT-540に付いていた説明書を思い出しました。確か、説明書の最後のほうにあったMIDI IMPLEMENTATION CHARTとやらにOMNI Xとか書いてあったなあ。うええ、オムニモードってこういうものだったのか。と感動しました。(合っているかどうかは判らない)
この時点で実際にイゴかしてみると、一応イゴくコトはイゴくのだが、時々ノートオフが利かなくなるコトや、ポリフォニック(和音)での操作が出来ない。でも、音符単品であれば問題なくイゴく、ということで米本さんに献上したんだよねえ。

米本: たしか11月ごろだったよね。で、せっかくだから12月のMake: Tokyo Meeting 07に間に合わせたかったので、プログラム的に多少問題あっても一気にケース詰めをして完成させたんだ。このMIO2での新しい試みは、LCDを接続するための端子を付けたことだったね。プログラムの動きを目で確認出来るのが画期的で。LCDは後に独立したユニットLCビジョンとして完成。
Makeの会場では、YAMAHAのQY-20でキーボードとシーケンサーを兼ねようと思ってたけど前日に故障。そこでパソコンのLogicから操作しようと試したら、単音だったら大丈夫だけど、ポリフォニック(和音)で動かすともたってね。またCubaseでは鳴りっぱなしになる現象が起きた。
取り合えずCASIOのMIDIキーボードからはうまく動かせたので、そのまま出展することにしたんだ。
ついにSYSTEM YをMIDIでコントロールってことで評判も結構良かったけど、ここが我々の限界かな…とも思ったりして。

二見: そう、その頃は自分のプログラム作成にも限界を感じていて、よく米本さんに弱音を吐いたものでした。技術のSカーブとかねえ。
で、Make終了後、研究所でミーティングをしたんだよね。もう一度MIDI企画書を見直し、ランニングステータスの処理に取り組んだんですよ。ココで出てきたランニングステータス、要は最初に届いたノートオン情報のチャンネルを一時的に格納しておくというもの。あ、カシオのキーボードでノートオフ情報にチャンネル情報が入っていなかったのはそういうことだったのか・・・えー、機構がメチャクチャ簡単やーん。あっという間にランニングステータスに関する機能が出来上がり。
Cubaseの鳴りっぱなしになる現象に関しては、米本さんがMIDIモニターでデータをチェックしたところ、なんとベロシティ0でのノートオフではなく、本当のノートオフ(8*H)が使われているコトが判ったので、これもまたノートオフ用のプログラムを改良しました。
しかし時々ノートオフが利かなくなるコトや、ポリフォニック(和音)での操作が出来ないの問題は解決できなかったけれど、米本さんがとりあえずコレで頑張る、と言ってくれたので、その時点でのチップをMIO2に載せて、しばらく様子見としたのです。

米本: そうなんだよね。それでもかなり動作は向上したので満足していたんだ。同時に鳴らす場合でも音をずらせば大丈夫だったし。だから2012年5月3日のライブで使用することにしたんだ。極力データの負荷をかけないようにして。

二見: そして、運命の日はやってくる。
米本さんがなんと、初めてMIO2を使ってライブを行うと聞いてね、もうね、なんというか、おいどん感無量ですタイ。嬉しくて涙がでちゃう。けれど、まだまだ問題点があるMIO2。なんとかしたいという思いで色々研究、改良を頑張っていました。 ライブ前日の2012年5月2日午前0時30分、なんと、MIO2の完璧バージョンが出来たのです。ゴイスー! その日の夕方に例の代○木のマックで受け渡しと動作確認をしたら、いやー、米本さん、目ん玉飛び出そうなくらい喜んでたねえ。

米本: そうそう凄い完璧な動作でね!実際ライブでも10分以上の曲を再生しても、一度もトラブルがなかったんだ。ほんと見事だね!

米本: 特にね、↑このMIO2と熊秀さんが作ってくれたクマはちとのタッグは強力でね、DAWソフトからMIDIのノート情報を出してMIO2へ、MIO2からクマはちにゲートを送ると、DAWソフトとクマはちが同期させられるんだ。これは凄いよ! ねっ 熊秀さん?

熊秀: うん、スゲぇ~!

二見: うわあ!熊秀さんだあ!(゜O゜;)

米本: ところで何が問題だったんだっけ?

二見: いやー、最初から大体見当が付いてはいたんだけれど、本当にコイツが悪さをしているとは思っていなかったんですよ。実は『LCD』だったんです。
LCDは、表示に時間がかかるんですね。MIDIデータ受信は割り込みという機能を使っているので、何事よりも優先されて受信するのですが、受信はするけれど、データの進入速度が速すぎて、必要なデータ格納がうまく出来ていなかったようなのです。 だけど、せっかく付けたLCDなので、データ表示モード(NoteON/OFFの表示)とライブでハードに使えるライブモードに切り替えられるようにしました。

米本: 二見さん、出会った最初の頃、楽器作りたかったって言ってたじゃない。これだけ電子楽器の重要なメカニズムであるMIDIを理解したってことは、ある意味夢が実現したとも言えるよね(^▽^)

二見: そうなんですよ。元々、自作で楽器が作りたかったんですね。コレだけMIDIが判れば、へっへっへ、ヤヴァいのを作るコトができますぜ、ダンナ。(☆ー☆)