< PrevIndexNext >
debian で makeSMF を試す

2018年05月19日

 exiftool と LiveCode をいじっていたら、以前試した makeSMF のことを思い出した。 HyperCard の Play文から SMF ファイルを作る RunRevスクリプト。インターフェース部分を Linux 用に書き換えればエンジン部分はそのまま使えるはず。

 まずは makeSMF のスタックを持ってくる。 LiveCode 9 で起動したが、いくつかのボタンで異常終了した。なにしろ RuntimeRevolution 時代に作ったスタックだ。使えなくなったコマンドとかがあるのかも知れない。それとも 9.0 はまだ不安定なのか。そして MIDI を鳴らすために timidity をインストール。

 LiveCode のボタンスクリプトは、makeSMF で .mid ファイルを書き出したあと、shell( "timidity" && quote& filePath "e ) としてみた。おー、鳴るねぇ。 X23 内蔵スピーカーはひどいもんだが、外部スピーカーからは綺麗な音が出た。

 ただ前回試した時も思ったが、なんだかリバーブが効きすぎてる気がする。マックではそう感じないんだが。それと、makeSMF のスクリプトはファイルパスを渡すとそれに .mid を付けたファイルを作る仕様になっていた。なんでこんな作りにしたんだ俺。使いにくいぞ。

 今回 .rev ファイルを開こうとしてまたアプリケーションが無いと言われた。仕方ないのでプロパティの Open With で、/opt/livecode 以下にある "LiveCode Community.x86" のパスを指定する。この時パス文字列の前後をダブルクォーテーションで囲うのを忘れずに。このアプリケーションが空白文字を含むばっかりにいつもこの作業が必要になるのだけど、なんで改善しないかな。

 ヘルプ(スクリプトグラマーも)が html になっていた。致し方ないか。 CPU が 866、総メモリが 640 (もちろんどちらもGではなくM!)の X23 では LiveCode とブラウザを一緒に立ち上げるのは厳しいぞ。

 とまれ、これで Linux でも使えるじゃん、と思ったら、演奏が終わるまで制御が帰ってこない。ターミナルから timidity xx.mid した場合も、演奏が終わらないとプロンプトが出ない。演奏を途中で止めるにはターミナルをもうひとつ開いて $killall timidity するしかない。これは困った。 LiveCode で Stop ボタンを実装できない。

 対策としては、timidity に .wav や .aiff ファイルを作らせてそれを LiveCode で鳴らすとか、他のツールで鳴らすとかが考えられる。 LiveCode の Player オブジェクトが使えないか試そうとしたら LiveCode が異常終了して一気にやる気が失せた。またそのうち...

2018年05月19日

 今のところ timidity ですぐに制御が戻ってくる方法は見つからず。元々はファイル変換用のアプリらしいのでデーモンっぽい動作は無理かなぁ。 LiveCode の方で send - in を使ったら並行動作させられないかと思ったが、これも shell() が終わるまでスクリプトが止まってしまう。

2018年05月20日

 あれ、LiveCode が立ち上がってる時にファイラーでスタックファイルをダブルクリックするともうひとつ LiveCode が起動する。LiveCode ってスタックから起動することを推奨してないんだろうか。

2018年05月20日

 コマンドに & を付けて実行するとバックグラウンド動作になるらしい。ターミナルで試すとなるほど timidity を実行した端末で killall が出来る。ところが LiveCode で shell() に渡すコマンドに & を付けても、結局演奏が終わるまで帰ってこない。むー。



< PrevIndexNext >
inserted by FC2 system