突如 MIDI 規格の勉強始めました。以前からやろうと思ってましたが先延ばしになっていました。
とりあえず今週末のてもちぶさた時の読み物は MIDI 解説で決まり。
解説ページを色々探しましたが、ここが私には一番わかりやすかったです。
http://www.borg.com/~jglatt/tech/midispec.htm
いちおう通信プロトコルのレイヤーわけが若干意識されてかかれています。
これが私には一番とっつきやすいです。
MIDI ってなんじゃろ?と恐怖に思ってましたが、自分語に訳してしまうとあんまり恐くなさそうです。
以下自分語:
物理層: MIDI ケーブルまわりのもろもろ
データリンク層: 31.25kbps ボーレートのシリアル通信
ネットワーク層: 基本的にブロードキャスト
トランスポート層: 強いてあげればシリアルのストップビットかな?
セッション層: コマンド送りつけ型。非同期。ACK は戻さない。通信エラーなんて無視無視。
プレゼンテーション層: 機械語に近い。命令 + パラメータ、命令によって語長が異なる
アプリケーション層: シンセ! と演奏!
うーん、すごく納得。
つまり非同期通信なので、レシーバである MIDI-CV を作るのは難しく皆さん苦労されているのですね。
うーん、すごく納得。
トランスポート層まではマイコン内蔵のハードウェアがやって割り込みをあげてくれるので楽チンです。
ハンドシェークなセッションもありますがほとんどは送りっぱなしで、しかしちょびっと状態を持って動くのでそこのところが若干面倒です。
一度ステートマシンを組んでしまえば、パーサ部分についてはあとはアプリに応じてデコーダを書くだけです。
しかしアプリレイヤで別の悩みが生じるかもしれません。
Chuckさんコメントありがとうございます。
状態ですぐに思いつくのはノートon/offとピッチベンド幅です。ピッチベンドは多分あまり心配ないと思いますが、ノートは通信エラーの取り扱いにノウハウがありそうです。送信側が時々全オフみたいな信号を送るのかな?いずれにせよ送信側も受信側もいろんなノウハウがありそうです。あるいは通信エラーなどまず起きないですか?
通常使用状態で通信エラーはまず起きないと思っています。起きるときはクロックがミスか温度特性かで合っていなくて、シリアルでエラーする感じじゃないかと想像しています。
ただ受信途中にケーブルが抜けるとかいうのはありそうです。データリンク層のエラーはマイコンのUARTペリフェラルで監視して、上位では MIDIメッセージの Active Sensing を利用して受信側で対処です。
をを、私の妄想計画であったMIDI口座だw。
いろいろとややこしいのでCV/GATEでいきます(逃)。とりあえずMIDが必要なのがCZ-5000、MS-2000、DX-7ぐらいなんでいいかなとも思います。
をを、私の妄想計画であったMIDI講座だw。
いろいろとややこしいのでCV/GATEでいきます(逃)。とりあえずMIDが必要なのがCZ-5000、MS-2000、DX-7ぐらいなんでいいかなとも思います。