前回の追伸でお伝えしたとおり本家本元のKAWAIからこちらを遙かにしのぐ製品[1]が出されてしまいましたので、もはやこれまでということです。
まあ、もともと今回で終了なんですが。

最後はもう少し気合いを入れて書こうかなと当初は思っていましたが、まあ、軽くさらっといきます。
ここに突然やって来た人は#1#5の最後を見ていただければと思います。

プログラム

まずコントローラ基板には2つのマイコンが載っています。
1つをMP(MainhProcessor-24Fの方)、もう1つをCP(ControlProcessor-16Fの方)と名付けました。それぞれの役割分担について図にしました。
fig501
この図を踏まえてソースファイルを見ていただければ少しは分かりやすくなると思います。

【CP】
CPでやっているのは単純で送られてきたデータをそのままドライバへ流しているだけです。
3711のデータシート通りに送っています。
ただ4つの3711を並列に制御している点が少しややこしくしています。
データ信号線はそれぞれありますが、コントロールする信号線は共通になっています。
違うデータを送っているけど、制御のタイミングは全て同時ということです。
シリアル的なデータ送信を並べてパラレル的に行っているということでもあります。
おまけとして、ソレノイドをONにした後、OFFの情報が来ないとソレノイドが焼けてしまいます。
それを保護するために、100msecカウントしており、データの更新が内場合は、CP側で全てのソレノイドをOFFにするリセットを行います。
ただMP側からずっとONにする信号が流れてきた場合は焼けてしまいますが。

【MP】
MPは少しやっかいです。データの変換がわかりにくくなっています。
やっているのは次の通り。まずMIDIデータを受信し、解釈。ノートONのデータ(1チャンネル)のみ拾ってきます。

ノートONのデータの強弱を3段階に変換しつつ、ノート番号(どの鍵盤を押すか)をCP用に変換します(これが厄介)。
いまどの鍵が押されているかを格納しているデータに、今新しく押された鍵データを追加して(全ての鍵データを)CPに送りつけます。
この今の鍵の状態のデータはタイマーによって管理されており、強弱情報に合わせて一定時間でOFF(0)になります。
OFFになった鍵があれば、これも(全ての今の鍵データを)CPへ送信します。
ということを行っています。

CPへ送るデータはそのままCPで使えるように整形します。
4ビットパラレルを8ビットシリアルとして送る事になるのですが、文章では説明できないので表で表しました。
※ここからの説明は非常にわかりにくいです。ごめんなさい。

まずシステム内番号対応表を見てください。

tbl602
MIDIから送られてきたノートONのベロシティデータは変換され、ノート番号に対応するシステム内配列(=鍵の状態データ)のそれぞれの場所に格納されます。(音域外のデータは破棄します。)
新しいデータが来ると、データ更新フラグが立ち、変換・CP送信処理に入ります。
この変換は以下のデータ変換テーブルに従って行われます。
tbl601
CPからドライバ(3711)へは4bit×8のデータが送信されます。
MPからCPへ送るときは8bit×4の状態で送ります。
CPではこの8bitを4bitずつ、0~3、4~7の順にドライバ(3711)へ送り出します。
MPからCPへ送り出した順にCPからドライバへ送信します。
7411では送られた順にビットがシフトしていきます。つまり鍵盤上の右側から左方向へデータが入力されていくことになります。
以上のことを踏まえると、このデータ変換テーブルのようになります。
実際のアルゴリズムはソースを確認してください。

ざっくりですが、プログラムの説明をしてみました。
質問があればコメント等で聞いてください。

プログラムは公開します。
二次配布以外かつ個人利用の範囲で自由に使ってください。


紹介動画

残念ながら、紹介動画も作ってしまったので良かったら見てください。
KAWAIさんの動作と比べてみてください。

他の曲も収録したので、気が向いたらアップします。
他の曲も演奏しました。


KAWAIさんと張り合う気はないので、製作についてはここら辺で終わりにします。


#1~#6まで続けてきて、とんでもないオチもありましたが、
ここまでお付き合いいただき、ありがとうございました。

おわり

<-前

【参考文献・資料】
  1. ^ プレーヤーミニピアノ ― 河合楽器製作所