亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? s_sound.c

?? 游戲類程序源代碼---WinDoom 3D源程序.zip
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	    
	if (n>1)
	{
	    for (i=0; i<numChannels ; i++)
	    {
		if (channels[i].sfxinfo == &S_sfx[sfx_sawidl]
		    || channels[i].sfxinfo == &S_sfx[sfx_sawful]
		    || channels[i].sfxinfo == &S_sfx[sfx_sawhit])
		{
		    fprintf(stderr,
			    "chn: sfxinfo=0x%lx, origin=0x%lx, "
			    "handle=%d\n",
			    channels[i].sfxinfo,
			    channels[i].origin,
			    channels[i].handle);
		}
	    }
	    fprintf(stderr, "\n");
	}
    }
}
#endif
 
}




void S_StopSound(void *origin)
{

    int cnum;

    for (cnum=0 ; cnum<numChannels ; cnum++)
    {
	if (channels[cnum].sfxinfo && channels[cnum].origin == origin)
	{
	    S_StopChannel(cnum);
	    break;
	}
    }
}









//
// Stop and resume music, during game PAUSE.
//
void S_PauseSound(void)
{
    if (mus_playing && !mus_paused)
    {
	I_PauseSong(mus_playing->handle);
	mus_paused = true;
    }
}

void S_ResumeSound(void)
{
    if (mus_playing && mus_paused)
    {
	I_ResumeSong(mus_playing->handle);
	mus_paused = false;
    }
}


//
// Updates music & sounds
//
void S_UpdateSounds(void* listener_p)
{
    int		audible;
    int		cnum;
    int		volume;
    int		sep;
    int		pitch;
    sfxinfo_t*	sfx;
    channel_t*	c;
    
    mobj_t*	listener = (mobj_t*)listener_p;


    
    // Clean up unused data.
    // This is currently not done for 16bit (sounds cached static).
    // DOS 8bit remains. 
    /*if (gametic > nextcleanup)
    {
	for (i=1 ; i<NUMSFX ; i++)
	{
	    if (S_sfx[i].usefulness < 1
		&& S_sfx[i].usefulness > -1)
	    {
		if (--S_sfx[i].usefulness == -1)
		{
		    Z_ChangeTag(S_sfx[i].data, PU_CACHE);
		    S_sfx[i].data = 0;
		}
	    }
	}
	nextcleanup = gametic + 15;
    }*/
    
    for (cnum=0 ; cnum<numChannels ; cnum++)
    {
	c = &channels[cnum];
	sfx = c->sfxinfo;

	if (c->sfxinfo)
	{
	    if (I_SoundIsPlaying(c->handle))
	    {
		// initialize parameters
		volume = snd_SfxVolume;
		pitch = NORM_PITCH;
		sep = NORM_SEP;

		if (sfx->link)
		{
		    pitch = sfx->pitch;
		    volume += sfx->volume;
		    if (volume < 1)
		    {
			S_StopChannel(cnum);
			continue;
		    }
		    else if (volume > snd_SfxVolume)
		    {
			volume = snd_SfxVolume;
		    }
		}

		// check non-local sounds for distance clipping
		//  or modify their params
		if (c->origin && listener_p != c->origin)
		{
		    audible = S_AdjustSoundParams(listener,
						  c->origin,
						  &volume,
						  &sep,
						  &pitch);
		    
		    if (!audible)
		    {
			S_StopChannel(cnum);
		    }
		    else
			I_UpdateSoundParams(c->handle, volume, sep, pitch);
		}
	    }
	    else
	    {
		// if channel is allocated but sound has stopped,
		//  free it
		S_StopChannel(cnum);
	    }
	}
    }
    // kill music if it is a single-play && finished
    // if (	mus_playing
    //      && !I_QrySongPlaying(mus_playing->handle)
    //      && !mus_paused )
    // S_StopMusic();
}


void S_SetMusicVolume(int volume)
{
    if (volume < 0 || volume > 127)
    {
	I_Error("Attempt to set music volume at %d",
		volume);
    }    

    I_SetMusicVolume(127);
    I_SetMusicVolume(volume);
    snd_MusicVolume = volume;
}



void S_SetSfxVolume(int volume)
{

    if (volume < 0 || volume > 127)
	I_Error("Attempt to set sfx volume at %d", volume);

    snd_SfxVolume = volume;

}

//
// Starts some music with the music id found in sounds.h.
//
void S_StartMusic(int m_id)
{
    S_ChangeMusic(m_id, false);
}

void
S_ChangeMusic
( int			musicnum,
  int			looping )
{
    musicinfo_t*	music;
    char		namebuf[9];

    if ( (musicnum <= mus_None)
	 || (musicnum >= NUMMUSIC) )
    {
	I_Error("Bad music number %d", musicnum);
    }
    else
	music = &S_music[musicnum];

    if (mus_playing == music)
	return;

    // shutdown old music
    S_StopMusic();

    // get lumpnum if neccessary
    if (!music->lumpnum)
    {
	sprintf(namebuf, "d_%s", music->name);
	music->lumpnum = W_GetNumForName(namebuf);
    }

    // load & register it
    music->data = (void *) W_CacheLumpNum(music->lumpnum, PU_MUSIC);
    music->handle = I_RegisterSong(music->data);

    // play it
    I_PlaySong(music->handle, looping);

    mus_playing = music;
}


void S_StopMusic(void)
{
    if (mus_playing)
    {
	if (mus_paused)
	    I_ResumeSong(mus_playing->handle);

	I_StopSong(mus_playing->handle);
	I_UnRegisterSong(mus_playing->handle);
	Z_ChangeTag(mus_playing->data, PU_CACHE);
	
	mus_playing->data = 0;
	mus_playing = 0;
    }
}




void S_StopChannel(int cnum)
{

    int		i;
    channel_t*	c = &channels[cnum];

    if (c->sfxinfo)
    {
	// stop the sound playing
	if (I_SoundIsPlaying(c->handle))
	{
#ifdef SAWDEBUG
	    if (c->sfxinfo == &S_sfx[sfx_sawful])
		fprintf(stderr, "stopped\n");
#endif
	    I_StopSound(c->handle);
	}

	// check to see
	//  if other channels are playing the sound
	for (i=0 ; i<numChannels ; i++)
	{
	    if (cnum != i
		&& c->sfxinfo == channels[i].sfxinfo)
	    {
		break;
	    }
	}
	
	// degrade usefulness of sound data
	c->sfxinfo->usefulness--;

	c->sfxinfo = 0;
    }
}



//
// Changes volume, stereo-separation, and pitch variables
//  from the norm of a sound effect to be played.
// If the sound is not audible, returns a 0.
// Otherwise, modifies parameters and returns 1.
//
int
S_AdjustSoundParams
( mobj_t*	listener,
  mobj_t*	source,
  int*		vol,
  int*		sep,
  int*		pitch )
{
    fixed_t	approx_dist;
    fixed_t	adx;
    fixed_t	ady;
    angle_t	angle;

    // calculate the distance to sound origin
    //  and clip it if necessary
    adx = abs(listener->x - source->x);
    ady = abs(listener->y - source->y);

    // From _GG1_ p.428. Appox. eucledian distance fast.
    approx_dist = adx + ady - ((adx < ady ? adx : ady)>>1);
    
    if (gamemap != 8
	&& approx_dist > S_CLIPPING_DIST)
    {
	return 0;
    }
    
    // angle of source to listener
    angle = R_PointToAngle2(listener->x,
			    listener->y,
			    source->x,
			    source->y);

    if (angle > listener->angle)
	angle = angle - listener->angle;
    else
	angle = angle + (0xffffffff - listener->angle);

    angle >>= ANGLETOFINESHIFT;

    // stereo separation
    *sep = 128 - (FixedMul(S_STEREO_SWING,finesine[angle])>>FRACBITS);

    // volume calculation
    if (approx_dist < S_CLOSE_DIST)
    {
	*vol = snd_SfxVolume;
    }
    else if (gamemap == 8)
    {
	if (approx_dist > S_CLIPPING_DIST)
	    approx_dist = S_CLIPPING_DIST;

	*vol = 15+ ((snd_SfxVolume-15)
		    *((S_CLIPPING_DIST - approx_dist)>>FRACBITS))
	    / S_ATTENUATOR;
    }
    else
    {
	// distance effect
	*vol = (snd_SfxVolume
		* ((S_CLIPPING_DIST - approx_dist)>>FRACBITS))
	    / S_ATTENUATOR; 
    }
    
    return (*vol > 0);
}




//
// S_getChannel :
//   If none available, return -1.  Otherwise channel #.
//
int S_getChannel( void *origin, sfxinfo_t *sfxinfo, int sfxid )
   {
    // channel number to use
    int		cnum;
        
    channel_t*	c;

    // Find an open channel
    //for (cnum = 0; cnum < numChannels; cnum++)
    for (cnum = 0; cnum < NUM_DSBUFFERS; cnum++)
       {
        if (!channels[cnum].sfxinfo)
            break;
        else
        if (origin && channels[cnum].origin == origin)
           {
            S_StopChannel(cnum);
            break;
           }
       }

    // None available
    if (cnum == NUM_DSBUFFERS)
       {
        // Look for lower priority
        for (cnum = NUMSFX; cnum < NUM_DSBUFFERS; cnum++)
             if (channels[cnum].sfxinfo->priority >= sfxinfo->priority)
                 break;

        if (cnum == numChannels)
           {
            // FUCK!  No lower priority.  Sorry, Charlie.    
            return -1;
           }
        else
           {
            // Otherwise, kick out lower priority.
            S_StopChannel(cnum);
           }
       }

    c = &channels[cnum];

    // channel is decided to be cnum.
    c->sfxinfo = sfxinfo;
    c->origin = origin;

    return cnum;
   }




?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
69堂精品视频| 99精品视频一区二区| 911精品产国品一二三产区| 亚洲乱码国产乱码精品精小说| 97久久超碰国产精品| 亚洲乱码中文字幕综合| 欧洲亚洲国产日韩| 午夜精品影院在线观看| 日韩欧美另类在线| 国产精品 欧美精品| 中文字幕二三区不卡| av成人免费在线观看| 亚洲国产精品一区二区久久恐怖片 | 国产一区二区在线观看免费 | 国产女人18毛片水真多成人如厕| 国产激情一区二区三区| 亚洲桃色在线一区| 56国语精品自产拍在线观看| 国产成人在线视频播放| 亚洲乱码中文字幕| 欧美videossexotv100| a亚洲天堂av| 香蕉加勒比综合久久| 久久久久久久久久看片| 色综合久久综合中文综合网| 日本亚洲三级在线| 中文字幕不卡三区| 欧美日韩在线一区二区| 国产精品一区二区果冻传媒| 亚洲专区一二三| 精品成人a区在线观看| 91天堂素人约啪| 久久99久久久欧美国产| 亚洲欧美日韩成人高清在线一区| 欧美久久高跟鞋激| 丁香啪啪综合成人亚洲小说| 亚洲电影第三页| 国产丝袜欧美中文另类| 欧美视频在线一区二区三区| 国产精品综合av一区二区国产馆| 亚洲综合在线免费观看| 久久九九久久九九| 欧美视频在线观看一区二区| 国产成人激情av| 久久精品国产一区二区三区免费看| 日韩美女视频一区二区| 欧美精品一区二区在线观看| 欧美亚日韩国产aⅴ精品中极品| 国产99久久久精品| 九九九久久久精品| 日韩精品一级二级 | 欧美视频一二三区| 91麻豆免费看| 成人性生交大片免费看中文网站| 蜜乳av一区二区三区| 亚洲精品免费看| 国产欧美一区二区三区鸳鸯浴| 日韩精品最新网址| 7799精品视频| 欧美男人的天堂一二区| 91尤物视频在线观看| 国产乱码精品1区2区3区| 免费在线观看一区二区三区| 亚洲线精品一区二区三区 | 亚洲精品综合在线| 中文字幕av资源一区| 国产亚洲美州欧州综合国| 日韩一级片网站| 在线不卡免费av| 欧美撒尿777hd撒尿| 色香蕉成人二区免费| 成人免费高清视频在线观看| 粉嫩13p一区二区三区| 国产精品主播直播| 国产精品白丝jk白祙喷水网站 | 久久精品人人做人人综合| 日韩欧美一级二级| 日韩一级片在线播放| 精品日韩在线观看| 日韩一区二区麻豆国产| 日韩精品一区二区三区在线 | 欧美综合色免费| 欧美影院午夜播放| 色噜噜偷拍精品综合在线| 色婷婷av一区| 欧美日韩精品福利| 欧美一区三区二区| 日韩视频免费观看高清完整版在线观看| 欧美顶级少妇做爰| 日韩精品中文字幕一区| 久久人人超碰精品| 国产精品九色蝌蚪自拍| 洋洋av久久久久久久一区| 日韩高清不卡一区| 狠狠色丁香久久婷婷综合_中| 国产一区二区三区高清播放| 不卡av免费在线观看| 91久久精品一区二区二区| 欧美日韩三级在线| 日韩一区二区三区视频在线观看| 久久影视一区二区| 国产精品久久777777| 性做久久久久久久久| 久久机这里只有精品| 国产成人精品综合在线观看| 一本色道**综合亚洲精品蜜桃冫| 精品视频999| 久久久久国产精品人| 亚洲欧美日韩中文播放| 天天综合天天综合色| 国产精品88av| 欧美日韩精品免费| 国产亲近乱来精品视频| 一区二区三区日韩精品视频| 老司机免费视频一区二区| 成人激情综合网站| 8v天堂国产在线一区二区| 国产香蕉久久精品综合网| 亚洲综合一二区| 国产一二三精品| 欧美日韩在线直播| 久久精品欧美日韩| 亚洲不卡在线观看| 成人亚洲一区二区一| 91精品国产aⅴ一区二区| 国产精品乱码人人做人人爱| 婷婷夜色潮精品综合在线| 粉嫩av一区二区三区在线播放| 欧美日韩激情一区二区三区| 国产精品天美传媒| 日本aⅴ免费视频一区二区三区| 不卡的av在线| 久久亚洲捆绑美女| 图片区小说区区亚洲影院| av在线这里只有精品| 欧美mv日韩mv亚洲| 樱花影视一区二区| 国产高清精品久久久久| 91精品国产综合久久精品| 亚洲人成网站影音先锋播放| 国产精品99久久久久久宅男| 91精品国产福利| 五月婷婷综合网| 日本久久电影网| 中文字幕在线观看不卡| 国产乱色国产精品免费视频| 日韩欧美色电影| 天使萌一区二区三区免费观看| 91国产免费看| 国产精品初高中害羞小美女文| 国产又粗又猛又爽又黄91精品| 91精品国产综合久久香蕉麻豆 | 国产精品动漫网站| 国产精品一区二区三区乱码| 精品卡一卡二卡三卡四在线| 男男视频亚洲欧美| 欧美区在线观看| 亚洲成人综合在线| 91片在线免费观看| 国产精品第一页第二页第三页| 成人做爰69片免费看网站| 久久久久一区二区三区四区| 精品一二三四区| 精品国产a毛片| 国产一区二区三区在线看麻豆| 日韩你懂的在线观看| 蜜桃精品视频在线| 欧美一区二区三区白人| 日韩av在线免费观看不卡| 91精品国模一区二区三区| 奇米影视一区二区三区小说| 欧美一区二区福利视频| 青娱乐精品视频在线| 日韩欧美亚洲国产另类| 精品在线播放免费| 精品国产免费一区二区三区四区| 美女尤物国产一区| 精品成人一区二区| 国产成人精品免费看| 日韩美女视频19| 欧美午夜影院一区| 日韩电影一区二区三区四区| 精品日韩在线一区| 国产成人av福利| 1000精品久久久久久久久| 91影视在线播放| 日日嗨av一区二区三区四区| 一区二区三区国产精华| 在线观看日韩一区| 香蕉av福利精品导航| 精品国产一区二区三区av性色 | 国产色一区二区| 99re这里只有精品6| 亚洲va欧美va天堂v国产综合| 日韩视频在线一区二区| 国产a视频精品免费观看| 亚洲乱码国产乱码精品精的特点| 欧美电影在哪看比较好| 国产美女精品在线| 亚洲欧美日韩人成在线播放|