読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

Web Audio APIのモジュラー接続デモを作ってみる(14) - STED2風のシーケンス・エディタを実装、あとはSTED2のこととか

STED2を実際に動かし、その動きをまねるコードを書いている。非常にゆっくりとしているが。コードを書いている途中得た知見はQiitaにもぼちぼち書いてみている。

https://36.media.tumblr.com/4ef32b59da157b7f17d5af974c57424b/tumblr_nyhu85g1wn1s44dwzo1_1280.png

私が書いているものは、トラックはモノトラックだし、コマンド列というものを追加しているから純然たるMIDIシーケンサーであるSTED2とは違うのだが、ステップ入力のためのショートカット・キーやコマンドがよくできているので、その部分を真似ようとしている。使用するキーコードまでまねるかどうかはわからないが。あとはMIDIキーボードやマウスなので入力デバイスの対応、Undo/Redoも実装するつもりだから、多少複雑なコードにはなるけども。

お手本にしているSTED2をWindows 10で動かすとちょっと挙動が怪しいんだよね。もともとWindows版はα版だったからしょうがないけど。でもエディタの動きを追うには十分動いてくれているからよしとしよう。

昔Direct2Dを使って描画コードを書いてSTED2を改良しようと試みたことがあった。

blog.sfpgmr.net

例によって途中で壁にぶち当たって2回挫折してしまったが、そこそこ解析をしてそこそこコードいじりをしていたようである。このソフトウェアのデバッグをするために、SC88Proを買ったりしたんだよね。このSC88Pro、ほとんど使っていないけど私の宝物だ。たぶん手放すことはないだろう。壊れたらどうなるかわからんけど。。

STED2のコードはとても読みにくい。X68KでC言語でコードを書いていた人にとっては読みやすいものかもしれないが、X68Kのことはよく知らないので、まずIOCSコールのところでつまずく。さらにはソースコードにも癖があって、JSでuglifyした後のような変数の短さで、なかなか変数の名前を解析の糸口にするということができない。当時(1990年代前半)のコンパイラの制限もあったかもしれない。丁寧に見ていくと理解できるが、私が全容を把握するのは相当時間がかかりそうだ。また内部構造がややこしいというのも、エディタ自体の理解を妨げる要因かなぁと思う。Windows版だとこんな構造になっているのだ(ちょっとうろ覚えだけど、だいたいこんな感じ)。

background Layer 1 アプリコード X68K IOCS エミュレーションレイヤ Win32 API HWドライバエミュレーション

純然たるWinアプリにするにはエミュレーションレイヤーとを取っ払って、直にWin32 APIを叩くようにすべきなんだけどね。ただクロスプラットフォームのソフトウェアはだいたいこういうようなOSやハードの差異を吸収するようなレイヤーがあって、STED2ではこのエミュレーションレイヤが図らずもその差異を吸収するレイヤになっているんだよね。Linux版やMac版もおそらくエミュレーションレイヤをそれぞれのOSのAPIで作っていると思う。つまりSTED2はX68Kを介してクロスプラットフォーム化を達成しているのある。面白いよね。その歴史を踏襲してJS化するのも面白いなぁとも思うんだけど、やっぱり冗長だと思うんだよね。それって。 でもアプリコードが結構込み入っていているし、作った人しかわからないようなコードになっているので、手を出すのはとても難しい。IOCSやハードエミュレーションであれば資料が結構あるし、そこを真似るコードを書くほうが書きやすいし、また書き直すコード量も少なくて済むからね。

STED2のコードを丸ごとまねて、electronベースにしたいなぁとか思ったりもする。CコードをemscriptenかなんかでJS化して、ちゃんと動くようにする。WebMIDIを使えば実用的なレベルにできるんじゃないかなあと思うんだよね。もしくはStore Appで作るとかね。でもまあ私の半端なモチベーションと技術力では難しいだろうなぁ。