Added scaffolding for a libopenmpt decoder.

This commit is contained in:
casey langen 2020-06-14 11:50:37 -07:00
parent bb8d874eb0
commit e3da6e457a
17 changed files with 5936 additions and 1 deletions

View File

@ -103,6 +103,7 @@ add_subdirectory(src/plugins/httpdatastream)
add_subdirectory(src/plugins/stockencoders)
add_subdirectory(src/plugins/supereqdsp)
add_subdirectory(src/plugins/gmedecoder)
add_subdirectory(src/plugins/libopenmptdecoder)
if (${FFMPEG_ENABLED} MATCHES "false")
message(STATUS "[ffmpeg] enabled = false")

2
src/3rdparty/bin vendored

@ -1 +1 @@
Subproject commit e718dafa576f9ca28688bf8110aab80d0dd6a3de
Subproject commit 268a9ee0cf592df197bf7983f2450a7eeacd2370

View File

@ -0,0 +1,7 @@
set (libopenmptdecoder_SOURCES
plugin.cpp
OpenMptDecoder.cpp
)
add_library(libopenmptdecoder SHARED ${libopenmptdecoder_SOURCES})
target_link_libraries(libopenmptdecoder ${musikcube_LINK_LIBS})

View File

@ -0,0 +1,69 @@
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2004-2019 musikcube team
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of the author nor the names of other contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; 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.
//
//////////////////////////////////////////////////////////////////////////////
#include "Constants.h"
#include "OpenMptDecoder.h"
#include <core/sdk/IDebug.h>
#include <cassert>
extern IDebug* debug;
OpenMptDecoder::OpenMptDecoder() {
}
OpenMptDecoder::~OpenMptDecoder() {
}
bool OpenMptDecoder::Open(musik::core::sdk::IDataStream *stream) {
}
void OpenMptDecoder::Release() {
delete this;
}
double OpenMptDecoder::SetPosition(double seconds) {
return 0.0;
}
double OpenMptDecoder::GetDuration() {
return 0.0;
}
bool OpenMptDecoder::GetBuffer(IBuffer *target) {
return false;
}
bool OpenMptDecoder::Exhausted() {
return false;
}

View File

@ -0,0 +1,55 @@
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2004-2019 musikcube team
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of the author nor the names of other contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; 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.
//
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include <core/sdk/constants.h>
#include <core/sdk/IDecoder.h>
using namespace musik::core::sdk;
class OpenMptDecoder: public musik::core::sdk::IDecoder {
public:
OpenMptDecoder();
~OpenMptDecoder();
virtual void Release() override;
virtual double SetPosition(double seconds) override;
virtual bool GetBuffer(IBuffer *buffer) override;
virtual double GetDuration() override;
virtual bool Open(musik::core::sdk::IDataStream *stream) override;
virtual bool Exhausted() override;
private:
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,181 @@
/*
* libopenmpt_config.h
* -------------------
* Purpose: libopenmpt public interface configuration
* Notes : (currently none)
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#ifndef LIBOPENMPT_CONFIG_H
#define LIBOPENMPT_CONFIG_H
/*! \defgroup libopenmpt libopenmpt */
/*! \addtogroup libopenmpt
@{
*/
/* provoke warnings if already defined */
#define LIBOPENMPT_API
#undef LIBOPENMPT_API
#define LIBOPENMPT_CXX_API
#undef LIBOPENMPT_CXX_API
/*! \brief Defined if libopenmpt/libopenmpt_stream_callbacks_buffer.h exists. */
#define LIBOPENMPT_STREAM_CALLBACKS_BUFFER
/*! \brief Defined if libopenmpt/libopenmpt_stream_callbacks_fd.h exists.
* \since 0.3
* \remarks
* Use the following to check for availability:
* \code
* #include <libopenmpt/libopenmpt.h>
* #if defined(LIBOPENMPT_STREAM_CALLBACKS_FD) || ((OPENMPT_API_VERSION_MAJOR == 0) && ((OPENMPT_API_VERSION_MINOR == 2) || (OPENMPT_API_VERSION_MINOR == 1)))
* #include <libopenmpt/libopenmpt_stream_callbacks_fd.h>
* #endif
* \endcode
*/
#define LIBOPENMPT_STREAM_CALLBACKS_FD
/*! \brief Defined if libopenmpt/libopenmpt_stream_callbacks_file.h exists.
* \since 0.3
* \remarks
* Use the following to check for availability:
* \code
* #include <libopenmpt/libopenmpt.h>
* #if defined(LIBOPENMPT_STREAM_CALLBACKS_FILE) || ((OPENMPT_API_VERSION_MAJOR == 0) && ((OPENMPT_API_VERSION_MINOR == 2) || (OPENMPT_API_VERSION_MINOR == 1)))
* #include <libopenmpt/libopenmpt_stream_callbacks_file.h>
* #endif
* \endcode
*/
#define LIBOPENMPT_STREAM_CALLBACKS_FILE
#if defined(__DOXYGEN__)
#define LIBOPENMPT_API_HELPER_EXPORT
#define LIBOPENMPT_API_HELPER_IMPORT
#define LIBOPENMPT_API_HELPER_PUBLIC
#define LIBOPENMPT_API_HELPER_LOCAL
#elif defined(_MSC_VER)
#define LIBOPENMPT_API_HELPER_EXPORT __declspec(dllexport)
#define LIBOPENMPT_API_HELPER_IMPORT __declspec(dllimport)
#define LIBOPENMPT_API_HELPER_PUBLIC
#define LIBOPENMPT_API_HELPER_LOCAL
#elif defined(__EMSCRIPTEN__)
#define LIBOPENMPT_API_HELPER_EXPORT __attribute__((visibility("default"))) __attribute__((used))
#define LIBOPENMPT_API_HELPER_IMPORT __attribute__((visibility("default"))) __attribute__((used))
#define LIBOPENMPT_API_HELPER_PUBLIC __attribute__((visibility("default"))) __attribute__((used))
#define LIBOPENMPT_API_HELPER_LOCAL __attribute__((visibility("hidden")))
#elif (defined(__GNUC__) || defined(__clang__)) && defined(_WIN32)
#define LIBOPENMPT_API_HELPER_EXPORT __declspec(dllexport)
#define LIBOPENMPT_API_HELPER_IMPORT __declspec(dllimport)
#define LIBOPENMPT_API_HELPER_PUBLIC __attribute__((visibility("default")))
#define LIBOPENMPT_API_HELPER_LOCAL __attribute__((visibility("hidden")))
#elif defined(__GNUC__) || defined(__clang__)
#define LIBOPENMPT_API_HELPER_EXPORT __attribute__((visibility("default")))
#define LIBOPENMPT_API_HELPER_IMPORT __attribute__((visibility("default")))
#define LIBOPENMPT_API_HELPER_PUBLIC __attribute__((visibility("default")))
#define LIBOPENMPT_API_HELPER_LOCAL __attribute__((visibility("hidden")))
#elif defined(_WIN32)
#define LIBOPENMPT_API_HELPER_EXPORT __declspec(dllexport)
#define LIBOPENMPT_API_HELPER_IMPORT __declspec(dllimport)
#define LIBOPENMPT_API_HELPER_PUBLIC
#define LIBOPENMPT_API_HELPER_LOCAL
#else
#define LIBOPENMPT_API_HELPER_EXPORT
#define LIBOPENMPT_API_HELPER_IMPORT
#define LIBOPENMPT_API_HELPER_PUBLIC
#define LIBOPENMPT_API_HELPER_LOCAL
#endif
#if defined(LIBOPENMPT_BUILD_DLL)
#define LIBOPENMPT_API LIBOPENMPT_API_HELPER_EXPORT
#elif defined(LIBOPENMPT_USE_DLL)
#define LIBOPENMPT_API LIBOPENMPT_API_HELPER_IMPORT
#else
#define LIBOPENMPT_API LIBOPENMPT_API_HELPER_PUBLIC
#endif
#ifdef __cplusplus
#define LIBOPENMPT_CXX_API LIBOPENMPT_API
#if defined(LIBOPENMPT_USE_DLL)
#if defined(_MSC_VER) && !defined(_DLL)
#error "C++ interface is disabled if libopenmpt is built as a DLL and the runtime is statically linked. This is not supported by microsoft and cannot possibly work. Ever."
#undef LIBOPENMPT_CXX_API
#define LIBOPENMPT_CXX_API LIBOPENMPT_API_HELPER_LOCAL
#endif
#endif
#if defined(__EMSCRIPTEN__)
/* Only the C API is supported for emscripten. Disable the C++ API. */
#undef LIBOPENMPT_CXX_API
#define LIBOPENMPT_CXX_API LIBOPENMPT_API_HELPER_LOCAL
#endif
#endif
/*!
@}
*/
/* C */
#if !defined(LIBOPENMPT_NO_DEPRECATE)
#if defined(__clang__)
#define LIBOPENMPT_DEPRECATED __attribute__((deprecated))
#elif defined(__GNUC__)
#define LIBOPENMPT_DEPRECATED __attribute__((deprecated))
#elif defined(_MSC_VER)
#define LIBOPENMPT_DEPRECATED __declspec(deprecated)
#else
#define LIBOPENMPT_DEPRECATED
#endif
#endif
#ifndef __cplusplus
#if !defined(LIBOPENMPT_NO_DEPRECATE)
LIBOPENMPT_DEPRECATED static const int LIBOPENMPT_DEPRECATED_STRING_CONSTANT = 0;
#define LIBOPENMPT_DEPRECATED_STRING( str ) ( LIBOPENMPT_DEPRECATED_STRING_CONSTANT ? ( str ) : ( str ) )
#else
#define LIBOPENMPT_DEPRECATED_STRING( str ) str
#endif
#endif
/* C++ */
#ifdef __cplusplus
#if defined(LIBOPENMPT_ASSUME_CPLUSPLUS)
#endif
#if !defined(LIBOPENMPT_NO_DEPRECATE)
#define LIBOPENMPT_ATTR_DEPRECATED [[deprecated]]
#else
#define LIBOPENMPT_ATTR_DEPRECATED
#endif
#endif
#include "libopenmpt_version.h"
#endif /* LIBOPENMPT_CONFIG_H */

View File

@ -0,0 +1,318 @@
/*
* libopenmpt_ext.h
* ----------------
* Purpose: libopenmpt public c interface for libopenmpt extensions
* Notes :
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#ifndef LIBOPENMPT_EXT_H
#define LIBOPENMPT_EXT_H
#include "libopenmpt_config.h"
#include "libopenmpt.h"
#ifdef __cplusplus
extern "C" {
#endif
/*!
* \page libopenmpt_ext_c_overview libopenmpt_ext C API
*
* libopenmpt_ext is included in all builds by default.
*
* \section libopenmpt-ext-c-detailed Detailed documentation
*
* \ref libopenmpt_ext_c
*
*/
/*! \defgroup libopenmpt_ext_c libopenmpt_ext C */
/*! \addtogroup libopenmpt_ext_c
* @{
*/
/*! \brief Opaque type representing a libopenmpt extension module
*/
typedef struct openmpt_module_ext openmpt_module_ext;
/*! \brief Construct an openmpt_module_ext
*
* \param stream_callbacks Input stream callback operations.
* \param stream Input stream to load the module from.
* \param logfunc Logging function where warning and errors are written. The logging function may be called throughout the lifetime of openmpt_module_ext. May be NULL.
* \param loguser User-defined data associated with this module. This value will be passed to the logging callback function (logfunc)
* \param errfunc Error function to define error behaviour. May be NULL.
* \param erruser Error function user context. Used to pass any user-defined data associated with this module to the logging function.
* \param error Pointer to an integer where an error may get stored. May be NULL.
* \param error_message Pointer to a string pointer where an error message may get stored. May be NULL.
* \param ctls A map of initial ctl values, see openmpt_module_get_ctls.
* \return A pointer to the constructed openmpt_module_ext, or NULL on failure.
* \remarks The input data can be discarded after an openmpt_module_ext has been constructed successfully.
* \sa openmpt_stream_callbacks
* \sa \ref libopenmpt_c_fileio
* \since 0.3.0
*/
LIBOPENMPT_API openmpt_module_ext * openmpt_module_ext_create( openmpt_stream_callbacks stream_callbacks, void * stream, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message, const openmpt_module_initial_ctl * ctls );
/*! \brief Construct an openmpt_module_ext
*
* \param filedata Data to load the module from.
* \param filesize Amount of data available.
* \param logfunc Logging function where warning and errors are written. The logging function may be called throughout the lifetime of openmpt_module_ext.
* \param loguser User-defined data associated with this module. This value will be passed to the logging callback function (logfunc)
* \param errfunc Error function to define error behaviour. May be NULL.
* \param erruser Error function user context. Used to pass any user-defined data associated with this module to the logging function.
* \param error Pointer to an integer where an error may get stored. May be NULL.
* \param error_message Pointer to a string pointer where an error message may get stored. May be NULL.
* \param ctls A map of initial ctl values, see openmpt_module_get_ctls.
* \return A pointer to the constructed openmpt_module_ext, or NULL on failure.
* \remarks The input data can be discarded after an openmpt_module_ext has been constructed successfully.
* \sa \ref libopenmpt_c_fileio
* \since 0.3.0
*/
LIBOPENMPT_API openmpt_module_ext * openmpt_module_ext_create_from_memory( const void * filedata, size_t filesize, openmpt_log_func logfunc, void * loguser, openmpt_error_func errfunc, void * erruser, int * error, const char * * error_message, const openmpt_module_initial_ctl * ctls );
/*! \brief Unload a previously created openmpt_module_ext from memory.
*
* \param mod_ext The module to unload.
*/
LIBOPENMPT_API void openmpt_module_ext_destroy( openmpt_module_ext * mod_ext );
/*! \brief Retrieve the openmpt_module handle from an openmpt_module_ext handle.
*
* \param mod_ext The extension module handle to convert
* \return An equivalent openmpt_module handle to pass to standard libopenmpt functions
* \since 0.3.0
*/
LIBOPENMPT_API openmpt_module * openmpt_module_ext_get_module( openmpt_module_ext * mod_ext );
/*! Retrieve a libopenmpt extension.
*
* \param mod_ext The module handle to work on.
* \param interface_id The name of the extension interface to retrieve (e.g. LIBOPENMPT_EXT_C_INTERFACE_PATTERN_VIS).
* \param interface Appropriate structure of interface function pointers which is to be filled by this function (e.g. a pointer to a openmpt_module_ext_interface_pattern_vis structure).
* \param interface_size Size of the interface's structure of function pointers (e.g. sizeof(openmpt_module_ext_interface_pattern_vis)).
* \return 1 on success, 0 if the interface was not found.
* \since 0.3.0
*/
LIBOPENMPT_API int openmpt_module_ext_get_interface( openmpt_module_ext * mod_ext, const char * interface_id, void * interface, size_t interface_size );
#ifndef LIBOPENMPT_EXT_C_INTERFACE_PATTERN_VIS
#define LIBOPENMPT_EXT_C_INTERFACE_PATTERN_VIS "pattern_vis"
#endif
/*! Pattern command type */
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_UNKNOWN 0
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_GENERAL 1
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_GLOBAL 2
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_VOLUME 3
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_PANNING 4
#define OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_PITCH 5
typedef struct openmpt_module_ext_interface_pattern_vis {
/*! Get pattern command type for pattern highlighting
*
* \param mod_ext The module handle to work on.
* \param pattern The pattern whose data should be retrieved.
* \param row The row from which the data should be retrieved.
* \param channel The channel from which the data should be retrieved.
* \return The command type in the effect column at the given pattern position (see OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_*)
* \sa openmpt_module_ext_interface_pattern_vis::get_pattern_row_channel_volume_effect_type
*/
int ( * get_pattern_row_channel_volume_effect_type ) ( openmpt_module_ext * mod_ext, int32_t pattern, int32_t row, int32_t channel );
/*! Get pattern command type for pattern highlighting
*
* \param mod_ext The module handle to work on.
* \param pattern The pattern whose data should be retrieved.
* \param row The row from which the data should be retrieved.
* \param channel The channel from which the data should be retrieved.
* \return The command type in the effect column at the given pattern position (see OPENMPT_MODULE_EXT_INTERFACE_PATTERN_VIS_EFFECT_TYPE_*)
* \sa openmpt_module_ext_interface_pattern_vis::get_pattern_row_channel_volume_effect_type
*/
int ( * get_pattern_row_channel_effect_type ) ( openmpt_module_ext * mod_ext, int32_t pattern, int32_t row, int32_t channel );
} openmpt_module_ext_interface_pattern_vis;
#ifndef LIBOPENMPT_EXT_C_INTERFACE_INTERACTIVE
#define LIBOPENMPT_EXT_C_INTERFACE_INTERACTIVE "interactive"
#endif
typedef struct openmpt_module_ext_interface_interactive {
/*! Set the current ticks per row (speed)
*
* \param mod_ext The module handle to work on.
* \param speed The new tick count in range [1, 65535].
* \return 1 on success, 0 on failure.
* \remarks The tick count may be reset by pattern commands at any time.
* \sa openmpt_module_get_current_speed
*/
int ( * set_current_speed ) ( openmpt_module_ext * mod_ext, int32_t speed );
/*! Set the current module tempo
*
* \param mod_ext The module handle to work on.
* \param tempo The new tempo in range [32, 512]. The exact meaning of the value depends on the tempo mode used by the module.
* \return 1 on success, 0 on failure.
* \remarks The tempo may be reset by pattern commands at any time. Use openmpt_module_ext_interface_interactive::set_tempo_factor to apply a tempo factor that is independent of pattern commands.
* \sa openmpt_module_get_current_tempo
*/
int ( * set_current_tempo ) ( openmpt_module_ext * mod_ext, int32_t tempo );
/*! Set the current module tempo factor without affecting playback pitch
*
* \param mod_ext The module handle to work on.
* \param factor The new tempo factor in range ]0.0, 4.0] - 1.0 means unmodified tempo.
* \return 1 on success, 0 on failure.
* \remarks Modifying the tempo without applying the same pitch factor using openmpt_module_ext_interface_interactive::set_pitch_factor may cause rhythmic samples (e.g. drum loops) to go out of sync.
* \sa openmpt_module_ext_interface_interactive::get_tempo_factor
*/
int ( * set_tempo_factor ) ( openmpt_module_ext * mod_ext, double factor );
/*! Gets the current module tempo factor
*
* \param mod_ext The module handle to work on.
* \return The current tempo factor.
* \sa openmpt_module_ext_interface_interactive::set_tempo_factor
*/
double ( * get_tempo_factor ) ( openmpt_module_ext * mod_ext );
/*! Set the current module pitch factor without affecting playback speed
*
* \param mod_ext The module handle to work on.
* \param factor The new pitch factor in range ]0.0, 4.0] - 1.0 means unmodified pitch.
* \return 1 on success, 0 on failure.
* \remarks Modifying the pitch without applying the the same tempo factor using openmpt_module_ext_interface_interactive::set_tempo_factor may cause rhythmic samples (e.g. drum loops) to go out of sync.
* \remarks To shift the pich by `n` semitones, the parameter can be calculated as follows: `pow( 2.0, n / 12.0 )`
* \sa openmpt_module_ext_interface_interactive::get_pitch_factor
*/
int ( * set_pitch_factor ) ( openmpt_module_ext * mod_ext, double factor );
/*! Gets the current module pitch factor
*
* \param mod_ext The module handle to work on.
* \return The current pitch factor.
* \sa openmpt_module_ext_interface_interactive::set_pitch_factor
*/
double ( * get_pitch_factor ) ( openmpt_module_ext * mod_ext );
/*! Set the current global volume
*
* \param mod_ext The module handle to work on.
* \param volume The new global volume in range [0.0, 1.0]
* \return 1 on success, 0 on failure.
* \remarks The global volume may be reset by pattern commands at any time. Use openmpt_module_set_render_param to apply a global overall volume factor that is independent of pattern commands.
* \sa openmpt_module_ext_interface_interactive::get_global_volume
*/
int ( * set_global_volume ) ( openmpt_module_ext * mod_ext, double volume );
/*! Get the current global volume
*
* \param mod_ext The module handle to work on.
* \return The current global volume in range [0.0, 1.0]
* \sa openmpt_module_ext_interface_interactive::set_global_volume
*/
double ( * get_global_volume ) ( openmpt_module_ext * mod_ext );
/*! Set the current channel volume for a channel
*
* \param mod_ext The module handle to work on.
* \param channel The channel whose volume should be set, in range [0, openmpt_module_get_num_channels()[
* \param volume The new channel volume in range [0.0, 1.0]
* \return 1 on success, 0 on failure (channel out of range).
* \remarks The channel volume may be reset by pattern commands at any time.
* \sa openmpt_module_ext_interface_interactive::get_channel_volume
*/
int ( * set_channel_volume ) ( openmpt_module_ext * mod_ext, int32_t channel, double volume );
/*! Get the current channel volume for a channel
*
* \param mod_ext The module handle to work on.
* \param channel The channel whose volume should be retrieved, in range [0, openmpt_module_get_num_channels()[
* \return The current channel volume in range [0.0, 1.0]
* \sa openmpt_module_ext_interface_interactive::set_channel_volume
*/
double ( * get_channel_volume ) ( openmpt_module_ext * mod_ext, int32_t channel );
/*! Set the current mute status for a channel
*
* \param mod_ext The module handle to work on.
* \param channel The channel whose mute status should be set, in range [0, openmpt_module_get_num_channels()[
* \param mute The new mute status. true is muted, false is unmuted.
* \return 1 on success, 0 on failure (channel out of range).
* \sa openmpt_module_ext_interface_interactive::get_channel_mute_status
*/
int ( * set_channel_mute_status ) ( openmpt_module_ext * mod_ext, int32_t channel, int mute );
/*! Get the current mute status for a channel
*
* \param mod_ext The module handle to work on.
* \param channel The channel whose mute status should be retrieved, in range [0, openmpt_module_get_num_channels()[
* \return The current channel mute status. 1 is muted, 0 is unmuted, -1 means the instrument was out of range
* \sa openmpt_module_ext_interface_interactive::set_channel_mute_status
*/
int ( * get_channel_mute_status ) ( openmpt_module_ext * mod_ext, int32_t channel );
/*! Set the current mute status for an instrument
*
* \param mod_ext The module handle to work on.
* \param instrument The instrument whose mute status should be set, in range [0, openmpt_module_get_num_instruments()[ if openmpt_module_get_num_instruments is not 0, otherwise in [0, openmpt_module_get_num_samples()[
* \param mute The new mute status. true is muted, false is unmuted.
* \return 1 on success, 0 on failure (instrument out of range).
* \sa openmpt_module_ext_interface_interactive::get_instrument_mute_status
*/
int ( * set_instrument_mute_status ) ( openmpt_module_ext * mod_ext, int32_t instrument, int mute );
/*! Get the current mute status for an instrument
*
* \param mod_ext The module handle to work on.
* \param instrument The instrument whose mute status should be retrieved, in range [0, openmpt_module_get_num_instruments()[ if openmpt_module_get_num_instruments is not 0, otherwise in [0, openmpt_module_get_num_samples()[
* \return The current instrument mute status. 1 is muted, 0 is unmuted, -1 means the instrument was out of range
* \sa openmpt_module_ext_interface_interactive::set_instrument_mute_status
*/
int ( * get_instrument_mute_status ) ( openmpt_module_ext * mod_ext, int32_t instrument );
/*! Play a note using the specified instrument
*
* \param mod_ext The module handle to work on.
* \param instrument The instrument that should be played, in range [0, openmpt_module_get_num_instruments()[ if openmpt_module_get_num_instruments is not 0, otherwise in [0, openmpt_module_get_num_samples()[
* \param note The note to play, in rage [0, 119]. 60 is the middle C.
* \param volume The volume at which the note should be triggered, in range [0.0, 1.0]
* \param panning The panning position at which the note should be triggered, in range [-1.0, 1.0], 0.0 is center.
* \return The channel on which the note is played. This can pe be passed to openmpt_module_ext_interface_interactive::stop_note to stop the note. -1 means that no channel could be allocated and the note is not played.
* \sa openmpt_module_ext_interface_interactive::stop_note
*/
int32_t ( * play_note ) ( openmpt_module_ext * mod_ext, int32_t instrument, int32_t note, double volume, double panning );
/*! Stop the note playing on the specified channel
*
* \param mod_ext The module handle to work on.
* \param channel The channel on which the note should be stopped.
* \return 1 on success, 0 on failure (channel out of range).
* \sa openmpt_module_ext_interface_interactive::play_note
*/
int ( * stop_note ) ( openmpt_module_ext * mod_ext, int32_t channel );
} openmpt_module_ext_interface_interactive;
/* add stuff here */
#ifdef __cplusplus
}
#endif
/*!
* @}
*/
#endif /* LIBOPENMPT_EXT_H */

View File

@ -0,0 +1,310 @@
/*
* libopenmpt_ext.hpp
* ------------------
* Purpose: libopenmpt public c++ interface for libopenmpt extensions
* Notes :
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#ifndef LIBOPENMPT_EXT_HPP
#define LIBOPENMPT_EXT_HPP
#include "libopenmpt_config.h"
#include "libopenmpt.hpp"
/*!
* \page libopenmpt_ext_cpp_overview libopenmpt_ext C++ API
*
* libopenmpt_ext is now included in all builds by default.
*
* \section libopenmpt-ext-cpp-detailed Detailed documentation
*
* \ref libopenmpt_ext_cpp
*
*/
/*! \defgroup libopenmpt_ext_cpp libopenmpt_ext C++ */
/*! \addtogroup libopenmpt_ext_cpp
@{
*/
namespace openmpt {
class module_ext_impl;
class LIBOPENMPT_CXX_API module_ext : public module {
private:
module_ext_impl * ext_impl;
private:
// non-copyable
module_ext( const module_ext & );
void operator = ( const module_ext & );
public:
module_ext( std::istream & stream, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
module_ext( const std::vector<std::byte> & data, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
module_ext( const std::vector<std::uint8_t> & data, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
module_ext( const std::vector<char> & data, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
module_ext( const std::byte * data, std::size_t size, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
module_ext( const std::uint8_t * data, std::size_t size, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
module_ext( const char * data, std::size_t size, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
module_ext( const void * data, std::size_t size, std::ostream & log = std::clog, const std::map< std::string, std::string > & ctls = detail::initial_ctls_map() );
virtual ~module_ext();
public:
//! Retrieve a libopenmpt extension.
/*! Example: Retrieving the interactive extension to change the tempo of a module:
\code{.cpp}
openmpt::module_ext *mod = new openmpt::module_ext( stream );
#ifdef LIBOPENMPT_EXT_INTERFACE_INTERACTIVE
openmpt::ext::interactive *interactive = static_cast<openmpt::ext::interactive *>( self->mod->get_interface( openmpt::ext::interactive_id ) );
if ( interactive ) {
interactive->set_tempo_factor( 2.0 ); // play module at double speed
} else {
// interface not available
}
#else
// interfae not available
#endif
\endcode
\param interface_id The name of the extension interface to retrieve.
\return The interface object. This may be a nullptr if the extension was not found.
*/
void * get_interface( const std::string & interface_id );
}; // class module_ext
namespace ext {
#define LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE(name) \
static const char name ## _id [] = # name ; \
class name; \
/**/
#define LIBOPENMPT_EXT_CXX_INTERFACE(name) \
protected: \
name () {} \
virtual ~ name () {} \
public: \
/**/
#ifndef LIBOPENMPT_EXT_INTERFACE_PATTERN_VIS
#define LIBOPENMPT_EXT_INTERFACE_PATTERN_VIS
#endif
LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE(pattern_vis)
class pattern_vis {
LIBOPENMPT_EXT_CXX_INTERFACE(pattern_vis)
//! Pattern command type
enum effect_type {
effect_unknown = 0,
effect_general = 1,
effect_global = 2,
effect_volume = 3,
effect_panning = 4,
effect_pitch = 5
}; // enum effect_type
//! Get pattern command type for pattern highlighting
/*!
\param pattern The pattern whose data should be retrieved.
\param row The row from which the data should be retrieved.
\param channel The channel from which the data should be retrieved.
\return The command type in the effect column at the given pattern position (see openmpt::ext::pattern_vis::effect_type)
\sa openmpt::ext::pattern_vis::get_pattern_row_channel_effect_type
*/
virtual effect_type get_pattern_row_channel_volume_effect_type( std::int32_t pattern, std::int32_t row, std::int32_t channel ) const = 0;
//! Get pattern command type for pattern highlighting
/*!
\param pattern The pattern whose data should be retrieved.
\param row The row from which the data should be retrieved.
\param channel The channel from which the data should be retrieved.
\return The command type in the volume column at the given pattern position (see openmpt::ext::pattern_vis::effect_type)
\sa openmpt::ext::pattern_vis::get_pattern_row_channel_volume_effect_type
*/
virtual effect_type get_pattern_row_channel_effect_type( std::int32_t pattern, std::int32_t row, std::int32_t channel ) const = 0;
}; // class pattern_vis
#ifndef LIBOPENMPT_EXT_INTERFACE_INTERACTIVE
#define LIBOPENMPT_EXT_INTERFACE_INTERACTIVE
#endif
LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE(interactive)
class interactive {
LIBOPENMPT_EXT_CXX_INTERFACE(interactive)
//! Set the current ticks per row (speed)
/*!
\param speed The new tick count in range [1, 65535].
\throws openmpt::exception Throws an exception derived from openmpt::exception if the speed is outside the specified range.
\remarks The tick count may be reset by pattern commands at any time.
\sa openmpt::module::get_current_speed
*/
virtual void set_current_speed( std::int32_t speed ) = 0;
//! Set the current module tempo
/*!
\param tempo The new tempo in range [32, 512]. The exact meaning of the value depends on the tempo mode used by the module.
\throws openmpt::exception Throws an exception derived from openmpt::exception if the tempo is outside the specified range.
\remarks The tempo may be reset by pattern commands at any time. Use openmpt::ext:interactive::set_tempo_factor to apply a tempo factor that is independent of pattern commands.
\sa openmpt::module::get_current_tempo
*/
virtual void set_current_tempo( std::int32_t tempo ) = 0;
//! Set the current module tempo factor without affecting playback pitch
/*!
\param factor The new tempo factor in range ]0.0, 4.0] - 1.0 means unmodified tempo.
\throws openmpt::exception Throws an exception derived from openmpt::exception if the factor is outside the specified range.
\remarks Modifying the tempo without applying the same pitch factor using openmpt::ext::interactive::set_pitch_factor may cause rhythmic samples (e.g. drum loops) to go out of sync.
\sa openmpt::ext::interactive::get_tempo_factor
*/
virtual void set_tempo_factor( double factor ) = 0;
//! Gets the current module tempo factor
/*!
\return The current tempo factor.
\sa openmpt::ext::interactive::set_tempo_factor
*/
virtual double get_tempo_factor( ) const = 0;
//! Set the current module pitch factor without affecting playback speed
/*!
\param factor The new pitch factor in range ]0.0, 4.0] - 1.0 means unmodified pitch.
\throws openmpt::exception Throws an exception derived from openmpt::exception if the factor is outside the specified range.
\remarks Modifying the pitch without applying the the same tempo factor using openmpt::ext::interactive::set_tempo_factor may cause rhythmic samples (e.g. drum loops) to go out of sync.
\remarks To shift the pich by `n` semitones, the parameter can be calculated as follows: `pow( 2.0, n / 12.0 )`
\sa openmpt::ext::interactive::get_pitch_factor
*/
virtual void set_pitch_factor( double factor ) = 0;
//! Gets the current module pitch factor
/*!
\return The current pitch factor.
\sa openmpt::ext::interactive::set_pitch_factor
*/
virtual double get_pitch_factor( ) const = 0;
//! Set the current global volume
/*!
\param volume The new global volume in range [0.0, 1.0]
\throws openmpt::exception Throws an exception derived from openmpt::exception if the volume is outside the specified range.
\remarks The global volume may be reset by pattern commands at any time. Use openmpt::module::set_render_param to apply a global overall volume factor that is independent of pattern commands.
\sa openmpt::ext::interactive::get_global_volume
*/
virtual void set_global_volume( double volume ) = 0;
//! Get the current global volume
/*!
\return The current global volume in range [0.0, 1.0]
\sa openmpt::ext::interactive::set_global_volume
*/
virtual double get_global_volume( ) const = 0;
//! Set the current channel volume for a channel
/*!
\param channel The channel whose volume should be set, in range [0, openmpt::module::get_num_channels()[
\param volume The new channel volume in range [0.0, 1.0]
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel or volume is outside the specified range.
\remarks The channel volume may be reset by pattern commands at any time.
\sa openmpt::ext::interactive::get_channel_volume
*/
virtual void set_channel_volume( std::int32_t channel, double volume ) = 0;
//! Get the current channel volume for a channel
/*!
\param channel The channel whose volume should be retrieved, in range [0, openmpt::module::get_num_channels()[
\return The current channel volume in range [0.0, 1.0]
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel is outside the specified range.
\sa openmpt::ext::interactive::set_channel_volume
*/
virtual double get_channel_volume( std::int32_t channel ) const = 0;
//! Set the current mute status for a channel
/*!
\param channel The channel whose mute status should be set, in range [0, openmpt::module::get_num_channels()[
\param mute The new mute status. true is muted, false is unmuted.
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel is outside the specified range.
\sa openmpt::ext::interactive::get_channel_mute_status
*/
virtual void set_channel_mute_status( std::int32_t channel, bool mute ) = 0;
//! Get the current mute status for a channel
/*!
\param channel The channel whose mute status should be retrieved, in range [0, openmpt::module::get_num_channels()[
\return The current channel mute status. true is muted, false is unmuted.
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel is outside the specified range.
\sa openmpt::ext::interactive::set_channel_mute_status
*/
virtual bool get_channel_mute_status( std::int32_t channel ) const = 0;
//! Set the current mute status for an instrument
/*!
\param instrument The instrument whose mute status should be set, in range [0, openmpt::module::get_num_instruments()[ if openmpt::module::get_num_instruments is not 0, otherwise in [0, openmpt::module::get_num_samples()[
\param mute The new mute status. true is muted, false is unmuted.
\throws openmpt::exception Throws an exception derived from openmpt::exception if the instrument is outside the specified range.
\sa openmpt::ext::interactive::get_instrument_mute_status
*/
virtual void set_instrument_mute_status( std::int32_t instrument, bool mute ) = 0;
//! Get the current mute status for an instrument
/*!
\param instrument The instrument whose mute status should be retrieved, in range [0, openmpt::module::get_num_instruments()[ if openmpt::module::get_num_instruments is not 0, otherwise in [0, openmpt::module::get_num_samples()[
\return The current instrument mute status. true is muted, false is unmuted.
\throws openmpt::exception Throws an exception derived from openmpt::exception if the instrument is outside the specified range.
\sa openmpt::ext::interactive::set_instrument_mute_status
*/
virtual bool get_instrument_mute_status( std::int32_t instrument ) const = 0;
//! Play a note using the specified instrument
/*!
\param instrument The instrument that should be played, in range [0, openmpt::module::get_num_instruments()[ if openmpt::module::get_num_instruments is not 0, otherwise in [0, openmpt::module::get_num_samples()[
\param note The note to play, in rage [0, 119]. 60 is the middle C.
\param volume The volume at which the note should be triggered, in range [0.0, 1.0]
\param panning The panning position at which the note should be triggered, in range [-1.0, 1.0], 0.0 is center.
\return The channel on which the note is played. This can pe be passed to openmpt::ext::interactive::stop_note to stop the note.
\throws openmpt::exception Throws an exception derived from openmpt::exception if the instrument or note is outside the specified range.
\sa openmpt::ext::interactive::stop_note
*/
virtual std::int32_t play_note( std::int32_t instrument, std::int32_t note, double volume, double panning ) = 0;
//! Stop the note playing on the specified channel
/*!
\param channel The channel on which the note should be stopped.
\throws openmpt::exception Throws an exception derived from openmpt::exception if the channel index is invalid.
\sa openmpt::ext::interactive::play_note
*/
virtual void stop_note( std::int32_t channel ) = 0;
}; // class interactive
/* add stuff here */
#undef LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE
#undef LIBOPENMPT_EXT_CXX_INTERFACE
} // namespace ext
} // namespace openmpt
/*!
@}
*/
#endif // LIBOPENMPT_EXT_HPP

View File

@ -0,0 +1,198 @@
/*
* libopenmpt_stream_callbacks_buffer.h
* ------------------------------------
* Purpose: libopenmpt public c interface
* Notes : (currently none)
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#ifndef LIBOPENMPT_STREAM_CALLBACKS_BUFFER_H
#define LIBOPENMPT_STREAM_CALLBACKS_BUFFER_H
#include "libopenmpt.h"
/* The use of this header requires:
#include <libopenmpt/libopenmpt.h>
#if defined( LIBOPENMPT_STREAM_CALLBACKS_BUFFER )
#include <libopenmpt/libopenmpt_stream_callbacks_buffer.h>
#else
#error "libopenmpt too old."
#endif
*/
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
/*! \addtogroup libopenmpt_c
* @{
*/
#ifdef __cplusplus
extern "C" {
#endif
typedef struct openmpt_stream_buffer {
const void * file_data; /* or prefix data IFF prefix_size < file_size */
int64_t file_size;
int64_t file_pos;
int64_t prefix_size;
int overflow;
} openmpt_stream_buffer;
static size_t openmpt_stream_buffer_read_func( void * stream, void * dst, size_t bytes ) {
openmpt_stream_buffer * s = (openmpt_stream_buffer*)stream;
int64_t offset = 0;
int64_t begpos = 0;
int64_t endpos = 0;
size_t valid_bytes = 0;
if ( !s ) {
return 0;
}
offset = bytes;
begpos = s->file_pos;
endpos = s->file_pos;
valid_bytes = 0;
endpos = (uint64_t)endpos + (uint64_t)offset;
if ( ( offset > 0 ) && !( (uint64_t)endpos > (uint64_t)begpos ) ) {
/* integer wrapped */
return 0;
}
if ( bytes == 0 ) {
return 0;
}
if ( begpos >= s->file_size ) {
return 0;
}
if ( endpos > s->file_size ) {
/* clip to eof */
bytes = bytes - (size_t)( endpos - s->file_size );
endpos = endpos - ( endpos - s->file_size );
}
memset( dst, 0, bytes );
if ( begpos >= s->prefix_size ) {
s->overflow = 1;
valid_bytes = 0;
} else if ( endpos > s->prefix_size ) {
s->overflow = 1;
valid_bytes = bytes - (size_t)( endpos - s->prefix_size );
} else {
valid_bytes = bytes;
}
memcpy( dst, (const char*)s->file_data + s->file_pos, valid_bytes );
s->file_pos = s->file_pos + bytes;
return bytes;
}
static int openmpt_stream_buffer_seek_func( void * stream, int64_t offset, int whence ) {
openmpt_stream_buffer * s = (openmpt_stream_buffer*)stream;
int result = -1;
if ( !s ) {
return -1;
}
switch ( whence ) {
case OPENMPT_STREAM_SEEK_SET:
if ( offset < 0 ) {
return -1;
}
if ( offset > s->file_size ) {
return -1;
}
s->file_pos = offset;
result = 0;
break;
case OPENMPT_STREAM_SEEK_CUR:
do {
int64_t oldpos = s->file_pos;
int64_t pos = s->file_pos;
pos = (uint64_t)pos + (uint64_t)offset;
if ( ( offset > 0 ) && !( (uint64_t)pos > (uint64_t)oldpos ) ) {
/* integer wrapped */
return -1;
}
if ( ( offset < 0 ) && !( (uint64_t)pos < (uint64_t)oldpos ) ) {
/* integer wrapped */
return -1;
}
s->file_pos = pos;
} while(0);
result = 0;
break;
case OPENMPT_STREAM_SEEK_END:
if ( offset > 0 ) {
return -1;
}
do {
int64_t oldpos = s->file_pos;
int64_t pos = s->file_pos;
pos = s->file_size;
pos = (uint64_t)pos + (uint64_t)offset;
if ( ( offset < 0 ) && !( (uint64_t)pos < (uint64_t)oldpos ) ) {
/* integer wrapped */
return -1;
}
s->file_pos = pos;
} while(0);
result = 0;
break;
}
return result;
}
static int64_t openmpt_stream_buffer_tell_func( void * stream ) {
openmpt_stream_buffer * s = (openmpt_stream_buffer*)stream;
if ( !s ) {
return -1;
}
return s->file_pos;
}
static void openmpt_stream_buffer_init( openmpt_stream_buffer * buffer, const void * file_data, int64_t file_size ) {
memset( buffer, 0, sizeof( openmpt_stream_buffer ) );
buffer->file_data = file_data;
buffer->file_size = file_size;
buffer->file_pos = 0;
buffer->prefix_size = file_size;
buffer->overflow = 0;
}
#define openmpt_stream_buffer_init_prefix_only( buffer_, prefix_data_, prefix_size_, file_size_ ) do { \
openmpt_stream_buffer_init( (buffer_), (prefix_data_), (file_size_) ); \
(buffer_)->prefix_size = (prefix_size_); \
} while(0)
#define openmpt_stream_buffer_overflowed( buffer_ ) ( (buffer_)->overflow )
/*! \brief Provide openmpt_stream_callbacks for in-memoy buffers
*
* Fills openmpt_stream_callbacks suitable for passing an in-memory buffer as a stream parameter to functions doing file input/output.
*
* \remarks The stream argument must be passed as `(void*)(openmpt_stream_buffer*)stream_buffer`.
* \sa \ref libopenmpt_c_fileio
* \sa openmpt_stream_callbacks
* \sa openmpt_could_open_probability2
* \sa openmpt_probe_file_header_from_stream
* \sa openmpt_module_create2
*/
static openmpt_stream_callbacks openmpt_stream_get_buffer_callbacks(void) {
openmpt_stream_callbacks retval;
memset( &retval, 0, sizeof( openmpt_stream_callbacks ) );
retval.read = openmpt_stream_buffer_read_func;
retval.seek = openmpt_stream_buffer_seek_func;
retval.tell = openmpt_stream_buffer_tell_func;
return retval;
}
#ifdef __cplusplus
}
#endif
/*!
* @}
*/
#endif /* LIBOPENMPT_STREAM_CALLBACKS_BUFFER_H */

View File

@ -0,0 +1,101 @@
/*
* libopenmpt_stream_callbacks_fd.h
* --------------------------------
* Purpose: libopenmpt public c interface
* Notes : (currently none)
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#ifndef LIBOPENMPT_STREAM_CALLBACKS_FD_H
#define LIBOPENMPT_STREAM_CALLBACKS_FD_H
#include "libopenmpt.h"
#ifdef _MSC_VER
#include <io.h>
#endif
#include <limits.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#ifndef _MSC_VER
#include <unistd.h>
#endif
/*! \addtogroup libopenmpt_c
* @{
*/
#ifdef __cplusplus
extern "C" {
#endif
/* This stuff has to be in a header file because of possibly different MSVC CRTs which cause problems for fd crossing CRT boundaries. */
static size_t openmpt_stream_fd_read_func( void * stream, void * dst, size_t bytes ) {
int fd = 0;
#if defined(_MSC_VER)
size_t retval = 0;
int to_read = 0;
int ret_read = 0;
#else
ssize_t retval = 0;
#endif
fd = (int)(uintptr_t)stream;
if ( fd < 0 ) {
return 0;
}
#if defined(_MSC_VER)
retval = 0;
while ( bytes > 0 ) {
to_read = 0;
if ( bytes < (size_t)INT_MAX ) {
to_read = (int)bytes;
} else {
to_read = INT_MAX;
}
ret_read = _read( fd, dst, to_read );
if ( ret_read <= 0 ) {
return retval;
}
bytes -= ret_read;
retval += ret_read;
}
#else
retval = read( fd, dst, bytes );
#endif
if ( retval <= 0 ) {
return 0;
}
return retval;
}
/*! \brief Provide openmpt_stream_callbacks for standard POSIX file descriptors
*
* Fills openmpt_stream_callbacks suitable for passing a POSIX filer descriptor as a stream parameter to functions doing file input/output.
*
* \remarks The stream argument must be passed as `(void*)(uintptr_t)(int)fd`.
* \sa \ref libopenmpt_c_fileio
* \sa openmpt_stream_callbacks
* \sa openmpt_could_open_probability2
* \sa openmpt_probe_file_header_from_stream
* \sa openmpt_module_create2
*/
static openmpt_stream_callbacks openmpt_stream_get_fd_callbacks(void) {
openmpt_stream_callbacks retval;
memset( &retval, 0, sizeof( openmpt_stream_callbacks ) );
retval.read = openmpt_stream_fd_read_func;
return retval;
}
#ifdef __cplusplus
}
#endif
/*!
* @}
*/
#endif /* LIBOPENMPT_STREAM_CALLBACKS_FD_H */

View File

@ -0,0 +1,132 @@
/*
* libopenmpt_stream_callbacks_file.h
* ----------------------------------
* Purpose: libopenmpt public c interface
* Notes : (currently none)
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#ifndef LIBOPENMPT_STREAM_CALLBACKS_FILE_H
#define LIBOPENMPT_STREAM_CALLBACKS_FILE_H
#include "libopenmpt.h"
#include <limits.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#ifdef _MSC_VER
#include <wchar.h> /* off_t */
#endif
/*! \addtogroup libopenmpt_c
* @{
*/
#ifdef __cplusplus
extern "C" {
#endif
/* This stuff has to be in a header file because of possibly different MSVC CRTs which cause problems for FILE * crossing CRT boundaries. */
static size_t openmpt_stream_file_read_func( void * stream, void * dst, size_t bytes ) {
FILE * f = 0;
size_t retval = 0;
f = (FILE*)stream;
if ( !f ) {
return 0;
}
retval = fread( dst, 1, bytes, f );
if ( retval <= 0 ) {
return 0;
}
return retval;
}
static int openmpt_stream_file_seek_func( void * stream, int64_t offset, int whence ) {
FILE * f = 0;
int fwhence = 0;
f = (FILE*)stream;
if ( !f ) {
return -1;
}
switch ( whence ) {
#if defined(SEEK_SET)
case OPENMPT_STREAM_SEEK_SET:
fwhence = SEEK_SET;
break;
#endif
#if defined(SEEK_CUR)
case OPENMPT_STREAM_SEEK_CUR:
fwhence = SEEK_CUR;
break;
#endif
#if defined(SEEK_END)
case OPENMPT_STREAM_SEEK_END:
fwhence = SEEK_END;
break;
#endif
default:
return -1;
break;
}
#if defined(_MSC_VER)
return _fseeki64( f, offset, fwhence ) ? -1 : 0;
#elif defined(_POSIX_SOURCE) && (_POSIX_SOURCE == 1)
return fseeko( f, offset, fwhence ) ? -1 : 0;
#else
return fseek( f, offset, fwhence ) ? -1 : 0;
#endif
}
static int64_t openmpt_stream_file_tell_func( void * stream ) {
FILE * f = 0;
int64_t retval = 0;
f = (FILE*)stream;
if ( !f ) {
return -1;
}
#if defined(_MSC_VER)
retval = _ftelli64( f );
#elif defined(_POSIX_SOURCE) && (_POSIX_SOURCE == 1)
retval = ftello( f );
#else
retval = ftell( f );
#endif
if ( retval < 0 ) {
return -1;
}
return retval;
}
/*! \brief Provide openmpt_stream_callbacks for standard C FILE objects
*
* Fills openmpt_stream_callbacks suitable for passing a standard C FILE object as a stream parameter to functions doing file input/output.
*
* \remarks The stream argument must be passed as `(void*)(FILE*)file`.
* \sa \ref libopenmpt_c_fileio
* \sa openmpt_stream_callbacks
* \sa openmpt_could_open_probability2
* \sa openmpt_probe_file_header_from_stream
* \sa openmpt_module_create2
*/
static openmpt_stream_callbacks openmpt_stream_get_file_callbacks(void) {
openmpt_stream_callbacks retval;
memset( &retval, 0, sizeof( openmpt_stream_callbacks ) );
retval.read = openmpt_stream_file_read_func;
retval.seek = openmpt_stream_file_seek_func;
retval.tell = openmpt_stream_file_tell_func;
return retval;
}
#ifdef __cplusplus
}
#endif
/*!
* @}
*/
#endif /* LIBOPENMPT_STREAM_CALLBACKS_FILE_H */

View File

@ -0,0 +1,75 @@
/*
* libopenmpt_version.h
* --------------------
* Purpose: libopenmpt public interface version
* Notes : (currently none)
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#ifndef LIBOPENMPT_VERSION_H
#define LIBOPENMPT_VERSION_H
/*! \addtogroup libopenmpt
@{
*/
/*! \brief libopenmpt major version number */
#define OPENMPT_API_VERSION_MAJOR 0
/*! \brief libopenmpt minor version number */
#define OPENMPT_API_VERSION_MINOR 5
/*! \brief libopenmpt patch version number */
#define OPENMPT_API_VERSION_PATCH 0
/*! \brief libopenmpt pre-release tag */
#define OPENMPT_API_VERSION_PREREL ""
/*! \brief libopenmpt pre-release flag */
#define OPENMPT_API_VERSION_IS_PREREL 0
/*! \brief libopenmpt version number as a single integer value
* \since 0.3
* \remarks Use the following shim if you need to support earlier libopenmpt versions:
* \code
* #include <libopenmpt/libopenmpt_version.h>
* #if !defined(OPENMPT_API_VERSION_MAKE)
* #define OPENMPT_API_VERSION_MAKE(major, minor, patch) (((major)<<24)|((minor)<<16)|((patch)<<0))
* #endif
* \endcode
*/
#define OPENMPT_API_VERSION_MAKE(major, minor, patch) (((major)<<24)|((minor)<<16)|((patch)<<0))
/*! \brief libopenmpt API version number */
#define OPENMPT_API_VERSION OPENMPT_API_VERSION_MAKE(OPENMPT_API_VERSION_MAJOR, OPENMPT_API_VERSION_MINOR, OPENMPT_API_VERSION_PATCH)
/*! \brief Check whether the libopenmpt API is at least the provided version
* \since 0.3
* \remarks Use the following shim if you need to support earlier libopenmpt versions:
* \code
* #include <libopenmpt/libopenmpt_version.h>
* #if !defined(OPENMPT_API_VERSION_AT_LEAST)
* #define OPENMPT_API_VERSION_AT_LEAST(major, minor, patch) (OPENMPT_API_VERSION >= OPENMPT_API_VERSION_MAKE((major), (minor), (patch)))
* #endif
* \endcode
*/
#define OPENMPT_API_VERSION_AT_LEAST(major, minor, patch) (OPENMPT_API_VERSION >= OPENMPT_API_VERSION_MAKE((major), (minor), (patch)))
/*! \brief Check whether the libopenmpt API is before the provided version
* \since 0.3
* \remarks Use the following shim if you need to support earlier libopenmpt versions:
* \code
* #include <libopenmpt/libopenmpt_version.h>
* #if !defined(OPENMPT_API_VERSION_BEFORE)
* #define OPENMPT_API_VERSION_BEFORE(major, minor, patch) (OPENMPT_API_VERSION < OPENMPT_API_VERSION_MAKE((major), (minor), (patch)))
* #endif
* \endcode
*/
#define OPENMPT_API_VERSION_BEFORE(major, minor, patch) (OPENMPT_API_VERSION < OPENMPT_API_VERSION_MAKE((major), (minor), (patch)))
#define OPENMPT_API_VERSION_HELPER_STRINGIZE(x) #x
#define OPENMPT_API_VERSION_STRINGIZE(x) OPENMPT_API_VERSION_HELPER_STRINGIZE(x)
#define OPENMPT_API_VERSION_STRING OPENMPT_API_VERSION_STRINGIZE(OPENMPT_API_VERSION_MAJOR) "." OPENMPT_API_VERSION_STRINGIZE(OPENMPT_API_VERSION_MINOR) "." OPENMPT_API_VERSION_STRINGIZE(OPENMPT_API_VERSION_PATCH) OPENMPT_API_VERSION_PREREL
/*!
@}
*/
#endif /* LIBOPENMPT_VERSION_H */

View File

@ -0,0 +1,832 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="plugin">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
<Filter Include="plugin\gme">
<UniqueIdentifier>{0c34f22a-70bf-4fb8-b96c-f08cd406fd53}</UniqueIdentifier>
</Filter>
<Filter Include="plugin\gme\higan">
<UniqueIdentifier>{280eb342-9894-41b2-911f-0c5f93b0a856}</UniqueIdentifier>
</Filter>
<Filter Include="plugin\gme\higan\dsp">
<UniqueIdentifier>{f792f43e-8052-49cb-a377-d6a59ee84a6d}</UniqueIdentifier>
</Filter>
<Filter Include="plugin\gme\higan\processor">
<UniqueIdentifier>{da658fc7-ef8f-40d1-bf27-f43b018a7a98}</UniqueIdentifier>
</Filter>
<Filter Include="plugin\gme\higan\processor\spc700">
<UniqueIdentifier>{d193944b-dfc4-4e31-9b24-93230815c095}</UniqueIdentifier>
</Filter>
<Filter Include="plugin\gme\higan\smp">
<UniqueIdentifier>{dbf2c887-734f-4a7b-b20e-da7a33b8451e}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<Text Include="gme\gme.txt">
<Filter>plugin\gme</Filter>
</Text>
<Text Include="gme\license.txt">
<Filter>plugin\gme</Filter>
</Text>
</ItemGroup>
<ItemGroup>
<ClInclude Include="GmeDecoder.h">
<Filter>plugin</Filter>
</ClInclude>
<ClInclude Include="Constants.h">
<Filter>plugin</Filter>
</ClInclude>
<ClInclude Include="GmeDataStream.h">
<Filter>plugin</Filter>
</ClInclude>
<ClInclude Include="GmeIndexerSource.h">
<Filter>plugin</Filter>
</ClInclude>
<ClInclude Include="gme\ymz280b.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ymz280b_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Z80_Cpu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Z80_Cpu_run.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\adlib.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ay_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ay_Core.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ay_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\blargg_common.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\blargg_config.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\blargg_endian.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\blargg_errors.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\blargg_source.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Blip_Buffer.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Blip_Buffer_impl.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Blip_Buffer_impl2.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Bml_Parser.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\c140.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\C140_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Chip_Resampler.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Classic_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\dac_control.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Data_Reader.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\dbopl.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\divfix.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Downsampler.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Dual_Resampler.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Effects_Buffer.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\emuconfig.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Fir_Resampler.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\fm.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\fmopl.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Gb_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Gb_Cpu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Gb_Cpu_run.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Gb_Oscs.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Gbs_Core.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Gbs_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\gme.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\gme_custom_dprintf.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Gme_File.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Gme_Loader.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Gym_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Hes_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Hes_Apu_Adpcm.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Hes_Core.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Hes_Cpu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Hes_Cpu_run.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Hes_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\i_fmpac.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\i_fmunit.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\i_vrc7.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\k051649.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\K051649_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\k053260.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\K053260_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\k054539.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\K054539_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\kmsnddev.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Kss_Core.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Kss_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Kss_Scc_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\M3u_Playlist.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\mamedef.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\mathdefs.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Multi_Buffer.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Music_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Cpu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Cpu_run.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Fds_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Fme7_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Mmc5_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Namco_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Oscs.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Vrc6_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nes_Vrc7_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\nestypes.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nsf_Core.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nsf_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nsf_Impl.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Nsfe_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\okim6258.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Okim6258_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\okim6295.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Okim6295_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Opl_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\pwm.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Pwm_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\qmix.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Qsound_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Resampler.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\rf5c68.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Rf5C68_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Rf5C164_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Rom_Data.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\s_deltat.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\s_logtbl.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\s_opl.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\s_opltbl.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Sap_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Sap_Core.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Sap_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\scd_pcm.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\segapcm.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\SegaPcm_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Sgc_Core.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Sgc_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Sgc_Impl.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Sms_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Sms_Fm_Apu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Spc_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Spc_Filter.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Spc_Sfm.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Track_Filter.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Upsampler.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Vgm_Core.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Vgm_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\ym2151.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ym2151_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ym2203_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\ym2413.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ym2413_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ym2608_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ym2610b_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ym2612_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ym3812_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\ymdeltat.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\Ymf262_Emu.h">
<Filter>plugin\gme</Filter>
</ClInclude>
<ClInclude Include="gme\higan\dsp\dsp.hpp">
<Filter>plugin\gme\higan\dsp</Filter>
</ClInclude>
<ClInclude Include="gme\higan\dsp\SPC_DSP.h">
<Filter>plugin\gme\higan\dsp</Filter>
</ClInclude>
<ClInclude Include="gme\higan\processor\spc700\memory.hpp">
<Filter>plugin\gme\higan\processor\spc700</Filter>
</ClInclude>
<ClInclude Include="gme\higan\processor\spc700\registers.hpp">
<Filter>plugin\gme\higan\processor\spc700</Filter>
</ClInclude>
<ClInclude Include="gme\higan\processor\spc700\spc700.hpp">
<Filter>plugin\gme\higan\processor\spc700</Filter>
</ClInclude>
<ClInclude Include="gme\higan\smp\smp.hpp">
<Filter>plugin\gme\higan\smp</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="GmeDataStream.cpp">
<Filter>plugin</Filter>
</ClCompile>
<ClCompile Include="GmeDecoder.cpp">
<Filter>plugin</Filter>
</ClCompile>
<ClCompile Include="GmeIndexerSource.cpp">
<Filter>plugin</Filter>
</ClCompile>
<ClCompile Include="plugin.cpp">
<Filter>plugin</Filter>
</ClCompile>
<ClCompile Include="gme\Ymz280b_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Z80_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ay_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ay_Core.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ay_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ay_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\blargg_common.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\blargg_errors.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Blip_Buffer.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Bml_Parser.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\c140.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\C140_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Classic_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\dac_control.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Data_Reader.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\dbopl.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Downsampler.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Dual_Resampler.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Effects_Buffer.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Fir_Resampler.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\fm.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\fm2612.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\fmopl.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Gb_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Gb_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Gb_Oscs.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Gbs_Core.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Gbs_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Gbs_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\gme.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\gme_custom_dprintf.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Gme_File.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Gme_Loader.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Gym_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Hes_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Hes_Apu_Adpcm.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Hes_Core.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Hes_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Hes_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\k051649.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\K051649_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\k053260.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\K053260_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\k054539.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\K054539_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Kss_Core.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Kss_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Kss_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Kss_Scc_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\M3u_Playlist.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Multi_Buffer.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Music_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nes_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nes_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nes_Fds_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nes_Fme7_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nes_Namco_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nes_Oscs.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nes_Vrc6_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nes_Vrc7_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nsf_Core.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nsf_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nsf_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nsf_Impl.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Nsfe_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\okim6258.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Okim6258_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\okim6295.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Okim6295_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Opl_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\pwm.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Pwm_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\qmix.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Qsound_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Resampler.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\rf5c68.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Rf5C68_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Rf5C164_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Rom_Data.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\s_deltat.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\s_logtbl.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\s_opl.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\s_opltbl.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sap_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sap_Core.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sap_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sap_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\scd_pcm.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\segapcm.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\SegaPcm_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sgc_Core.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sgc_Cpu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sgc_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sgc_Impl.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sms_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Sms_Fm_Apu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Spc_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Spc_Filter.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Spc_Sfm.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Track_Filter.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Upsampler.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Vgm_Core.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Vgm_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\ym2151.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ym2151_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ym2203_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\ym2413.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ym2413_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ym2608_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ym2610b_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ym2612_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ym3812_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\ymdeltat.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\Ymf262_Emu.cpp">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\ymz280b.c">
<Filter>plugin\gme</Filter>
</ClCompile>
<ClCompile Include="gme\higan\dsp\SPC_DSP.cpp">
<Filter>plugin\gme\higan\dsp</Filter>
</ClCompile>
<ClCompile Include="gme\higan\dsp\dsp.cpp">
<Filter>plugin\gme\higan\dsp</Filter>
</ClCompile>
<ClCompile Include="gme\higan\processor\spc700\spc700.cpp">
<Filter>plugin\gme\higan\processor\spc700</Filter>
</ClCompile>
<ClCompile Include="gme\higan\smp\smp.cpp">
<Filter>plugin\gme\higan\smp</Filter>
</ClCompile>
<ClCompile Include="gme\higan\smp\timing.cpp">
<Filter>plugin\gme\higan\smp</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,849 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug-Con|Win32">
<Configuration>Debug-Con</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug-Con|x64">
<Configuration>Debug-Con</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug-DLL|Win32">
<Configuration>Debug-DLL</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug-DLL|x64">
<Configuration>Debug-DLL</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release-Con|Win32">
<Configuration>Release-Con</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release-Con|x64">
<Configuration>Release-Con</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release-DLL|Win32">
<Configuration>Release-DLL</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release-DLL|x64">
<Configuration>Release-DLL</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{89fd1021-21b5-44eb-bdbe-70381ade8522}</ProjectGuid>
<RootNamespace>gmedecoder</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.25123.0</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)/bin32/$(Configuration)/plugins/</OutDir>
<IntDir>./obj32/$(Configuration)/</IntDir>
<LinkIncremental>true</LinkIncremental>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'">
<OutDir>$(SolutionDir)/bin32/$(Configuration)/plugins/</OutDir>
<IntDir>./obj32/$(Configuration)/</IntDir>
<LinkIncremental>true</LinkIncremental>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'">
<OutDir>$(SolutionDir)/bin32/$(Configuration)/plugins/</OutDir>
<IntDir>./obj32/$(Configuration)/</IntDir>
<LinkIncremental>true</LinkIncremental>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
<OutDir>$(SolutionDir)/bin64/$(Configuration)/plugins/</OutDir>
<IntDir>./obj64/$(Configuration)/</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'">
<LinkIncremental>true</LinkIncremental>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
<OutDir>$(SolutionDir)/bin64/$(Configuration)/plugins/</OutDir>
<IntDir>./obj64/$(Configuration)/</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'">
<LinkIncremental>true</LinkIncremental>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
<OutDir>$(SolutionDir)/bin64/$(Configuration)/plugins/</OutDir>
<IntDir>./obj64/$(Configuration)/</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)/bin32/$(Configuration)/plugins/</OutDir>
<IntDir>./obj32/$(Configuration)/</IntDir>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|Win32'">
<OutDir>$(SolutionDir)/bin32/$(Configuration)/plugins/</OutDir>
<IntDir>./obj32/$(Configuration)/</IntDir>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|Win32'">
<OutDir>$(SolutionDir)/bin32/$(Configuration)/plugins/</OutDir>
<IntDir>./obj32/$(Configuration)/</IntDir>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
<OutDir>$(SolutionDir)/bin64/$(Configuration)/plugins/</OutDir>
<IntDir>./obj64/$(Configuration)/</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|x64'">
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
<OutDir>$(SolutionDir)/bin64/$(Configuration)/plugins/</OutDir>
<IntDir>./obj64/$(Configuration)/</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|x64'">
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
<OutDir>$(SolutionDir)/bin64/$(Configuration)/plugins/</OutDir>
<IntDir>./obj64/$(Configuration)/</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat />
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<WholeProgramOptimization>true</WholeProgramOptimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<Optimization>Full</Optimization>
<ExceptionHandling>Sync</ExceptionHandling>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>false</GenerateDebugInformation>
<FullProgramDatabaseFile>false</FullProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|Win32'">
<ClCompile>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<WholeProgramOptimization>true</WholeProgramOptimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<Optimization>Full</Optimization>
<ExceptionHandling>Sync</ExceptionHandling>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>false</GenerateDebugInformation>
<FullProgramDatabaseFile>false</FullProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|Win32'">
<ClCompile>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<WholeProgramOptimization>true</WholeProgramOptimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<Optimization>Full</Optimization>
<ExceptionHandling>Sync</ExceptionHandling>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>false</GenerateDebugInformation>
<FullProgramDatabaseFile>false</FullProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<WholeProgramOptimization>true</WholeProgramOptimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<Optimization>Full</Optimization>
<ExceptionHandling>Sync</ExceptionHandling>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<GenerateDebugInformation>false</GenerateDebugInformation>
<FullProgramDatabaseFile>false</FullProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|x64'">
<ClCompile>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<WholeProgramOptimization>true</WholeProgramOptimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<Optimization>Full</Optimization>
<ExceptionHandling>Sync</ExceptionHandling>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<GenerateDebugInformation>false</GenerateDebugInformation>
<FullProgramDatabaseFile>false</FullProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|x64'">
<ClCompile>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>../..;./gme/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<WholeProgramOptimization>true</WholeProgramOptimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<Optimization>Full</Optimization>
<ExceptionHandling>Sync</ExceptionHandling>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<GenerateDebugInformation>false</GenerateDebugInformation>
<FullProgramDatabaseFile>false</FullProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Text Include="gme\gme.txt" />
<Text Include="gme\license.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Constants.h" />
<ClInclude Include="GmeDataStream.h" />
<ClInclude Include="GmeDecoder.h" />
<ClInclude Include="GmeIndexerSource.h" />
<ClInclude Include="gme\adlib.h" />
<ClInclude Include="gme\Ay_Apu.h" />
<ClInclude Include="gme\Ay_Core.h" />
<ClInclude Include="gme\Ay_Emu.h" />
<ClInclude Include="gme\blargg_common.h" />
<ClInclude Include="gme\blargg_config.h" />
<ClInclude Include="gme\blargg_endian.h" />
<ClInclude Include="gme\blargg_errors.h" />
<ClInclude Include="gme\blargg_source.h" />
<ClInclude Include="gme\Blip_Buffer.h" />
<ClInclude Include="gme\Blip_Buffer_impl.h" />
<ClInclude Include="gme\Blip_Buffer_impl2.h" />
<ClInclude Include="gme\Bml_Parser.h" />
<ClInclude Include="gme\c140.h" />
<ClInclude Include="gme\C140_Emu.h" />
<ClInclude Include="gme\Chip_Resampler.h" />
<ClInclude Include="gme\Classic_Emu.h" />
<ClInclude Include="gme\dac_control.h" />
<ClInclude Include="gme\Data_Reader.h" />
<ClInclude Include="gme\dbopl.h" />
<ClInclude Include="gme\divfix.h" />
<ClInclude Include="gme\Downsampler.h" />
<ClInclude Include="gme\Dual_Resampler.h" />
<ClInclude Include="gme\Effects_Buffer.h" />
<ClInclude Include="gme\emuconfig.h" />
<ClInclude Include="gme\Fir_Resampler.h" />
<ClInclude Include="gme\fm.h" />
<ClInclude Include="gme\fmopl.h" />
<ClInclude Include="gme\Gbs_Core.h" />
<ClInclude Include="gme\Gbs_Emu.h" />
<ClInclude Include="gme\Gb_Apu.h" />
<ClInclude Include="gme\Gb_Cpu.h" />
<ClInclude Include="gme\Gb_Cpu_run.h" />
<ClInclude Include="gme\Gb_Oscs.h" />
<ClInclude Include="gme\gme.h" />
<ClInclude Include="gme\gme_custom_dprintf.h" />
<ClInclude Include="gme\Gme_File.h" />
<ClInclude Include="gme\Gme_Loader.h" />
<ClInclude Include="gme\Gym_Emu.h" />
<ClInclude Include="gme\Hes_Apu.h" />
<ClInclude Include="gme\Hes_Apu_Adpcm.h" />
<ClInclude Include="gme\Hes_Core.h" />
<ClInclude Include="gme\Hes_Cpu.h" />
<ClInclude Include="gme\Hes_Cpu_run.h" />
<ClInclude Include="gme\Hes_Emu.h" />
<ClInclude Include="gme\higan\dsp\dsp.hpp" />
<ClInclude Include="gme\higan\dsp\SPC_DSP.h" />
<ClInclude Include="gme\higan\processor\spc700\memory.hpp" />
<ClInclude Include="gme\higan\processor\spc700\registers.hpp" />
<ClInclude Include="gme\higan\processor\spc700\spc700.hpp" />
<ClInclude Include="gme\higan\smp\smp.hpp" />
<ClInclude Include="gme\i_fmpac.h" />
<ClInclude Include="gme\i_fmunit.h" />
<ClInclude Include="gme\i_vrc7.h" />
<ClInclude Include="gme\k051649.h" />
<ClInclude Include="gme\K051649_Emu.h" />
<ClInclude Include="gme\k053260.h" />
<ClInclude Include="gme\K053260_Emu.h" />
<ClInclude Include="gme\k054539.h" />
<ClInclude Include="gme\K054539_Emu.h" />
<ClInclude Include="gme\kmsnddev.h" />
<ClInclude Include="gme\Kss_Core.h" />
<ClInclude Include="gme\Kss_Emu.h" />
<ClInclude Include="gme\Kss_Scc_Apu.h" />
<ClInclude Include="gme\M3u_Playlist.h" />
<ClInclude Include="gme\mamedef.h" />
<ClInclude Include="gme\mathdefs.h" />
<ClInclude Include="gme\Multi_Buffer.h" />
<ClInclude Include="gme\Music_Emu.h" />
<ClInclude Include="gme\nestypes.h" />
<ClInclude Include="gme\Nes_Apu.h" />
<ClInclude Include="gme\Nes_Cpu.h" />
<ClInclude Include="gme\Nes_Cpu_run.h" />
<ClInclude Include="gme\Nes_Fds_Apu.h" />
<ClInclude Include="gme\Nes_Fme7_Apu.h" />
<ClInclude Include="gme\Nes_Mmc5_Apu.h" />
<ClInclude Include="gme\Nes_Namco_Apu.h" />
<ClInclude Include="gme\Nes_Oscs.h" />
<ClInclude Include="gme\Nes_Vrc6_Apu.h" />
<ClInclude Include="gme\Nes_Vrc7_Apu.h" />
<ClInclude Include="gme\Nsfe_Emu.h" />
<ClInclude Include="gme\Nsf_Core.h" />
<ClInclude Include="gme\Nsf_Emu.h" />
<ClInclude Include="gme\Nsf_Impl.h" />
<ClInclude Include="gme\okim6258.h" />
<ClInclude Include="gme\Okim6258_Emu.h" />
<ClInclude Include="gme\okim6295.h" />
<ClInclude Include="gme\Okim6295_Emu.h" />
<ClInclude Include="gme\Opl_Apu.h" />
<ClInclude Include="gme\pwm.h" />
<ClInclude Include="gme\Pwm_Emu.h" />
<ClInclude Include="gme\qmix.h" />
<ClInclude Include="gme\Qsound_Apu.h" />
<ClInclude Include="gme\Resampler.h" />
<ClInclude Include="gme\Rf5C164_Emu.h" />
<ClInclude Include="gme\rf5c68.h" />
<ClInclude Include="gme\Rf5C68_Emu.h" />
<ClInclude Include="gme\Rom_Data.h" />
<ClInclude Include="gme\Sap_Apu.h" />
<ClInclude Include="gme\Sap_Core.h" />
<ClInclude Include="gme\Sap_Emu.h" />
<ClInclude Include="gme\scd_pcm.h" />
<ClInclude Include="gme\segapcm.h" />
<ClInclude Include="gme\SegaPcm_Emu.h" />
<ClInclude Include="gme\Sgc_Core.h" />
<ClInclude Include="gme\Sgc_Emu.h" />
<ClInclude Include="gme\Sgc_Impl.h" />
<ClInclude Include="gme\Sms_Apu.h" />
<ClInclude Include="gme\Sms_Fm_Apu.h" />
<ClInclude Include="gme\Spc_Emu.h" />
<ClInclude Include="gme\Spc_Filter.h" />
<ClInclude Include="gme\Spc_Sfm.h" />
<ClInclude Include="gme\s_deltat.h" />
<ClInclude Include="gme\s_logtbl.h" />
<ClInclude Include="gme\s_opl.h" />
<ClInclude Include="gme\s_opltbl.h" />
<ClInclude Include="gme\Track_Filter.h" />
<ClInclude Include="gme\Upsampler.h" />
<ClInclude Include="gme\Vgm_Core.h" />
<ClInclude Include="gme\Vgm_Emu.h" />
<ClInclude Include="gme\ym2151.h" />
<ClInclude Include="gme\Ym2151_Emu.h" />
<ClInclude Include="gme\Ym2203_Emu.h" />
<ClInclude Include="gme\ym2413.h" />
<ClInclude Include="gme\Ym2413_Emu.h" />
<ClInclude Include="gme\Ym2608_Emu.h" />
<ClInclude Include="gme\Ym2610b_Emu.h" />
<ClInclude Include="gme\Ym2612_Emu.h" />
<ClInclude Include="gme\Ym3812_Emu.h" />
<ClInclude Include="gme\ymdeltat.h" />
<ClInclude Include="gme\Ymf262_Emu.h" />
<ClInclude Include="gme\ymz280b.h" />
<ClInclude Include="gme\Ymz280b_Emu.h" />
<ClInclude Include="gme\Z80_Cpu.h" />
<ClInclude Include="gme\Z80_Cpu_run.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="GmeDataStream.cpp" />
<ClCompile Include="GmeDecoder.cpp" />
<ClCompile Include="GmeIndexerSource.cpp" />
<ClCompile Include="gme\Ay_Apu.cpp" />
<ClCompile Include="gme\Ay_Core.cpp" />
<ClCompile Include="gme\Ay_Cpu.cpp" />
<ClCompile Include="gme\Ay_Emu.cpp" />
<ClCompile Include="gme\blargg_common.cpp" />
<ClCompile Include="gme\blargg_errors.cpp" />
<ClCompile Include="gme\Blip_Buffer.cpp" />
<ClCompile Include="gme\Bml_Parser.cpp" />
<ClCompile Include="gme\c140.c" />
<ClCompile Include="gme\C140_Emu.cpp" />
<ClCompile Include="gme\Classic_Emu.cpp" />
<ClCompile Include="gme\dac_control.c" />
<ClCompile Include="gme\Data_Reader.cpp" />
<ClCompile Include="gme\dbopl.cpp" />
<ClCompile Include="gme\Downsampler.cpp" />
<ClCompile Include="gme\Dual_Resampler.cpp" />
<ClCompile Include="gme\Effects_Buffer.cpp" />
<ClCompile Include="gme\Fir_Resampler.cpp" />
<ClCompile Include="gme\fm.c" />
<ClCompile Include="gme\fm2612.c" />
<ClCompile Include="gme\fmopl.cpp" />
<ClCompile Include="gme\Gbs_Core.cpp" />
<ClCompile Include="gme\Gbs_Cpu.cpp" />
<ClCompile Include="gme\Gbs_Emu.cpp" />
<ClCompile Include="gme\Gb_Apu.cpp" />
<ClCompile Include="gme\Gb_Cpu.cpp" />
<ClCompile Include="gme\Gb_Oscs.cpp" />
<ClCompile Include="gme\gme.cpp" />
<ClCompile Include="gme\gme_custom_dprintf.c" />
<ClCompile Include="gme\Gme_File.cpp" />
<ClCompile Include="gme\Gme_Loader.cpp" />
<ClCompile Include="gme\Gym_Emu.cpp" />
<ClCompile Include="gme\Hes_Apu.cpp" />
<ClCompile Include="gme\Hes_Apu_Adpcm.cpp" />
<ClCompile Include="gme\Hes_Core.cpp" />
<ClCompile Include="gme\Hes_Cpu.cpp" />
<ClCompile Include="gme\Hes_Emu.cpp" />
<ClCompile Include="gme\higan\dsp\dsp.cpp" />
<ClCompile Include="gme\higan\dsp\SPC_DSP.cpp" />
<ClCompile Include="gme\higan\processor\spc700\spc700.cpp" />
<ClCompile Include="gme\higan\smp\smp.cpp" />
<ClCompile Include="gme\higan\smp\timing.cpp" />
<ClCompile Include="gme\k051649.c" />
<ClCompile Include="gme\K051649_Emu.cpp" />
<ClCompile Include="gme\k053260.c" />
<ClCompile Include="gme\K053260_Emu.cpp" />
<ClCompile Include="gme\k054539.c" />
<ClCompile Include="gme\K054539_Emu.cpp" />
<ClCompile Include="gme\Kss_Core.cpp" />
<ClCompile Include="gme\Kss_Cpu.cpp" />
<ClCompile Include="gme\Kss_Emu.cpp" />
<ClCompile Include="gme\Kss_Scc_Apu.cpp" />
<ClCompile Include="gme\M3u_Playlist.cpp" />
<ClCompile Include="gme\Multi_Buffer.cpp" />
<ClCompile Include="gme\Music_Emu.cpp" />
<ClCompile Include="gme\Nes_Apu.cpp" />
<ClCompile Include="gme\Nes_Cpu.cpp" />
<ClCompile Include="gme\Nes_Fds_Apu.cpp" />
<ClCompile Include="gme\Nes_Fme7_Apu.cpp" />
<ClCompile Include="gme\Nes_Namco_Apu.cpp" />
<ClCompile Include="gme\Nes_Oscs.cpp" />
<ClCompile Include="gme\Nes_Vrc6_Apu.cpp" />
<ClCompile Include="gme\Nes_Vrc7_Apu.cpp" />
<ClCompile Include="gme\Nsfe_Emu.cpp" />
<ClCompile Include="gme\Nsf_Core.cpp" />
<ClCompile Include="gme\Nsf_Cpu.cpp" />
<ClCompile Include="gme\Nsf_Emu.cpp" />
<ClCompile Include="gme\Nsf_Impl.cpp" />
<ClCompile Include="gme\okim6258.c" />
<ClCompile Include="gme\Okim6258_Emu.cpp" />
<ClCompile Include="gme\okim6295.c" />
<ClCompile Include="gme\Okim6295_Emu.cpp" />
<ClCompile Include="gme\Opl_Apu.cpp" />
<ClCompile Include="gme\pwm.c" />
<ClCompile Include="gme\Pwm_Emu.cpp" />
<ClCompile Include="gme\qmix.c" />
<ClCompile Include="gme\Qsound_Apu.cpp" />
<ClCompile Include="gme\Resampler.cpp" />
<ClCompile Include="gme\Rf5C164_Emu.cpp" />
<ClCompile Include="gme\rf5c68.c" />
<ClCompile Include="gme\Rf5C68_Emu.cpp" />
<ClCompile Include="gme\Rom_Data.cpp" />
<ClCompile Include="gme\Sap_Apu.cpp" />
<ClCompile Include="gme\Sap_Core.cpp" />
<ClCompile Include="gme\Sap_Cpu.cpp" />
<ClCompile Include="gme\Sap_Emu.cpp" />
<ClCompile Include="gme\scd_pcm.c" />
<ClCompile Include="gme\segapcm.c" />
<ClCompile Include="gme\SegaPcm_Emu.cpp" />
<ClCompile Include="gme\Sgc_Core.cpp" />
<ClCompile Include="gme\Sgc_Cpu.cpp" />
<ClCompile Include="gme\Sgc_Emu.cpp" />
<ClCompile Include="gme\Sgc_Impl.cpp" />
<ClCompile Include="gme\Sms_Apu.cpp" />
<ClCompile Include="gme\Sms_Fm_Apu.cpp" />
<ClCompile Include="gme\Spc_Emu.cpp" />
<ClCompile Include="gme\Spc_Filter.cpp" />
<ClCompile Include="gme\Spc_Sfm.cpp" />
<ClCompile Include="gme\s_deltat.c" />
<ClCompile Include="gme\s_logtbl.c" />
<ClCompile Include="gme\s_opl.c" />
<ClCompile Include="gme\s_opltbl.c" />
<ClCompile Include="gme\Track_Filter.cpp" />
<ClCompile Include="gme\Upsampler.cpp" />
<ClCompile Include="gme\Vgm_Core.cpp" />
<ClCompile Include="gme\Vgm_Emu.cpp" />
<ClCompile Include="gme\ym2151.c" />
<ClCompile Include="gme\Ym2151_Emu.cpp" />
<ClCompile Include="gme\Ym2203_Emu.cpp" />
<ClCompile Include="gme\ym2413.c" />
<ClCompile Include="gme\Ym2413_Emu.cpp" />
<ClCompile Include="gme\Ym2608_Emu.cpp" />
<ClCompile Include="gme\Ym2610b_Emu.cpp" />
<ClCompile Include="gme\Ym2612_Emu.cpp" />
<ClCompile Include="gme\Ym3812_Emu.cpp" />
<ClCompile Include="gme\ymdeltat.cpp" />
<ClCompile Include="gme\Ymf262_Emu.cpp" />
<ClCompile Include="gme\ymz280b.c" />
<ClCompile Include="gme\Ymz280b_Emu.cpp" />
<ClCompile Include="gme\Z80_Cpu.cpp" />
<ClCompile Include="plugin.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,93 @@
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2004-2019 musikcube team
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of the author nor the names of other contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; 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.
//
//////////////////////////////////////////////////////////////////////////////
#include <core/sdk/constants.h>
#include <core/sdk/IPlugin.h>
#include <core/sdk/IDecoderFactory.h>
#include <core/sdk/IDebug.h>
#include "OpenMptDecoder.h"
#ifdef WIN32
#include <Windows.h>
#define DLLEXPORT __declspec(dllexport)
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
return true;
}
#else
#define DLLEXPORT
#endif
using namespace musik::core::sdk;
IDebug* debug = nullptr;
class OpenMptPlugin: public IPlugin {
public:
virtual void Release() { delete this; };
virtual const char* Name() { return "libopenmpt IDecoder"; }
virtual const char* Version() { return "0.1.0"; }
virtual const char* Author() { return "clangen"; }
virtual const char* Guid() { return "c367f42f-389a-4378-966c-1f96dad6a66a"; }
virtual bool Configurable() { return false; }
virtual void Configure() { }
virtual void Reload() { }
virtual int SdkVersion() { return musik::core::sdk::SdkVersion; }
};
class OpenMptDecoderFactory: public IDecoderFactory {
public:
virtual IDecoder* CreateDecoder() override {
return new OpenMptDecoder();
}
virtual void Release() override {
delete this;
}
virtual bool CanHandle(const char* type) const override {
return false;
}
};
extern "C" DLLEXPORT IPlugin* GetPlugin() {
return new OpenMptPlugin();
}
extern "C" DLLEXPORT IDecoderFactory* GetDecoderFactory() {
return new OpenMptDecoderFactory();
}
extern "C" DLLEXPORT void SetDebug(IDebug* debug) {
::debug = debug;
}