예제 #1
0
BOOL IsMMFile(const char* fname)
{
	char extlist[1024], *ext;
	if(!strcasecmp(fname,"cdaudio")) return TRUE;
	if(!ext_cmp(fname,"pcb")) return TRUE;
	GetProfileString("mci extensions",NULL,"",extlist,sizeof(extlist));
	for(ext=extlist; *ext; ++ext) {
		if(!ext_cmp(fname,ext)) return TRUE;
		while(*++ext);
	}
	return FALSE;
}
예제 #2
0
BOOL IsMMFile(const wchar_t* fname)
{
	wchar_t extlist[1024], *ext;
	if(!wcscasecmp(fname,L"cdaudio") || !ext_cmp(fname,L"pcb"))
		return 1;
	GetProfileString(L"mci extensions", NULL, L"", extlist, _countof(extlist));
	for(ext=extlist; *ext; ++ext) {
		if(!ext_cmp(fname,ext))
			return 1;
		while(*++ext);
	}
	return 0;
}
예제 #3
0
파일: alarm.c 프로젝트: andrejtm/T-Clock
//=================================================*
// ------------------------ Play Selected Alarm File
//===================================================*
BOOL PlayFile(HWND hwnd, const char* fname, DWORD dwLoops)
{
	char file[MAX_PATH];
	if(!fname[0] || fname[0]=='<') return FALSE;
	if(fname[0]!='/' && fname[0]!='\\' && fname[1]!=':' // no abs path
	&&(fname[0]!='.' || (fname[1]!='/' && fname[1]!='\\' && (fname[1]!='.' ||  (fname[2]!='/' && fname[2]!='\\'))))) // no relative path (strict relative)
	{ // do it relative to "waves/"
		char app[MAX_PATH];
		const size_t tlen=api.root_len;
		const size_t len=strlen(fname)+1; // incl. terminating null
		if(len<MAX_PATH-tlen-7){
			memcpy(file, api.root, tlen); // absolute path is at least required by .pcb / PlayNoSoundThread (not for .wav)
			memcpy(file+tlen, "\\waves\\", 7);
			memcpy(file+tlen+7, fname, len);
			if(api.GetFileAndOption(file, app, NULL) == 0){
				fname = file;
			}
		}
	}
	
	if(ext_cmp(fname, "wav") == 0) {
		if(m_bMCIPlaying) return FALSE;
		return PlayWave(hwnd, fname, dwLoops);
	}
	
	if(ext_cmp(fname, "pcb") == 0) {
		if(m_bMCIPlaying) return FALSE;
		PlayNoSoundThread(hwnd, fname, dwLoops);
		return TRUE;
	}
	
	else if(IsMMFile(fname)) {
		char command[MIN_BUFF+MAX_PATH];
		if(m_bMCIPlaying) return FALSE;
		strcpy(command, "open \"");
		strcat(command, fname);
		strcat(command, "\" alias myfile");
		if(mciSendString(command, NULL, 0, NULL) == 0) {
			strcpy(command, "set myfile time format ");
			if(strcasecmp(fname, "cdaudio") == 0 || ext_cmp(fname, "cda") == 0) {
				strcat(command, "tmsf"); m_bTrack = TRUE;
			} else {
				strcat(command, "milliseconds"); m_bTrack = FALSE;
			}
			mciSendString(command, NULL, 0, NULL);
			
			m_nTrack = -1;
			if(ext_cmp(fname, "cda") == 0) {
				const char* p;
				p = fname; m_nTrack = 0;
				while(*p) {
					if('0' <= *p && *p <= '9') m_nTrack = m_nTrack * 10 + *p - '0';
					p++;
				}
			}
			
			if(PlayMCI(hwnd, m_nTrack) == 0) {
				m_bMCIPlaying = TRUE;
				m_countPlay = dwLoops;
			} else mciSendString("close myfile", NULL, 0, NULL);
		} return m_bMCIPlaying;
	} else api.ExecFile(fname,hwnd);
	return FALSE;
}