Bundle libOpenMPT as a dynamic framework, which should be safe once again, now that there is only one version to bundle. Also, now it is using the versions of libvorbisfile and libmpg123 that are bundled with the player, instead of compiling minimp3 and stbvorbis. Signed-off-by: Christopher Snowhill <kode54@gmail.com>
100 lines
4.7 KiB
C++
100 lines
4.7 KiB
C++
/*
|
|
* mod_specifications.h
|
|
* --------------------
|
|
* Purpose: Mod specifications characterise the features of every editable module format in OpenMPT, such as the number of supported channels, samples, effects, etc...
|
|
* Notes : (currently none)
|
|
* Authors: OpenMPT Devs
|
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
|
*/
|
|
|
|
|
|
#pragma once
|
|
|
|
#include "openmpt/all/BuildSettings.hpp"
|
|
|
|
#include "Snd_defs.h"
|
|
#include "modcommand.h" // ModCommand::
|
|
#include "../soundlib/SoundFilePlayConfig.h" // mixlevel constants.
|
|
|
|
|
|
OPENMPT_NAMESPACE_BEGIN
|
|
|
|
|
|
struct CModSpecifications
|
|
{
|
|
/// Returns modtype corresponding to given file extension. The extension string
|
|
/// may begin with or without dot, e.g. both ".it" and "it" will be handled correctly.
|
|
static MODTYPE ExtensionToType(std::string ext); // (encoded in UTF8)
|
|
|
|
// Return true if format supports given note.
|
|
bool HasNote(ModCommand::NOTE note) const;
|
|
bool HasVolCommand(ModCommand::VOLCMD volcmd) const;
|
|
bool HasCommand(ModCommand::COMMAND cmd) const;
|
|
// Return corresponding effect letter for this format
|
|
char GetEffectLetter(ModCommand::COMMAND cmd) const;
|
|
char GetVolEffectLetter(ModCommand::VOLCMD cmd) const;
|
|
|
|
// NOTE: If changing order, update all initializations in .cpp file.
|
|
MODTYPE internalType; // Internal MODTYPE value
|
|
const char *fileExtension; // File extension without dot (encoded in UTF8).
|
|
ModCommand::NOTE noteMin; // Minimum note index (index starts from 1)
|
|
ModCommand::NOTE noteMax; // Maximum note index (index starts from 1)
|
|
PATTERNINDEX patternsMax;
|
|
ORDERINDEX ordersMax;
|
|
SEQUENCEINDEX sequencesMax;
|
|
CHANNELINDEX channelsMin; // Minimum number of editable channels in pattern.
|
|
CHANNELINDEX channelsMax; // Maximum number of editable channels in pattern.
|
|
uint32 tempoMinInt;
|
|
uint32 tempoMaxInt;
|
|
uint32 speedMin; // Minimum ticks per frame
|
|
uint32 speedMax; // Maximum ticks per frame
|
|
ROWINDEX patternRowsMin;
|
|
ROWINDEX patternRowsMax;
|
|
uint16 modNameLengthMax; // Meaning 'usable letters', possible null character is not included.
|
|
uint16 sampleNameLengthMax; // Ditto
|
|
uint16 sampleFilenameLengthMax; // Ditto
|
|
uint16 instrNameLengthMax; // Ditto
|
|
uint16 instrFilenameLengthMax; // Ditto
|
|
uint16 commentLineLengthMax; // not including line break, 0 for unlimited
|
|
SAMPLEINDEX samplesMax; // Max number of samples == Highest possible sample index
|
|
INSTRUMENTINDEX instrumentsMax; // Max number of instruments == Highest possible instrument index
|
|
MixLevels defaultMixLevels; // Default mix levels that are used when creating a new file in this format
|
|
FlagSet<SongFlags> songFlags; // Supported song flags
|
|
uint8 MIDIMappingDirectivesMax; // Number of MIDI Mapping directives that the format can store (0 = none)
|
|
uint8 envelopePointsMax; // Maximum number of points of each envelope
|
|
bool hasNoteCut; // True if format has note cut (^^).
|
|
bool hasNoteOff; // True if format has note off (==).
|
|
bool hasNoteFade; // True if format has note fade (~~).
|
|
bool hasReleaseNode; // Envelope release node
|
|
bool hasComments; // True if format has a comments field
|
|
bool hasIgnoreIndex; // Does "+++" pattern exist?
|
|
bool hasStopIndex; // Does "---" pattern exist?
|
|
bool hasRestartPos; // Format has an automatic restart order position
|
|
bool supportsPlugins; // Format can store plugins
|
|
bool hasPatternSignatures; // Can patterns have a custom time signature?
|
|
bool hasPatternNames; // Can patterns have a name?
|
|
bool hasArtistName; // Can artist name be stored in file?
|
|
bool hasDefaultResampling; // Can default resampling be saved? (if not, it can still be modified in the GUI but won't set the module as modified)
|
|
bool hasFractionalTempo; // Are fractional tempos allowed?
|
|
const char *commands; // An array holding all commands this format supports; commands that are not supported are marked with "?"
|
|
const char *volcommands; // Ditto, but for volume column
|
|
MPT_CONSTEXPRINLINE TEMPO GetTempoMin() const { return TEMPO(tempoMinInt, 0); }
|
|
MPT_CONSTEXPRINLINE TEMPO GetTempoMax() const { return TEMPO(tempoMaxInt, 0); }
|
|
};
|
|
|
|
|
|
namespace ModSpecs
|
|
{
|
|
extern const CModSpecifications & mptm;
|
|
extern const CModSpecifications & mod;
|
|
extern const CModSpecifications & s3m;
|
|
extern const CModSpecifications & s3mEx;
|
|
extern const CModSpecifications & xm;
|
|
extern const CModSpecifications & xmEx;
|
|
extern const CModSpecifications & it;
|
|
extern const CModSpecifications & itEx;
|
|
extern const std::array<const CModSpecifications *, 8> Collection;
|
|
}
|
|
|
|
|
|
OPENMPT_NAMESPACE_END
|