るうさん、お久しぶりです。 この追跡劇に、るうさんが参画して頂けるなんて心強いです。
> hmoの値が古い値をとっていたり、どこかで値が破壊されていたり、 > などという可能性はないでしょうか? ご存知だとは思いますが、第一引数のhmoは、MIDI音源をオープンした時のハンドルです。 オープン関数の戻り値で受けた後、プログラム上では一切いじっていません。
今回の局面で発行されるmidiOutShortMsg()は、2つのフェーズがあります。 ひとつは、演奏を開始する前にシーク結果としてその時点までの様々なコントロールを吐き出す部分。 いまひとつは、演奏を開始して刻々とデータを吐き出す部分です。
るうさんが解析してくれた結果を見ると、 第二引数がノートオンであるということから、後者の処理であると推論できます。 何故なら、前者のシーク結果の吐き出し処理では、音を一切出さないからです。
> どうやら、次のような呼び出しが発生した後、内部のCriticalSectionでコケているようでした。 > midiOutShortMsg(hmo, 0x003c4d9d); “内部のCriticalSectionでコケている”ということは、 midiOutShortMsg()の中でコケているということですか? もしかしたら、midiOutShortMsg()の次で落ちているということは考えられませんか?
今までのコケた操作を振り返ると[→]を押下したとたんに落ちたような記憶があります。 [→]を離すと演奏を開始し、[→]を押下すると演奏を停止してシークを始めます。 上記のノートオンは、演奏停止直前の最後のノートオンだった、 という推理は成り立つでしょうか? |