123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #ifndef NULLSOFT_MCIPLAYH
- #define NULLSOFT_MCIPLAYH
- #include "CDPlay.h"
- #include "main.h"
- class MciPlay : public C_CDPlay {
- public:
- MciPlay()
- {
- posinms=0;
- }
- int play(wchar_t drive, int track)
- {
- g_drive = drive;
- {
- MCI_SET_PARMS sMCISet;
- g_playtrack = track;
- if (!CDOpen(&playdev, drive, L"mci"))
- {
- playdev=0;
- g_drive = 0;
- return 1;
- }
- sMCISet.dwTimeFormat = MCI_FORMAT_MILLISECONDS;
- MCISendCommand (playdev, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD_PTR) (LPVOID) &sMCISet);
- g_playlength=CDGetTrackLength(playdev,g_playtrack);
- sMCISet.dwTimeFormat = MCI_FORMAT_TMSF;
- MCISendCommand (playdev, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD_PTR) (LPVOID) &sMCISet);
- if (CDPlay(playdev,g_playtrack,FALSE,0,0,g_playlength))
- {
- CDClose(&playdev);
- playdev=0;
- g_drive = 0;
- return 1;
- }
- line.is_seekable=1;
- }
- line.SetInfo(1411,44,2,1);
- line.SAVSAInit(0,44100);
- line.VSASetInfo(2,44100);
- setvolume(a_v, a_p);
- {
- short dta[576*2] = {0};
- line.VSAAddPCMData(dta,2,16,0);
- line.SAAddPCMData(dta,2,16,0);
- }
- if (audioInit(/*config_sample*/))
- {
- }
- return 0;
- }
- void stop()
- {
- //CDStop(playdev);
- if (!done) CDPause(playdev);
- CDClose(&playdev);
- audioQuit();
- }
- void pause()
- {
- posinms=audioGetPos();
- CDPause(playdev);
- audioPause(1);
- }
- void unpause()
- {
- int pos=audioGetPos();
- CDPlay(playdev, g_playtrack, TRUE,pos/60000,(pos/1000)%60,g_playlength);
- audioPause(0);
- }
- int getlength()
- {
- return g_playlength;
- }
- int getoutputtime()
- {
- int p;
- if (paused)
- {
- return posinms;
- }
- p=audioGetPos();
- if (GetCurrentThreadId()==MainThreadId)
- {
- if ((p > g_playlength || (p-g_lastpos > 2000 && !isMediaPresent(playdev))) && !done)
- {
- done=1;
- PostMessage(line.hMainWindow,WM_WA_MPEG_EOF,0,0);
- }
- if (g_lastpos > p+2000)
- g_lastpos=p;
- }
- return p;
- }
- void setoutputtime(int time_in_ms)
- {
- CDPlay(playdev,g_playtrack,FALSE,time_in_ms/60000,(time_in_ms/1000)%60,g_playlength);
- if (paused)
- {
- audioPause(0);
- }
- audioSetPos(time_in_ms);
- g_lastpos=time_in_ms;
- if (paused)
- {
- audioPause(1);
- CDPause(playdev);
- }
- done=0;
- }
- void setvolume(int _a_v, int _a_p) {
- HMIXER hmix;
- int vol1, vol2;
- if (_a_v < 0) _a_v = 0;
- if (_a_v > 255) _a_v = 255;
- if (_a_p < -127) _a_p = -127;
- if (_a_p > 127) _a_p = 127;
- vol1 = vol2 = (_a_v*2048) / 255;
- if (_a_p > 0)
- {
- vol1 *= (127-_a_p);
- vol1 /= 127;
- }
- else if (_a_p < 0)
- {
- vol2 *= (_a_p+127);
- vol2 /= 127;
- }
- if (mixerOpen(&hmix,0,0,0,0) == MMSYSERR_NOERROR)
- {
- MIXERLINE ml={sizeof(ml),0};
- ml.dwComponentType=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;
- if (mixerGetLineInfo((HMIXEROBJ)hmix,&ml,MIXER_GETLINEINFOF_COMPONENTTYPE) == MMSYSERR_NOERROR)
- {
- MIXERLINECONTROLS mlc = {sizeof(mlc),ml.dwLineID,};
- MIXERCONTROL mc={sizeof(mc),};
- mlc.cControls=1;
- mlc.cbmxctrl=sizeof(mc);
- mlc.pamxctrl=&mc;
- mlc.dwControlType=MIXERCONTROL_CONTROLTYPE_VOLUME;
- if (mixerGetLineControls((HMIXEROBJ)hmix,&mlc,MIXER_GETLINECONTROLSF_ONEBYTYPE) == MMSYSERR_NOERROR)
- {
- MIXERCONTROLDETAILS mcd = {sizeof(mcd),mc.dwControlID,ml.cChannels,};
- MIXERCONTROLDETAILS_UNSIGNED v[2];
- mcd.cbDetails=sizeof(MIXERCONTROLDETAILS_UNSIGNED);
- mcd.paDetails=v;
- v[0].dwValue=mc.Bounds.dwMinimum + (vol1*(mc.Bounds.dwMaximum-mc.Bounds.dwMinimum))/2048;
- v[1].dwValue=mc.Bounds.dwMinimum + (vol2*(mc.Bounds.dwMaximum-mc.Bounds.dwMinimum))/2048;
- if (mixerSetControlDetails((HMIXEROBJ)hmix,&mcd,0) == MMSYSERR_NOERROR)
- {
- // yay we're done!
- }
- // else MessageBox(NULL,"mixerSetLineControlDetails()","Error",MB_OK);
- }
- //else MessageBox(NULL,"mixerGetLineControls()","Error",MB_OK);
- }
- // else MessageBox(NULL,"mixerGetLineInfo()","Error",MB_OK);
- mixerClose(hmix);
- }
- //else MessageBox(NULL,"MixerOpen()","Error",MB_OK);
- }
- private:
- int posinms;
- MCIDEVICEID playdev;
- };
- #endif
|