Update libopenmpt dev library to 0.4.0 (winold.vs2017)

This commit is contained in:
mazmazz 2019-01-02 02:21:04 -05:00
parent 953f5b6297
commit 7f18433059
17 changed files with 157 additions and 148 deletions

View file

@ -1,5 +1,3 @@
The OpenMPT code is licensed under the BSD license.
Copyright (c) 2004-2018, OpenMPT contributors
Copyright (c) 1997-2003, Olivier Lapicque
All rights reserved.
@ -24,4 +22,5 @@ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -5,140 +5,136 @@ Changelog {#changelog}
For fully detailed change log, please see the source repository directly. This
is just a high-level summary.
### libopenmpt 0.3.11 (2018-07-28)
### libopenmpt 0.4.0 (2018-12-23)
* [**Sec**] Crash with some malformed custom tunings in MPTM files (r10615).
* [**New**] libopenmpt now includes emulation of the OPL chip and thus plays
OPL instruments in S3M, C67 and MPTM files. OPL chip emulation volume can be
changed with the new ctl `render.opl.volume_factor`.
* [**New**] libopenmpt now supports C67 (CDFM Composer) files.
* [**New**] Autotools `configure` and plain `Makefile` now honor the variable
`CXXSTDLIB_PCLIBSPRIVATE` which serves the sole purpose of listing the
standard library (or libraries) required for static linking. The contents of
this variable will be put in `libopenmpt.pc` `Libs.private` and used for
nothing else. See \ref libopenmpt_c_staticlinking .
* [**New**] foo_openmpt: foo_openmpt now also works on Windows XP.
* [**New**] libopenmpt Emscripten builds now ship with MP3 support by
default, based on minimp3 by Lion (github.com/lieff).
* [**New**] libopenmpt: New ctl `play.at_end` can be used to change what
happens when the song end is reached:
* "fadeout": Fades the module out for a short while. Subsequent reads
after the fadeout will return 0 rendered frames. This is the default and
identical to the behaviour in previous libopenmpt versions.
* "continue": Returns 0 rendered frames when the song end is reached.
Subsequent reads will continue playing from the song start or loop
start. This can be used for custom loop logic, such as loop
auto-detection and longer fadeouts.
* "stop": Returns 0 rendered frames when the song end is reached.
Subsequent reads will return 0 rendered frames.
* [**New**] Add new metadata fields `"originaltype"` and `"originaltype_long"`
which allow more clearly reflecting what is going on with converted formats
like MO3 and GDM.
* [**New**] `Makefile` `CONFIG=emscripten` now can generate WebAssembly via
the additional option `EMSCRIPTEN_TARGET=wasm`.
* [**New**] Compiling for DOS is now experimentally supported via DJGPP GCC
7.2 or later.
* Channels whose volume envelope was playing at volume 0 while being moved to
a NNA background channel were cut off completely since libopenmpt 0.3.8.
* AMF (ASYLUM): Convert 7-bit panning to 8-bit panning for playback.
* [**Change**] minimp3: Instead of the LGPL-2.1-licensed minimp3 by KeyJ,
libopenmpt now uses the CC0-1.0-licensed minimp3 by Lion (github.com/lieff)
as a fallback if libmpg123 is unavailable. The `USE_MINIMP3` `Makefile`
option is gone and minimp3 will be used automatically in the `Makefile`
build system if libmpg123 is not available.
* [**Change**] openmpt123: openmpt123 now rejects `--output-type` in `--ui`
and `--batch` modes and also rejects `--output` in `--render` mode. These
combinations of options really made no sense and were rather confusing.
* [**Change**] Android NDK build system now uses libc++ (`c++_shared`) instead
of GNU libstdc++ (`gnustl_shared`), as recommended by Android NDK r16b.
* [**Change**] xmp-openmpt: `openmpt-mpg123.dll` is no longer optional and
must be placed into the same directory as `xmp-openmpt.dll`.
* [**Change**] in_openmpt: `openmpt-mpg123.dll` is no longer optional and must
be placed either into the directory of the player itself or into the same
directory as `in_openmpt.dll`. This is dependent on how the player loads its
plugins. For WinAMP 5, `openmpt-mpg123.dll` needs to be in the directory
which contains `winamp.exe`. `in_openmpt.dll` needs to be in the `Plugins`
directory.
* [**Change**] foo_openmpt: foo_openmpt is now packaged as a fb2k-component
package for easier installation.
* [**Change**] When building libopenmpt with MinGW-w64, it is now recommended
to use the posix thread model (as opposed to the win32 threading model),
because the former does support std::mutex while the latter does not. When
building with win32 threading model with the Autotools build system, it is
recommended to provide the `mingw-std-threads` package. Building libopenmpt
with MinGW-w64 without any `std::thread`/`std::mutex` support is deprecated
and support for such configurations will be removed in libopenmpt 0.5.
* [**Change**] `Makefile` `CONFIG=emscripten` now has 4 `EMSCRIPTEN_TARGET=`
settings: `wasm` generates WebAssembly, `asmjs128m` generates asm.js with a
fixed size 128MB heap, `asmjs` generates asm.js with a fixed default size
heap (as of Emscripten 1.38.11, this amounts to 16MB), `js` generates
JavaScript with dynamic heap growth and with compatibility for older VMs.
* [**Change**] libmodplug: Update public headers to libmodplug 0.8.8.5. This
adds support for kind-of automatic MODPLUG_EXPORT decoration on Windows.
### libopenmpt 0.3.10 (2018-06-17)
* [**Regression**] Support for Clang 3.4, 3.5 has been removed.
* [**Regression**] Building with Android NDK older than NDK r16b is not
supported any more.
* [**Regression**] Support for Emscripten versions older than 1.38.5 has been
removed.
* [**Regression**] Support for libmpg123 older than 1.14.0 has been removed.
* [**Regression**] Using MediaFoundation to decode MP3 samples is no longer
supported. Use libmpg123 or minimp3 instead.
* [**Regression**] libmodplug: Support for emulating libmodplug 0.8.7 API/ABI
has been removed.
* [**Bug**] xmp-openmpt: Sample rate and number of output channels were not
applied correctly when using per-file settings.
* [**Bug**] Internal mixer state was not initialized properly when initially
rendering in 44100kHz stereo format.
* [**Bug**] AMF: Undefined behaviour in loader code could lead to files
playing silent.
* [**Bug**] openmpt123: Prevent libsdl2 and libsdl from being enabled at the
same time because they conflict with each other.
* [**Bug**] libmodplug: Setting `SNDMIX_NORESAMPLING` in the C++ API always
resulted in linear interpolation instead of nearest neighbour
* Switching between instruments with portamento did not update the NNA
settings for the new instrument.
* FAR: Properly import volume commands.
### libopenmpt 0.3.9 (2018-04-29)
* [**Sec**] Possible write near address 0 in out-of-memory situations when
reading AMS files (r10149).
* [**Bug**] openmpt123: Fixed build failure in C++17 due to use of removed
feature `std::random_shuffle`.
* STM: Having both Bxx and Cxx commands in a pattern imported the Bxx command
incorrectly.
* IT: In Compatible Gxx mode, allow sample changes next to a tone portamento
effect if a previous sample has already stopped playing.
* IT: Fix broken volume envelopes with negative values as found in breakdwn.it
by Elysis.
* MOD: Slides and delayed notes are executed on every repetition of a row with
row delay (fixes "ode to protracker").
* XM: If the sustain point of the panning envelope is reached before key-off,
it is never released.
* XM: Do not default recall volume / panning for delayed instrument-less notes
* XM :E60 loop bug was not considered in song length calucation.
* S3M: Notes without instrument number use previous note's sample offset.
* Tighten M15 and MOD file rejection heuristics.
* J2B: Ignore frequency limits from file header. Fixes Medivo.j2b, broken
since libopenmpt-0.2.6401-beta17.
* STM: More accurate tempo calculation.
* STM: Better support for early format revisions (no such files have been
found in the wild, though).
* STM: Last character of sample name was missing.
* Speed up reading of truncated ULT files.
* ULT: Portamento import was sometimes broken.
* The resonant filter was sometimes unstable when combining low-volume
samples, low cutoff and high mixing rates.
### libopenmpt 0.3.8 (2018-04-08)
* [**Sec**] Possible out-of-bounds memory read with IT and MO3 files
containing many nested pattern loops (r10028).
* SFX: Work around bad conversions of the "Operation Stealth" soundtrack by
turning pattern breaks into note stops.
* IMF: Filter cutoff was upside down and the cutoff range was too small.
* ParamEq plugin center frequency was not limited correctly.
* Keep track of active SFx macro during seeking.
* The "note cut" duplicate note action did not volume-ramp the previously
playing sample.
* A song starting with non-existing patterns could not be played.
* DSM: Support restart position and 16-bit samples.
* DTM: Import global volume.
* MOD: Support notes in octave 2, like in FastTracker 2 (fixes DOPE.MOD).
* Do not apply Amiga playback heuristics to MOD files that have clearly been
written with a PC tracker.
* MPTM: More logical release node behaviour.
* Subsong search is now less thorough. It could previously find many subsongs
that are technically correct (unplayed rows at the beginning of patterns
that have been jumped over due to pattern breaks), but so far no real-world
module that would require such a thorough subsong detection was found. The
old mechanism caused way more false positives than intended with real-world
modules, though.
* Restrict the unpacked size of compressed DMF, IT, MDL and MO3 samples to
avoid huge allocations with malformed small files.
### libopenmpt 0.3.7 (2018-03-11)
* [**Bug**] libopenmpt did not build with NDK r13b on armeabi due to missing
`-latomic`.
* [**Bug**] xmp-openmpt: Sample rate and number of output channels were not
applied correctly when using per-file settings.
* [**Change**] foo_openmpt: foo_openmpt is now packaged as a fb2k-component
package for easier installation.
* IT: More accurate song length calculation for pattern loops that have no
start command and are following another pattern loop.
* IMF: Filter cutoff was upside down and the cutoff range was too small.
* MED: Correctly import patterns with less channels than the maximum used
amount. Import "STP" note stop command.
* DBM: Key Off and Set Envelope Position were imported incorrectly.
High sample offset (E7x) is now supported.
* DIGI / DBM: Arpeggio should not return to base note at end of row.
* Some filter changes through MIDI macros were not applied if the note volume
was set to 0 on the same row.
### libopenmpt 0.3.6 (2018-02-03)
* [**Sec**] Possible out-of-bounds memory read with malformed STP files.
(r9576)
* [**Bug**] Small memory leak with malformed STP files.
* STM: Accurate emulation of Scream Tracker 2 tempo mode.
* STM: Better support for early format revisions (no such files have been
found in the wild, though).
* Fine volume slides are now supported when seeking with seek.sync_samples=1
enabled.
### libopenmpt 0.3.5 (2018-01-28)
* [**New**] Support MOD files from the Inconexia demo by Iguana.
* [**Bug**] xmp-openmpt: Saved settings were not applied instantly.
* XM E60 loop bug was not considered in song length calucation.
* Tighten M15 and MOD file rejection heuristics.
* J2B: Ignore frequency limits from file header. Fixes Medivo.j2b, broken
since libopenmpt-0.2.6401-beta17.
* ParamEq plugin center frequency was not limited correctly.
* libopenmpt_ext C API was not included in the documentation.
### libopenmpt 0.3.4 (2017-12-17)
* IT: Fix broken volume envelopes with negative values as found in breakdwn.it
by Elysis.
### libopenmpt 0.3.3 (2017-11-19)
* [**New**] foo_openmpt: foo_openmpt now also works on Windows XP.
* [**Bug**] All VS2015 and VS2017 project files targetting Windows XP did not
set compiler option `/Zc:threadSafeInit-` which caused at least the player
plugins `in_openmpt` and `xmp-openmpt` to fail to load.
### libopenmpt 0.3.2 (2017-11-04)
* [**New**] Autotools `configure` and plain `Makefile` now honor the variable
`CXXSTDLIB_PCLIBSPRIVATE` which serves the sole purpose of listing the
standard library (or libraries) required for static linking. The contents of
this variable will be put in `libopenmpt.pc` `Libs.private` and used for
nothing else. See \ref libopenmpt_c_staticlinking .
* [**Change**] Windows bin and dev release packages now use zip archives
instead of 7z archives as it had originally been intended for the 0.3.0
release.
* [**Change**] openmpt123: The following combinations of options are now
deprecated because they made no real sense in the first place:
`--render --output`, `--ui --output-type`, `--batch --output-type`
* [**Bug**] libopenmpt did not build on Android NDK 15c (and possibly
other versions between 12b and 15c as well).
* IT: In Compatible Gxx mode, allow sample changes next to a tone portamento
effect if a previous sample has already stopped playing.
* MOD: Slides and delayed notes are executed on every repetition of a row with
row delay (fixes "ode to protracker").
### libopenmpt 0.3.1 (2017-09-28)
* [**Bug**] Windows: libopenmpt resource did not compile for release versions.
### libopenmpt 0.3.0 (2017-09-27, not released)
### libopenmpt 0.3 (2017-09-27)
* [**New**] New error handling functionality in the C API, which in particular
allows distinguishing potentially transient out-of-memory errors from parse

View file

@ -167,8 +167,8 @@
/*! \defgroup libopenmpt_c libopenmpt C */
/*! \addtogroup libopenmpt_c
@{
*/
* @{
*/
#ifdef __cplusplus
extern "C" {
@ -189,19 +189,19 @@ LIBOPENMPT_API uint32_t openmpt_get_library_version(void);
*/
LIBOPENMPT_API uint32_t openmpt_get_core_version(void);
/*! Return a verbose library version string from openmpt_get_string(). \deprecated Please use \code "library_version" \endcode directly. */
/*! Return a verbose library version string from openmpt_get_string(). \deprecated Please use `"library_version"` directly. */
#define OPENMPT_STRING_LIBRARY_VERSION LIBOPENMPT_DEPRECATED_STRING( "library_version" )
/*! Return a verbose library features string from openmpt_get_string(). \deprecated Please use \code "library_features" \endcode directly. */
/*! Return a verbose library features string from openmpt_get_string(). \deprecated Please use `"library_features"` directly. */
#define OPENMPT_STRING_LIBRARY_FEATURES LIBOPENMPT_DEPRECATED_STRING( "library_features" )
/*! Return a verbose OpenMPT core version string from openmpt_get_string(). \deprecated Please use \code "core_version" \endcode directly. */
/*! Return a verbose OpenMPT core version string from openmpt_get_string(). \deprecated Please use `"core_version"` directly. */
#define OPENMPT_STRING_CORE_VERSION LIBOPENMPT_DEPRECATED_STRING( "core_version" )
/*! Return information about the current build (e.g. the build date or compiler used) from openmpt_get_string(). \deprecated Please use \code "build" \endcode directly. */
/*! Return information about the current build (e.g. the build date or compiler used) from openmpt_get_string(). \deprecated Please use `"build"` directly. */
#define OPENMPT_STRING_BUILD LIBOPENMPT_DEPRECATED_STRING( "build" )
/*! Return all contributors from openmpt_get_string(). \deprecated Please use \code "credits" \endcode directly. */
/*! Return all contributors from openmpt_get_string(). \deprecated Please use `"credits"` directly. */
#define OPENMPT_STRING_CREDITS LIBOPENMPT_DEPRECATED_STRING( "credits" )
/*! Return contact information about libopenmpt from openmpt_get_string(). \deprecated Please use \code "contact" \endcode directly. */
/*! Return contact information about libopenmpt from openmpt_get_string(). \deprecated Please use `"contact"` directly. */
#define OPENMPT_STRING_CONTACT LIBOPENMPT_DEPRECATED_STRING( "contact" )
/*! Return the libopenmpt license from openmpt_get_string(). \deprecated Please use \code "license" \endcode directly. */
/*! Return the libopenmpt license from openmpt_get_string(). \deprecated Please use `"license"` directly. */
#define OPENMPT_STRING_LICENSE LIBOPENMPT_DEPRECATED_STRING( "license" )
/*! \brief Free a string returned by libopenmpt
@ -503,7 +503,7 @@ LIBOPENMPT_API void * openmpt_error_func_errno_userdata( int * error );
* \remarks openmpt_could_open_probability() expects the complete file data to be eventually available to it, even if it is asked to just parse the header. Verification will be unreliable (both false positives and false negatives), if you pretend that the file is just some few bytes of initial data threshold in size. In order to really just access the first bytes of a file, check in your callback functions whether data or seeking is requested beyond your initial data threshold, and in that case, return an error. openmpt_could_open_probability() will treat this as any other I/O error and return 0.0. You must not expect the correct result in this case. You instead must remember that it asked for more data than you currently want to provide to it and treat this situation as if openmpt_could_open_probability() returned 0.5.
* \sa \ref libopenmpt_c_fileio
* \sa openmpt_stream_callbacks
* \deprecated Please use openmpt_module_could_open_probability2().
* \deprecated Please use openmpt_could_open_probability2().
* \since 0.3.0
*/
LIBOPENMPT_API LIBOPENMPT_DEPRECATED double openmpt_could_open_probability( openmpt_stream_callbacks stream_callbacks, void * stream, double effort, openmpt_log_func logfunc, void * user );
@ -520,7 +520,7 @@ LIBOPENMPT_API LIBOPENMPT_DEPRECATED double openmpt_could_open_probability( open
* \remarks openmpt_could_open_probability() expects the complete file data to be eventually available to it, even if it is asked to just parse the header. Verification will be unreliable (both false positives and false negatives), if you pretend that the file is just some few bytes of initial data threshold in size. In order to really just access the first bytes of a file, check in your callback functions whether data or seeking is requested beyond your initial data threshold, and in that case, return an error. openmpt_could_open_probability() will treat this as any other I/O error and return 0.0. You must not expect the correct result in this case. You instead must remember that it asked for more data than you currently want to provide to it and treat this situation as if openmpt_could_open_probability() returned 0.5.
* \sa \ref libopenmpt_c_fileio
* \sa openmpt_stream_callbacks
* \deprecated Please use openmpt_module_could_open_probability2().
* \deprecated Please use openmpt_could_open_probability2().
*/
LIBOPENMPT_API LIBOPENMPT_DEPRECATED double openmpt_could_open_propability( openmpt_stream_callbacks stream_callbacks, void * stream, double effort, openmpt_log_func logfunc, void * user );
@ -1120,7 +1120,9 @@ LIBOPENMPT_API const char * openmpt_module_get_metadata_keys( openmpt_module * m
* \param key Metadata item key to query. Use openmpt_module_get_metadata_keys to check for available keys.
* Possible keys are:
* - type: Module format extension (e.g. it)
* - type_long: Tracker name associated with the module format (e.g. Impulse Tracker)
* - type_long: Format name associated with the module format (e.g. Impulse Tracker)
* - originaltype: Module format extension (e.g. it) of the original module in case the actual type is a converted format (e.g. mo3 or gdm)
* - originaltype_long: Format name associated with the module format (e.g. Impulse Tracker) of the original module in case the actual type is a converted format (e.g. mo3 or gdm)
* - container: Container format the module file is embedded in, if any (e.g. umx)
* - container_long: Full container name if the module is embedded in a container (e.g. Unreal Music)
* - tracker: Tracker that was (most likely) used to save the module file, if known
@ -1397,9 +1399,14 @@ LIBOPENMPT_API const char * openmpt_module_highlight_pattern_row_channel( openmp
* - load.skip_subsongs_init: Set to "1" to avoid pre-initializing sub-songs. Skipping results in faster module loading but slower seeking.
* - seek.sync_samples: Set to "1" to sync sample playback when using openmpt_module_set_position_seconds or openmpt_module_set_position_order_row.
* - subsong: The current subsong. Setting it has identical semantics as openmpt_module_select_subsong(), getting it returns the currently selected subsong.
* - play.at_end: Chooses the behaviour when the end of song is reached:
* - "fadeout": Fades the module out for a short while. Subsequent reads after the fadeout will return 0 rendered frames.
* - "continue": Returns 0 rendered frames when the song end is reached. Subsequent reads will continue playing from the song start or loop start.
* - "stop": Returns 0 rendered frames when the song end is reached. Subsequent reads will return 0 rendered frames.
* - play.tempo_factor: Set a floating point tempo factor. "1.0" is the default tempo.
* - play.pitch_factor: Set a floating point pitch factor. "1.0" is the default pitch.
* - render.resampler.emulate_amiga: Set to "1" to enable the Amiga resampler for Amiga modules. This emulates the sound characteristics of the Paula chip and overrides the selected interpolation filter. Non-Amiga module formats are not affected by this setting.
* - render.resampler.emulate_amiga: Set to "1" to enable the Amiga resampler for Amiga modules. This emulates the sound characteristics of the Paula chip and overrides the selected interpolation filter. Non-Amiga module formats are not affected by this setting.
* - render.opl.volume_factor: Set volume factor applied to synthesized OPL sounds, relative to the default OPL volume.
* - dither: Set the dither algorithm that is used for the 16 bit versions of openmpt_module_read. Supported values are:
* - 0: No dithering.
* - 1: Default mode. Chosen by OpenMPT code, might change.
@ -1432,8 +1439,8 @@ LIBOPENMPT_API int openmpt_module_ctl_set( openmpt_module * mod, const char * ct
#endif
/*!
@}
*/
* @}
*/
#endif /* LIBOPENMPT_H */

View file

@ -150,7 +150,7 @@ public:
exception & operator = ( const exception & other ) noexcept;
exception & operator = ( exception && other ) noexcept;
virtual ~exception() noexcept;
virtual const char * what() const noexcept;
const char * what() const noexcept override;
}; // class exception
#if defined(_MSC_VER)
#pragma warning(pop)
@ -173,19 +173,19 @@ LIBOPENMPT_CXX_API std::uint32_t get_core_version();
namespace string {
//! Return a verbose library version string from openmpt::string::get(). \deprecated Please use \code "library_version" \endcode directly.
//! Return a verbose library version string from openmpt::string::get(). \deprecated Please use `"library_version"` directly.
LIBOPENMPT_DEPRECATED static const char library_version LIBOPENMPT_ATTR_DEPRECATED [] = "library_version";
//! Return a verbose library features string from openmpt::string::get(). \deprecated Please use \code "library_features" \endcode directly.
//! Return a verbose library features string from openmpt::string::get(). \deprecated Please use `"library_features"` directly.
LIBOPENMPT_DEPRECATED static const char library_features LIBOPENMPT_ATTR_DEPRECATED [] = "library_features";
//! Return a verbose OpenMPT core version string from openmpt::string::get(). \deprecated Please use \code "core_version" \endcode directly.
//! Return a verbose OpenMPT core version string from openmpt::string::get(). \deprecated Please use `"core_version"` directly.
LIBOPENMPT_DEPRECATED static const char core_version LIBOPENMPT_ATTR_DEPRECATED [] = "core_version";
//! Return information about the current build (e.g. the build date or compiler used) from openmpt::string::get(). \deprecated Please use \code "build" \endcode directly.
//! Return information about the current build (e.g. the build date or compiler used) from openmpt::string::get(). \deprecated Please use `"build"` directly.
LIBOPENMPT_DEPRECATED static const char build LIBOPENMPT_ATTR_DEPRECATED [] = "build";
//! Return all contributors from openmpt::string::get(). \deprecated Please use \code "credits" \endcode directly.
//! Return all contributors from openmpt::string::get(). \deprecated Please use `"credits"` directly.
LIBOPENMPT_DEPRECATED static const char credits LIBOPENMPT_ATTR_DEPRECATED [] = "credits";
//! Return contact information about libopenmpt from openmpt::string::get(). \deprecated Please use \code "contact" \endcode directly.
//! Return contact information about libopenmpt from openmpt::string::get(). \deprecated Please use `"contact"` directly.
LIBOPENMPT_DEPRECATED static const char contact LIBOPENMPT_ATTR_DEPRECATED [] = "contact";
//! Return the libopenmpt license from openmpt::string::get(). \deprecated Please use \code "license" \endcode directly.
//! Return the libopenmpt license from openmpt::string::get(). \deprecated Please use `"license"` directly.
LIBOPENMPT_DEPRECATED static const char license LIBOPENMPT_ATTR_DEPRECATED [] = "license";
//! Get library related metadata.
@ -724,7 +724,9 @@ public:
\param key Metadata item key to query. Use openmpt::module::get_metadata_keys to check for available keys.
Possible keys are:
- type: Module format extension (e.g. it)
- type_long: Tracker name associated with the module format (e.g. Impulse Tracker)
- type_long: Format name associated with the module format (e.g. Impulse Tracker)
- originaltype: Module format extension (e.g. it) of the original module in case the actual type is a converted format (e.g. mo3 or gdm)
- originaltype_long: Format name associated with the module format (e.g. Impulse Tracker) of the original module in case the actual type is a converted format (e.g. mo3 or gdm)
- container: Container format the module file is embedded in, if any (e.g. umx)
- container_long: Full container name if the module is embedded in a container (e.g. Unreal Music)
- tracker: Tracker that was (most likely) used to save the module file, if known
@ -966,9 +968,14 @@ public:
- load.skip_subsongs_init: Set to "1" to avoid pre-initializing sub-songs. Skipping results in faster module loading but slower seeking.
- seek.sync_samples: Set to "1" to sync sample playback when using openmpt::module::set_position_seconds or openmpt::module::set_position_order_row.
- subsong: The current subsong. Setting it has identical semantics as openmpt::module::select_subsong(), getting it returns the currently selected subsong.
- play.at_end: Chooses the behaviour when the end of song is reached:
- "fadeout": Fades the module out for a short while. Subsequent reads after the fadeout will return 0 rendered frames.
- "continue": Returns 0 rendered frames when the song end is reached. Subsequent reads will continue playing from the song start or loop start.
- "stop": Returns 0 rendered frames when the song end is reached. Subsequent reads will return 0 rendered frames.
- play.tempo_factor: Set a floating point tempo factor. "1.0" is the default tempo.
- play.pitch_factor: Set a floating point pitch factor. "1.0" is the default pitch.
- render.resampler.emulate_amiga: Set to "1" to enable the Amiga resampler for Amiga modules. This emulates the sound characteristics of the Paula chip and overrides the selected interpolation filter. Non-Amiga module formats are not affected by this setting.
- render.opl.volume_factor: Set volume factor applied to synthesized OPL sounds, relative to the default OPL volume.
- dither: Set the dither algorithm that is used for the 16 bit versions of openmpt::module::read. Supported values are:
- 0: No dithering.
- 1: Default mode. Chosen by OpenMPT code, might change.

View file

@ -17,9 +17,9 @@
/*! \brief libopenmpt major version number */
#define OPENMPT_API_VERSION_MAJOR 0
/*! \brief libopenmpt minor version number */
#define OPENMPT_API_VERSION_MINOR 3
#define OPENMPT_API_VERSION_MINOR 4
/*! \brief libopenmpt patch version number */
#define OPENMPT_API_VERSION_PATCH 11
#define OPENMPT_API_VERSION_PATCH 0
/*! \brief libopenmpt pre-release tag */
#define OPENMPT_API_VERSION_PREREL ""
/*! \brief libopenmpt pre-release flag */