123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- #ifndef STRICT
- #define STRICT
- #endif
- #include "../Agave/Language/api_language.h"
- #include <windows.h>
- #include <malloc.h>
- #ifndef NOVTABLE
- #define NOVTABLE _declspec(novtable)
- #endif
- #include <mmsystem.h>
- #include "core_api.h"
- #include "../pfc/string_unicode.h"
- #include "locale.h"
- #define VER L"3.57"
- #include "utils.h"
- //#define USE_LOG
- #ifdef USE_LOG
- void log_write(char*);
- void log_start();
- void log_quit();
- #else
- #define log_write(X)
- #define log_start()
- #define log_quit()
- #endif
- class CStream;
- struct CTempoMap;
- struct CSysexMap;
- class player_base;
- class NOVTABLE MIDI_device
- {
- friend class MIDI_driver;
- private:
- MIDI_device * next;
- MIDI_driver * driver;
- string_w dev_name,dev_info;
- protected:
- void set_name(const wchar_t * src) {dev_name=src;}
- void set_info(const wchar_t * src) {dev_info=src;}
- public:
- //override me
- virtual player_base * create()=0;
- virtual GUID get_guid()=0;
- virtual ~MIDI_device() {};
- virtual bool is_default() {return 0;}
- virtual bool has_output() {return 0;}
- virtual bool has_dls() {return 0;}
- virtual bool has_freq() {return 0;}
- virtual bool volctrl_happy() {return 0;}
- const wchar_t * get_name() {return dev_name;}
- const wchar_t * get_info() {return dev_info;}
- MIDI_driver * get_driver() {return driver;}
- };
- class NOVTABLE MIDI_driver//ONLY for static objects !!!!!
- {
- private:
- static MIDI_driver * driver_list;
- MIDI_driver * next;
- MIDI_device * device_list;
- bool inited;
- void init() {if (!inited) {do_init();inited=1;};}
- void deinit() {if (inited) {do_deinit();reset_devices();inited=0;};}
- protected:
- MIDI_driver();
- ~MIDI_driver();
- void reset_devices();
- void add_device(MIDI_device * dev);//call this to add new device
- //override me
- virtual void do_init() {};
- virtual void do_deinit() {}
- public:
- static MIDI_driver * driver_enumerate(int n);
- static int driver_count();
-
- MIDI_device * device_enumerate(int n);
- int device_count();
- static MIDI_device * find_device(GUID guid_driver,GUID guid_device);
- static MIDI_driver * find_driver(GUID guid_driver);
- static MIDI_device * find_device_default();
-
- static void shutdown();
- //override me
- virtual const wchar_t * get_name()=0;
- virtual GUID get_guid()=0;
- virtual bool is_default() {return 0;}
- };
- #include "midifile.h"
- class NOVTABLE player_base
- {
- public:
- virtual ~player_base() {}
- virtual int gettime()=0;
- virtual int settime(int)=0;
- virtual void pause()=0;
- virtual void unpause()=0;
- virtual int setvol(int) {return 0;};
- virtual int setpan(int) {return 0;};
- };
- class MIDI_core
- {
- public:
- static int Init();
- static int UsesOutput() {return use_out;}
- static int OpenFile(MIDI_file * file);
- static void Close();
- static int GetSamples(void *sample_buffer, int bytes, char *killswitch);
- static void GetPCM(int * srate,int * nch,int * bps) {*srate=format_srate;*nch=format_nch;*bps=format_bps;}
- static int SetPosition(int);
- static void Pause(int pause);
- static int GetPosition(void);
- static int GetLength(void);
- static void Eof();
- static int SetVolume(int volume);
- static int SetPan(int pan);
- //setvolune/setpan safe to call at any moment
- static int player_getVol() {return volume;}
- static int player_getPan() {return pan;}
- static inline void player_setSource(CStream *s) {data_src=s;}
- static void MM_error(DWORD code);
-
- static inline MIDI_file * getFile() {return theFile;}
- static inline MIDI_device * getDevice() {return device;}
- static inline bool HavePCM() {return !!data_src;}
- static inline bool HavePlayer() {return !!plr;}
- static int IsOurFile(const char *fn);
- static void GlobalInit();
- static void GlobalQuit();
- static int Config(HWND wnd);
- static void WriteConfig();
- static int FileTypes_GetNum();
- static const char * FileTypes_GetExtension(int);
- static char * FileTypes_GetDescription(int);
- private:
- static BOOL CALLBACK KarProc(HWND wnd,UINT msg,WPARAM wp,LPARAM lp);
- static void update_vol();
- static bool use_out,use_smp;
- static MIDI_file* theFile;
- static CStream* data_src;
- static player_base* plr;
- static int format_srate,format_nch,format_bps;
- static int volume,pan;
- static bool eof;
- static UINT volmod;
- static UINT mix_dev,mix_idx;
- static HWND kwnd;
- static KAR_ENTRY *kmap;
- static UINT kmap_size,kmap_ptr;
- static char * kmap_data;
- static critical_section sync;
- static MIDI_device * device;
- };
- namespace MIDI_callback //per-winamp implementations
- {
- HWND GetMainWindow();
- HINSTANCE GetInstance();
- void NotifyEOF();
- void Error(const char *);
- void Idle(int ms=0);
- };
- //#pragma warning(disable:4800)
- void get_temp_file(char* fn);
- extern cfg_int cfg_hardware_reset;
- extern cfg_int cfg_smp,cfg_reverb,cfg_chorus,cfg_nosysex;
- extern cfg_int cfg_sampout,cfg_dm_imm;
- extern cfg_int cfg_loop_type,cfg_loop_count,cfg_loop_infinite;
- extern cfg_int cfg_wavein_dev,cfg_wavein_sr,cfg_wavein_ch,cfg_wavein_bps,cfg_wavein_src;
- extern cfg_int cfg_ctrl_x,cfg_ctrl_y;
- extern cfg_int cfg_ext_mask;
- extern cfg_string cfg_extra_exts;
- extern cfg_int cfg_volmode;
- extern cfg_int cfg_recover_tracks;
- extern cfg_int cfg_quick_seek;
- extern cfg_int cfg_rmi_def;
- extern cfg_int cfg_logvol;
- extern cfg_struct_t<GUID> cfg_driver,cfg_device;
- extern cfg_int cfg_playback_mode;
- extern cfg_int cfg_eof_delay;
- extern cfg_int cfg_bugged;
- extern cfg_int cfg_freq;
- extern cfg_int cfg_cur_tab;
- enum{BUGGED_BLAH=0x10};
- extern sysex_table cfg_sysex_table;
- void ReleaseObject(IUnknown* o);
- #include "in2.h"
- extern In_Module mod;
|