OSDN Ticket Archive


Ticket #42234

Win版 チャンクサイズ不正の標準MIDIファイル読み込み対応

登録: 2021-05-12 00:22 最終更新: 2021-05-16 09:25

報告者:
yknk
担当者:
yknk
チケットの種類:
サポートリクエスト
状況:
完了
コンポーネント:
MIDITrail Ver.1.3.x for Windows
マイルストーン:
Version 1.3.3 for Windows (完了済み)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

MIDIファイル読み込み時にエラーが発生するとの報告があった。

  • #42056 Certain midi files cant be played? https://osdn.net/projects/miditrail/ticket/42056

ダウンロードしたファイルを展開して、MIDITrailでファイルを開くとエラーメッセージが表示される。

  • SimCity 2000 (1993).zip -> "Track 01.MID"

MIDITrail for Windows Ver 1.3.1 でファイルを開いた時のエラーは以下の通り。

---------------------------
ERROR
---------------------------
File read error.

FUNC: SMIDILib::SMFileReader::_ReadEvent
LINE: 411
INFO: 00000000 00000000
---------------------------
OK   
---------------------------

チケットの履歴

2021-05-12 00:22 更新者: yknk
  • 新しいチケット "Win版 チャンクサイズ不正の標準MIDIファイル読み込み対応" が作成されました
2021-05-12 00:22 更新者: yknk
コメント

原因

エラーが発生したMIDIファイル(Track 01.MID)は、 チャンクサイズ(トラックサイズ)が5919byteと宣言されているにも関わらず、実際はトラック終端まで5918byteであった。 残りの1byteを読み取ろうとして、エラーが発生していた。

ファイル末尾は以下の通り。

2F 00 トラック終端  ここまで5918byte
00    謎の1byte     ここまで5919byte
[EOF]

2021-05-12 00:22 更新者: yknk
コメント

対策方針

データ異常の可能性はあるが、トラック終端からチャンクサイズに到達するまでのデータを 読み飛ばすことで、ファイルを読み込めるようにする。

2021-05-12 00:23 更新者: yknk
コメント

対策

SMFileReader::_ReadTrackEvents

トラック終端を読み取った後に、指定されたチャンクサイズまでファイルを読み飛ばす処理を追加。

SMFileReader::_ReadEventMeta

トラック終端フラグ(pIsEndOfTrack)を設定するときの判定方法が誤っていた。 バグであるがこれまで実害はなかった。

  • 変更前:statusが0x2Fならばトラック終端
  • 変更後:typeが0x2Fならばトラック終端
2021-05-12 00:29 更新者: yknk
  • コンポーネントMIDITrail Ver.1.3.x for iOS から MIDITrail Ver.1.3.x for Windows に更新されました
2021-05-16 09:25 更新者: yknk
  • 状況オープン から 完了 に更新されました
  • 解決法なし から 修正済み に更新されました

添付ファイルリスト

添付ファイルはありません