お世話になっております。 A.中村です。

On Fri, 11 Feb 2000 04:21:49 +0900
NISHIKAWA <nyasu / osk.3web.ne.jp> wrote:

> rubymidiで遊ぶために、昔買ったMIDIの本引っ張り出してきました。
> なにかの本で見かけた、カオスによる音楽、とか出来ますね。

なるほど。フツーに音楽をごりごり演奏するのには
リアルタイム性を考えるとちょっと苦しいかもな状態なので、
ヒネリの効いた用途(笑)がちょうどよさそうですね。

> 中村暁史> あ、いえ。今の所MidiIn用に1つ起こしているだけなので
> そうするとどこが時間食ってるんでしょう。
> コーディングとして速度をそんなに重視して書いたつもりはないので、
> 間抜けなコトしてるかもしれません。でも、そんなにコード量多くないんですよね。

うーん。「見えるところ」では多分そんなに食ってないんだと
思うんですけどね。どこ食っているのかなあ…
計測するにしても、Cレベルにせよrubyレベルにせよ
プロファイルして答えが出るのかどうか怪しいだろうし…

> swin.cでもWndProcから呼んでますからたぶん大丈夫では?
> 処理が遅かったとき、MIDIがどうなるかはわかりませんが...
> ってこれが問題なのですね。

微妙に違うように思います。WndProcっていっても
特にこっちから何か働きかけない限り
(osレベルで)シングルスレッドですよね。ってことは
rubyがなんかして忙しい最中にrubyインタプリタが
midi入力で殴られる恐れはないわけで。

一方APIにコールバック関数のアドレスを教えると
なにしていようがmidi入力が来たときに殴られて
しまいます。Cで記述した場合は「殴られても平気」
なように該当コールバック関数およびそれ以外の
関数&データを記述する自由(責任)はユーザーに
ありますが、rubyのメソッドでもそれが可能か?と
いうのが…多分駄目なんじゃないかと…ですよね…。
rubyのあずかり知らない所でもう一つのユーザーレベルスレッドが
発生していて、しかもそれがrubyに対して手を出そうと
しているようなもんであるわけですから。

あと、
> WIN32APIのようにコールバックが使えればいいのですが、呼び出されたときの
> 引数が可変なのでそういうわけにも行きません。ここにこそObject Instance?

この心配っつーか手間m(__)mを回避したかったってのもあります。
つまり、midiInのときとwaveInの時でそれぞれ別個に
拡張ライブラリを書かないとならないことになるので、

#wavInをrubyで処理できるとはちょっと思い難いですが(^^;。
#まぁあと5年10年たったら可能かもだけど。