예제 #1
0
bool CSoundManager::PlayWave3D(int x, int y, int Freq, int Nr)
{
	int   vol, pan;
	float xdiff, ydiff, Abstand;

	xdiff = ((pPlayer[0]->xpos + 45)  - x);
	ydiff = ((pPlayer[0]->ypos + 45)  - y);

	Abstand = float(sqrt((xdiff * xdiff) + (ydiff * ydiff)));

	vol = int(100-float(Abstand/6.0f));
	if (vol < 0)
		vol = 0;
	else
	{
		// Sound links oder rechts vom Spieler ?
		if (x < pPlayer[0]->xpos + 45)
		{
			pan = 128 - (100 - vol);
			if (pan < 0)
				pan = 0;
		}
		else
		{
			pan = 128 + (100 - vol);
			if (pan > 255)
				pan = 255;
		}

		PlayWave(vol, pan, Freq, Nr);
	}

	return true;
} // PlaySound
예제 #2
0
void CSoundManager::FadeWave(int Nr, int Mode)
{	
	// Sound soll eingefadet werden?
	if (Mode == FADEMODE_IN)
	{
		// Fadet gerade garnicht? Dann abspielen
		if (its_Sounds[Nr]->FadeMode == FADEMODE_NON)
			PlayWave(1, 128, 11025, Nr);
	}

	// Sound soll ausgefadet werden?
	else
	if (Mode == FADEMODE_OUT)
	{
	}

	its_Sounds[Nr]->FadeMode = Mode;	

} // FadeWave
예제 #3
0
//刷新显示线程
void *RenderAudio(void *arg)
{
	if(!arg)
		return NULL;

	AvManager *manager = (AvManager*)arg;
	MediaPacket spkt;
	long avsize = 0;
	int ret = 0;

	//只有在没有停止信号下,才能不断地读取数据
	for(;manager->avState != STOP;)
	{
		//如果是暂停且没有快进时,才可以不断等待
		if(manager->avState == PAUSE && !manager->avSeek)
		{
			usSleep(DEFAULT_AV_WAIT);
			continue;
		}

		ret = RecvDataFromAvQueue(manager->MediaAudio,&spkt);

		if(ret < 0)
		{
			usSleep(DEFAULT_AV_WAIT);
			continue;			
		}

		if(manager->avSeek && !IsHardWareAccel())
		{
			FlushBuffers(AUDIO);
			DestroyPacket(&spkt);
			continue;
		}

		if(manager->audioDelay)
		{
			usSleep(manager->audioDelay);
			manager->audioDelay = 0;
		}

		if(spkt.data && spkt.size > 0)
		{
			void *abuf = DecodeAudioStream(&spkt,&avsize);

			//播放音乐
			if(abuf && avsize > 0)
			{
				PlayWave(abuf,avsize);

				//声音时间戳部分
				manager->audioClock = (double)avsize/(double)manager->audioBasePara;

				if(spkt.pts != AV_NOPTS_VALUE)
					manager->playerClock = AVTimeToSecond(spkt.pts,manager->audioTimeBase) + manager->audioClock;
				else
					manager->playerClock += manager->audioClock;

				manager->last_audio_pts = manager->playerClock;

			}
		}
		else
			FreeAlloc(spkt.data);		
	}

	return NULL;
}
예제 #4
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;
}