Bug #91
(V6.63)曲尾到達時に巻き戻しシークを行うと、その後の再生で無音演奏となる
ステータス: | 終了 | 開始日: | 2013/12/18 | |
---|---|---|---|---|
優先度: | 通常 | 期日: | 2013/12/18 | |
担当者: | - | 進捗 %: | 100% | |
カテゴリ: | - | 作業時間の記録: | - | |
対象バージョン: | - |
説明
状況(2013.12.18)¶
V6.64にて対応済み。
(原因)
演奏が曲尾到達した際に、以下の処理を実施している。
①音源のクローズ処理を行う
②演奏開始ノートをNULLにクリアする
一方、巻き戻しシークのイベントが起こった場合は、シーク位置の演奏開始ノートが新たにセットされる。
今回の事象は、①の処理中に巻き戻しシークのイベントが発生するもので、そこで演算された演奏開始ノートが、その後に続く②の処理でクリアされるために発生した。
演奏開始ノートがNULLの場合、MIDI音源に発音メッセージを送信しない。
しかるに演奏開始時刻はシークポイントを堅持しているため、無音演奏という事態に陥った。
本件は、V6.33→V6.34で行った「タイマー停止時に適度なインターバルを与え、その後にMIDI音源のクローズを実施する」という対処により、
①に積極的な処理時間を与えることとなり、その結果発現しやすくなった。
しかし、あくまでも発現確率が高まっただけであり、V6.34で与えたインターバルが真因ではない。
(対処)
演奏が曲尾に到達した時点で、即座に演奏開始ノートをNULLにクリアし、その後でインターバルを含む音源クローズを行うことにした。
これにより、シーク操作が音源クローズ中に起こっても、その演算結果である演奏開始ノートがクリアされることはなくなった。
(補足)
本対処とは直接の関係は無いが、V6.64よりビルド環境をVS2005からVS2010に変更した。
これにより、以降の対応OSは、XP/7/8/8.1となる。
V6.60でのユニコード対応により、98/Me/2000のサポートが難しくなったことがきっかけである。
概要(2013.12.18)¶
V6.41~V6.63で発生を確認しましたが、V6.26では発生しないようです。
【現象】
コマンド*MARK""のある曲の再生中、最後に到達した瞬間にシークバーの[<]をクリックすると、
次に鍵盤をクリックして再生した際に無音となる。タイミングはかなりシビア。
音が消えても、一度停止して再開すると再び音が出る。
【再現コード】
dddd *MARK"" dddd
【追記】
本件の不具合を発現させるためには*MARK""は必ずしも必要でなく、
以下の様な再現コードにおいても、曲尾到達タイミングで[BS]キーを押下して曲頭に巻き戻すと、
続く再生で同様に無音演奏となる。
dddd
関連するチケット
履歴
#1 Redmine Admin がほぼ11年前に更新
- 説明 を更新 (diff)