xref: /MusicPlayer2/MusicPlayer2/MciCore.h (revision 8959a120c2c1a8b30f887255062f37449f37dee8)
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