11:58:06)追加された行はこの色です。削除された行はこの色です。[#ea21165c]V6.27にて対応済み。~(原因)~現在のMuseは、メンバー情報やフォーカス機構において、~ミュート指定したメンバーやフィンガーであってもノートOFFの命令はすべて音源に送っている。~その理由は、もしノートONの直後(まだノートOFFが送信されていない状態)で、~そのメンバーやフィンガーにミュートを掛けると、音が鳴り続けてしまうという事態を抑止するためである。両フィンガーとも通常に演奏させた場合を図解すると以下の様になる。なり、この時、OFF(3)が、ON(2)の音を止めてしまう。Museは同時刻のノートONとノートOFFがあった場合、先に全ての音止を送信してから、~間髪入れずノートONを送るように工夫している。~よって、pコマンドを使わないと、OFF(1)→OFF(3)→ON(2)という順番で音源に送信され、~OFF(3)は止めるべき相手がいないため、症状が出ない。~(対処)~譜面モニタの描画用に、1つの音符対となるOFFからONへのポインタを有していたため、それを活用して対応を行った。~各音符に新たなフラグ(音源へのノートON送信済みフラグ)を設け、ミュート対象のノートOFFを検出した際、~先のポインタで対となるノートONをたぐり、そのフラグが既に立っていたら音源に送信し、立っていなければ送信しない~という制御を組み込んだ。ccこの状態で、フォーカス機能を使って#A1だけ再生すると二つ目のcが消えます。~どうやらpコマンドを使って、同じメンバーで同じ音を同じタイミングで出すと消えるようです。[#ea21165c]V6.27にて対応済み。~(原因)~Museは演奏時のモタレを抑止するため、極力無駄なMIDIコマンドを音源に送信しないようにしている。~例えばペダルに関しては、直前にY0が指定されていた場合、続いてY0を指定してもカットされる。~ペダルの初期値はY0であるため、初めに検出したY0はカットされるというシーケンスになっていた。~しかし本件の様な記述の場合、実際の演奏時には先にY1が発行されるため、Y0をカットしてはいけない。~(対処)~1パス目の読込みではY0カットせず、後処理で実施している“連続する同値のコントロール(それはYに限らず)のカット処理(後送をカット)”~に縮退効果を委ねることにした。この対応では、演奏冒頭のY0指定をカットせず、すべからく音源に送信してしまう。~1パス目で先読みの処理を行えば理想的対応は可能だが、処理速度の低下を招く恐れがあるため~冒頭のY0カットは行わないことを制約として本対処を採用する。~~改めて考察してみると~他のコントロールコードも音源の初期値が明確でないことから、~初回のコマンドはカットしないようにしているため、~今回の仕様で、より全体の整合が図られたとも言える。[#l4a87ce0]V6.27にて対応済み。~ただし、真因が確実に特定できたとは言えない状況ではあるが、~状況証拠に基づいた対処を行い、リリースを実施する。(原因)~現在の所、直接の原因は不明。~間接原因としては、ビルド環境をVC6からVS2005に変更した事に因るが、~真因は別の所にあり、ビルド環境の変更が単にそれを顕在化させただけかもしれない。そこを優先的に割り当ててしまう。~というのが、現時点での最有力な真因候補となっている。(2012.11.24現在)~(対処)~文字列記憶域を確保する際、デリミッタ(\0)用に1バイト追加指定していたが、これを2バイトに変更した。次のバイトがヒープの外にならないようにするための対処として実施した。~(分析)~現象はWinXPのみに起こり、Win7では起こらない。~また、文字列が30文字である場合に限る(30より大きくても小さくても出現しない)が、~Museはテキストエリアへの表示の見栄えを考慮し、~左マージン用に、内部で先頭に半角1文字の空白を添えている。~さらに、文字列の終端にデリミッタ(\0)の1文字が加算されるため、~実質上は、32バイトの文字列の場合に現象が起こることになる。~・32バイトというキリの良いサイズでのみ出現~・WinXPのみでの出現~・VS2005でのビルドのみで出現~という限られた条件下での不具合となる。~再現性は高くなく、演奏でMARK文を通過する状況を何度か繰り返すと発生する。~平均的には、3〜10回に1回程度出現するが、極めて不安定である。~また、再現するデータも比較的複雑な(あるいはリロードに時間が掛かる)演奏に限られる模様。~本現象は、MARK文だけでなく、TEXT文やSTOP文でも出現する。~また表示されていない状態で、ウィンドウの最小化と最大化を行うなど~表示のリライトを実施しても再描画されないことから~ウィンドウへの描画メッセージのタイミング問題ではない。~また、問題の文字列(MARK文の内容)を、別の手段(デバッグライトなど)で表示させた場合、~現象が起こっている際にも正しく表示されることから~単純なメモリ破壊などの問題ではない。~過去のバージョンをVS2005でビルドし直し、WinXPで再現テストを実施した。~V5.70のバージョン以前は、テキスト文字列の記憶域を1バイト多く取り、~それを文字列区分(TEXT/MARK/STOP)のフラグとして利用していたため、~再現データのパラメータの方を1文字減らしてみた。これにより、同様の症状が出ることを確認した。~~こうしてバージョンを遡っていくと、~結果としてソースコードが現存しているV3.1においても症状が出ることが確認できた。~極めて基本的な部分に真因があることが予想される。