View Issue Details

IDProjectCategoryView StatusLast Update
0001447OpenMPTFile Format Supportpublic2023-03-19 16:12
ReporterSaga Musix Assigned To 
Status newResolutionopen 
Target VersionOpenMPT 1.32 / libopenmpt 0.8 (goals) 
Summary0001447: Better playback of imported formats

Currently, import-only formats are converted to one of the editable formats (MOD, S3M, XM, IT or MPTM) in OpenMPT. This can cause many files to not be played correctly compared to libopenmpt. This limitation exists for at least two reasons:

  • Editing code only assumes editable formats in many places (e.g. checks if a UI feature should be enabled or not)
  • Discrepancies are to be expected when re-saving the file in an editable format, leading to nasty surprises if the user doesn't verify the file instantly.

How can we work around this?

  • Keep editing disabled while the file is in its original format. Not very usable.
  • Don't change MODTYPE of imported file until it is saved. Display a warning that the file might sound different now.

Things to keep in mind:

  • UI code should probably use CModDoc::GetModType instead of CSoundFIle::GetType() (make the latter private to prevent misuse in UI?), and CModDoc::GetModType should forward the result of CSoundFile::GetBestSaveFormat instead (careful: the return value of this may change based on editing in some formats)
  • How is autosave affected by this?
  • Some loaders use #ifdef MODPLUG_TRACKER and convert effects / envelopes / etc. differently for OpenMPT / libopenmpt. This would instead have to be done in ModConvert.cpp.
  • ...
TagsNo tags attached.
Has the bug occurred in previous versions?
Tested code revision (in case you know it)


There are no notes attached to this issue.

Issue History

Date Modified Username Field Change
2021-04-15 21:32 Saga Musix New Issue
2021-04-15 21:33 Saga Musix Target Version => OpenMPT / libopenmpt 0.7.0 (upgrade first)
2021-04-16 21:44 Saga Musix Description Updated
2023-03-19 16:12 Saga Musix Target Version OpenMPT / libopenmpt 0.7.0 (upgrade first) => OpenMPT 1.32 / libopenmpt 0.8 (goals)