Ticket #42366

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

Eröffnet am: 2021-05-23 01:27 Letztes Update: 2021-05-23 23:38

Auswertung:
Verantwortlicher:
Status:
Geschlossen
Priorität:
5 - Mittel
Schweregrad:
5 - Mittel
Lösung:
Gefixt
Datei:
Keine

Details

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

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

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

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

---------------------------
ERROR
---------------------------
The file is not a Standard MIDI file.

FILE: SMFileReader.mm
LINE: 664
INFO: 00000000 00000000
---------------------------
OK   
---------------------------

Windows版の以下チケットをマージする。

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

Ticket-Verlauf (3/5 Historien)

2021-05-23 01:27 Aktualisiert von: yknk
  • New Ticket "macOS版 RIFF形式MIDIデータファイルの読み込み対応" created
2021-05-23 01:27 Aktualisiert von: yknk
Kommentar

原因

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

2021-05-23 01:29 Aktualisiert von: yknk
Kommentar

対策方針

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

対策

SMFileReader

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

SMFileReader::Load

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

SMFileReader::_SkipRIFFHeader

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

SMFileReader::_ReadChunkHeader

チャンクタイプがMThd"でなかった場合のエラーメッセージを、 "Invalid data found."から"The file is not a Standard MIDI file."に変更。

SMFileReader::_OpenFile

ファイル先頭4byteが"MThd"であることのチェック処理を削除。

2021-05-23 23:38 Aktualisiert von: yknk
  • Status Update from Offen to Geschlossen
  • Lösung Update from Keine to Gefixt

Dateianhangliste

Keine Anhänge

Bearbeiten

Please login to add comment to this ticket » Anmelden