123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- #ifndef LIBOPENMPT_EXT_HPP
- #define LIBOPENMPT_EXT_HPP
- #include "libopenmpt_config.h"
- #include "libopenmpt.hpp"
- namespace openmpt {
- class module_ext_impl;
- class LIBOPENMPT_CXX_API module_ext : public module {
-
- private:
- module_ext_impl * ext_impl;
- private:
-
- 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:
-
-
- void * get_interface( const std::string & interface_id );
- };
- 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)
-
- enum effect_type {
- effect_unknown = 0,
- effect_general = 1,
- effect_global = 2,
- effect_volume = 3,
- effect_panning = 4,
- effect_pitch = 5
- };
-
-
- virtual effect_type get_pattern_row_channel_volume_effect_type( std::int32_t pattern, std::int32_t row, std::int32_t channel ) const = 0;
-
-
- virtual effect_type get_pattern_row_channel_effect_type( std::int32_t pattern, std::int32_t row, std::int32_t channel ) const = 0;
- };
- #ifndef LIBOPENMPT_EXT_INTERFACE_INTERACTIVE
- #define LIBOPENMPT_EXT_INTERFACE_INTERACTIVE
- #endif
- LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE(interactive)
- class interactive {
- LIBOPENMPT_EXT_CXX_INTERFACE(interactive)
-
-
- virtual void set_current_speed( std::int32_t speed ) = 0;
-
-
- virtual void set_current_tempo( std::int32_t tempo ) = 0;
-
-
- virtual void set_tempo_factor( double factor ) = 0;
-
-
- virtual double get_tempo_factor( ) const = 0;
-
-
-
- virtual void set_pitch_factor( double factor ) = 0;
-
-
- virtual double get_pitch_factor( ) const = 0;
-
-
- virtual void set_global_volume( double volume ) = 0;
-
-
- virtual double get_global_volume( ) const = 0;
-
-
-
- virtual void set_channel_volume( std::int32_t channel, double volume ) = 0;
-
-
- virtual double get_channel_volume( std::int32_t channel ) const = 0;
-
-
- virtual void set_channel_mute_status( std::int32_t channel, bool mute ) = 0;
-
-
- virtual bool get_channel_mute_status( std::int32_t channel ) const = 0;
-
-
-
- virtual void set_instrument_mute_status( std::int32_t instrument, bool mute ) = 0;
-
-
- virtual bool get_instrument_mute_status( std::int32_t instrument ) const = 0;
-
-
- virtual std::int32_t play_note( std::int32_t instrument, std::int32_t note, double volume, double panning ) = 0;
-
-
- virtual void stop_note( std::int32_t channel ) = 0;
- };
- #ifndef LIBOPENMPT_EXT_INTERFACE_INTERACTIVE2
- #define LIBOPENMPT_EXT_INTERFACE_INTERACTIVE2
- #endif
- LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE(interactive2)
- class interactive2 {
- LIBOPENMPT_EXT_CXX_INTERFACE(interactive2)
-
-
- virtual void note_off(int32_t channel ) = 0;
-
-
- virtual void note_fade(int32_t channel) = 0;
-
-
- virtual void set_channel_panning(int32_t channel, double panning ) = 0;
-
-
- virtual double get_channel_panning( int32_t channel ) = 0;
-
-
-
- virtual void set_note_finetune(int32_t channel, double finetune ) = 0;
-
-
- virtual double get_note_finetune( int32_t channel ) = 0;
- };
- #undef LIBOPENMPT_DECLARE_EXT_CXX_INTERFACE
- #undef LIBOPENMPT_EXT_CXX_INTERFACE
- }
- }
- #endif
|