1 #pragma once 2 #include "IPlayerCore.h" 3 #include "DllLib.h" 4 5 class CMciCore : 6 public IPlayerCore, public CDllLib 7 { 8 typedef DWORD MCIERROR; /* error return code, 0 means no error */ 9 10 //使用动态加载的方式加载MCI的API,如果没有使用MCI内核,则不加载 11 typedef MCIERROR(WINAPI *_mciSendStringW)(LPCWSTR lpstrCommand, LPWSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback); 12 typedef BOOL(WINAPI *_mciGetErrorStringW)(MCIERROR mcierr, LPWSTR pszText, UINT cchText); 13 14 public: 15 CMciCore(); 16 ~CMciCore(); 17 18 virtual void InitCore() override; 19 virtual void UnInitCore() override; 20 21 virtual std::wstring GetAudioType() override; 22 virtual int GetChannels() override; 23 virtual int GetFReq() override; 24 virtual std::wstring GetSoundFontName() override; 25 26 virtual void Open(const wchar_t* file_path) override; 27 virtual void Close() override; 28 virtual void Play() override; 29 virtual void Pause() override; 30 virtual void Stop() override; 31 virtual void SetVolume(int volume) override; 32 virtual void SetSpeed(float speed) override; 33 virtual void SetPitch(int pitch) override; 34 virtual bool SongIsOver() override; 35 36 virtual int GetCurPosition() override; 37 virtual int GetSongLength() override; 38 virtual void SetCurPosition(int position) override; 39 virtual void GetAudioInfo(SongInfo& song_info, int flag = AF_LENGTH | AF_BITRATE | AF_TAG_INFO) override; 40 virtual void GetAudioInfo(const wchar_t* file_path, SongInfo& song_info, int flag = AF_LENGTH | AF_BITRATE | AF_TAG_INFO) override; 41 42 virtual bool IsMidi() override; 43 virtual bool IsMidiConnotPlay() override; 44 virtual std::wstring GetMidiInnerLyric() override; 45 virtual MidiInfo GetMidiInfo() override; 46 virtual bool MidiNoLyric() override; 47 virtual PlayingState GetPlayingState() override; 48 49 virtual void ApplyEqualizer(int channel, int gain) override; 50 virtual void SetReverb(int mix, int time) override; 51 virtual void ClearReverb() override; 52 virtual void GetFFTData(float fft_data[FFT_SAMPLE]) override; 53 54 virtual int GetErrorCode() override; 55 virtual std::wstring GetErrorInfo(int error_code) override; 56 virtual std::wstring GetErrorInfo() override; 57 GetCoreType()58 virtual PlayerCoreType GetCoreType() override { return PT_MCI; } 59 60 virtual bool EncodeAudio(SongInfo song_info, const wstring& dest_file_path, EncodeFormat encode_format, void* encode_para, int dest_freq, EncodeAudioProc proc) override; 61 virtual bool InitEncoder() override; 62 virtual void UnInitEncoder() override; 63 virtual bool IsFreqConvertAvailable() override; 64 65 private: 66 void GetMidiPosition(); 67 int GetMciSongLength(const std::wstring& file_path); 68 int GetMciBitrate(const std::wstring& file_path); 69 70 virtual bool GetFunction() override; 71 72 private: 73 std::wstring m_file_path; 74 PlayingState m_playing{}; 75 std::wstring m_file_type; 76 MidiInfo m_midi_info; 77 78 MCIERROR m_error_code{ 0 }; 79 80 _mciSendStringW mciSendStringW; 81 _mciGetErrorStringW mciGetErrorStringW; 82 }; 83