こんにちはマイコン制御

May FORTH be with you.

OSとか互換性とか

今はWindows10をいじる時間が一番長くなってしまいましたが、自分のPC遍歴としてはMSXMacintoshAmigaIBM-PC(って言い方ももうしないか)って感じで、AmigaのあたりからOSやらハードやら並行して使ってました。
Macはとても好きだったんだけどIntelMacになったあたりからどんどん所有アプリが使えなくなってしまい、ハードとソフトを一緒に買い変えなくてはならなくなったり愛用してたフリーウェアが動かなくなったりして、反感覚えて使わなくなってしまった。
Amigaは元々先は無い覚悟で買ったので大切に大切に使っていたけれど、HDDが逝かれて対応するHDDも減ってしまい、熊本に来るときに泣く泣く手放した。

そんなこんなで下位互換性については凄く神経質になったし、何か新しいソフトを使っていこうとする時はWin、LinuxMacで動くやつを選ぶようになりました。そういう意味ではLinuxであればDIYで対応すりゃOKなのかもという気もするんですが、それは技術がある人の場合なので。
自分もまあずぶの素人ではないんじゃないかとは思うのですが、自分でパッチを書いたりはできないし、OS毎の挙動の違いとかライブラリの対応違いとか解決しようとしてると、そっちで頭が一杯になって本来やりたいことがどこかに行ってしまうことが多いので、ラクチンなことにこしたことはないです。

で、今回プログラム環境としてbasicに立ち返ってしまった、ってのは、選んだQB64とPureBasicは3つのOSに対応している(何かの拍子にまたMac使うかもしれないのでMacも無視してないです。)のと、ほとんど挙動に変わりがなく安定してる(Macは試してないけど)ことも大きいです。
音楽アプリとかもそういう観点で選んでいるんですが、最終的にはcygwinMinGWとかWINEとか使ったりすることになるんですけど(iMac買ったとき、一番初めにやったことはSortWindowsインストールしてACIDが動くかどうか確かめた事だった、そういえば)まあ概ね満足してます。BiduleはLinuxのときはWINEで動かしてますし。
www.renoise.com
www.plogue.com

音楽制作アプリとしては上の2つがあれば大体事足りるのですが、今回作りたくなったのはPSで出てたDEPTHとかグルーヴ地獄Vとか、音楽ソフトではMとかみたいな演奏できるシーケンサーみたいなものが欲しくなったから。
http://www.eyesmusic.jp/gif/m26.jpg
M for Mac OS X

PS DEPTH

グルーヴ地獄V PIG

ざっと頭の中で考えた限りでは、部品としてはサウンドルーチン、シーケンサールーチン、グラフィックルーチンに分離できて、まずはシーケンサーをテキスト表示でも良いから完成させるのが良いって事も判っているのですが、BasicいじるのはMSX-BASIC以来なので遊びがてら色々サンプル見たりいじったり、ゼロから機能を確認するため数行のプログラム書いてみたりしてました。
最初、音回りの確認と思ってQB64のフォーラムにあったサウンド関数のデモを動かしたらいきなりエラー出たり手直ししてもすぐ止まってしまったりしてガックリしてしまい、また自分オオカミ少年かよと思ったのだけど、よく見たらDeveloperフォーラムの次期バージョンでのデモだったことが判ったのでホッとしてQB64へのモチベーションが欠けずに済んだり。
QB64のサウンド周りだとサウンドポートに直接値を渡して音が出せるのが魅力的。ポート用の関数に値を渡せば複数の場合はボリューム調整してクリップしないようにしてくれたりして優れものなんですが、今のところモノでしか再生できないのと、サウンドファイルの再生とは別のもので、同時にファイル再生すると上のボリューム調整がファイルに働くせいかファイルの音がとても小さくなるみたい。
モノ再生でよければファイルの値を渡すかたちにすれば解決できるかも。
ファイルの再生の方は定位やボリュームを設定出来たりするし同時再生もいけるし、エフェクト無しのトラッカーだったら割合簡単に作れるかも。

グラフィック関連は一通りサンプル動かして、少し弄ったりするくらいだったけれど、BASICでHDで32bitカラーの画面をフルスクリーンで動かすと感動しますね。

あとシーケンサー部分ということで言語仕様の部分を見たのですが、命令、関数の拡張はされているけど、根本のところはQuickBasic4.5互換らしい。らしい、というのはQuickBasic4.5は触ってないんでよく判らない。だけど、グローバル関数とローカル関数があるのと構造体があるのとインクルードファイルが作れるというのはQuickBasic4.5からの機能だそうです。
関数型言語でなかったりオブジェクト指向でなかったりはしますが、この3つがあればまあ何とかなりそうな気がします。
あとQB64のIDEは見た目はこんなですが、サジェストこそ無いもののリアルタイムで文法チェックしてくれるしヘルプも充実してるし意外と使いやすいです。マウス要らずなのでノートPCとの相性も良かったり。
f:id:SenjiNiban:20160207232254j:plain
サブルーチンを表示しているところ
f:id:SenjiNiban:20160207233149j:plain