OSDN Ticket Archive


Ticket #42235

Win版 RIFF形式MIDIデータファイルの読み込み対応

登録: 2021-05-12 00:23 最終更新: 2021-05-16 09:26

報告者:
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でファイルを開くとエラーメッセージが表示される。

  • UFO - Enemy Unknown (1994).zip -> "01 - Tycoon DELUXE Theme.mid"
  • Transport Tycoon Deluxe (1995).zip -> "01 - Intro 1.mid"

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

---------------------------
ERROR
---------------------------
Invalid data found.

FUNC: SMIDILib::SMFileReader::_ReadChunkHeader
LINE: 189
INFO: 00000000 00000000
---------------------------
OK   
---------------------------

チケットの履歴

2021-05-12 00:23 更新者: yknk
  • 新しいチケット "Win版 RIFF形式MIDIデータファイルの読み込み対応" が作成されました
2021-05-12 00:24 更新者: yknk
コメント

原因

ファイルの拡張子は.midであるが、標準MIDIファイル(SMF)ではなく、RIFF(Resource Interchange File Format)であった。 ファイル先頭4byteが"MThd"ではなく"RIFF"であるため、不正データと判定していた。

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

対策方針

  • MIDIデータのサブチャンクが1つだけ格納されているシンプルなRIFFデータにのみ対応する。
  • RIFFのヘッダを読み飛ばしてから、通常の標準MIDIファイルの読み込み処理を実施する。
  • LISTチャンクデータには対応しない。

RIFFのMIDIデータの場合、ファイルの拡張子は".rmi"が一般的のようだが、 現時点では簡易的に対応するだけなので、ファイル選択ダイアログで拡張子".rmi"の ファイルを選択できるようにはしない。

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

対策

SMFileReader

RIFF読み取り用構造体の定義を追加。(SMFRIFFChunkHeader, SMFRIFFSubChunkHeader)

SMFileReader::Load

RIFFヘッダ読み飛ばし処理の呼び出しを追加。

SMFileReader::_SkipRIFFHeader

RIFFヘッダ読み飛ばし処理を追加。

2021-05-16 09:26 更新者: yknk
  • 状況オープン から 完了 に更新されました
  • 解決法なし から 修正済み に更新されました

添付ファイルリスト

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