⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mplayer.c

📁 wince下著名的视频播放器源码
💻 C
📖 第 1 页 / 共 5 页
字号:
}static void DoS3MSlideDn(UWORD tick, MP_CONTROL *a, UBYTE inf){	UBYTE hi,lo;	if (inf)		a->slidespeed=inf;	else		inf=a->slidespeed;	hi=inf>>4;	lo=inf&0xf;	if (hi==0xf) {		if (!tick) a->tmpperiod+=(UWORD)lo<<2;	} else	  if (hi==0xe) {		if (!tick) a->tmpperiod+=lo;	} else {		if (tick) a->tmpperiod+=(UWORD)inf<<2;	}}static int DoS3MEffectE(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat=UniGetByte();	if (a->main.period)		DoS3MSlideDn(tick, a,dat);	return 0;}static void DoS3MSlideUp(UWORD tick, MP_CONTROL *a, UBYTE inf){	UBYTE hi,lo;	if (inf) a->slidespeed=inf;	else inf=a->slidespeed;	hi=inf>>4;	lo=inf&0xf;	if (hi==0xf) {		if (!tick) a->tmpperiod-=(UWORD)lo<<2;	} else	  if (hi==0xe) {		if (!tick) a->tmpperiod-=lo;	} else {		if (tick) a->tmpperiod-=(UWORD)inf<<2;	}}static int DoS3MEffectF(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat=UniGetByte();	if (a->main.period)		DoS3MSlideUp(tick, a,dat);	return 0;}static int DoS3MEffectI(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE inf, on, off;	inf = UniGetByte();	if (inf)		a->s3mtronof = inf;	else {		inf = a->s3mtronof;		if (!inf)			return 0;	}	if (!tick)		return 0;	on=(inf>>4)+1;	off=(inf&0xf)+1;	a->s3mtremor%=(on+off);	a->volume=(a->s3mtremor<on)?a->tmpvolume:0;	a->ownvol=1;	a->s3mtremor++;	return 0;}static int DoS3MEffectQ(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE inf;	inf = UniGetByte();	if (a->main.period) {		if (inf) {			a->s3mrtgslide=inf>>4;			a->s3mrtgspeed=inf&0xf;		}		/* only retrigger if low nibble > 0 */		if (a->s3mrtgspeed>0) {			if (!a->retrig) {				/* when retrig counter reaches 0, reset counter and restart the				   sample */				if (a->main.kick!=KICK_NOTE) a->main.kick=KICK_KEYOFF;				a->retrig=a->s3mrtgspeed;				if ((tick)||(flags&UF_S3MSLIDES)) {					switch (a->s3mrtgslide) {					case 1:					case 2:					case 3:					case 4:					case 5:						a->tmpvolume-=(1<<(a->s3mrtgslide-1));						break;					case 6:						a->tmpvolume=(2*a->tmpvolume)/3;						break;					case 7:						a->tmpvolume>>=1;						break;					case 9:					case 0xa:					case 0xb:					case 0xc:					case 0xd:						a->tmpvolume+=(1<<(a->s3mrtgslide-9));						break;					case 0xe:						a->tmpvolume=(3*a->tmpvolume)>>1;						break;					case 0xf:						a->tmpvolume=a->tmpvolume<<1;						break;					}					if (a->tmpvolume<0)						a->tmpvolume=0;					else if (a->tmpvolume>64)						a->tmpvolume=64;				}			}			a->retrig--; /* countdown  */		}	}	return 0;}static int DoS3MEffectR(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat, q;	UWORD temp=0;	/* silence warning */	dat = UniGetByte();	if (!tick) {		if (dat&0x0f) a->trmdepth=dat&0xf;		if (dat&0xf0) a->trmspd=(dat&0xf0)>>2;	}	q=(a->trmpos>>2)&0x1f;	switch ((a->wavecontrol>>4)&3) {	case 0: /* sine */		temp=VibratoTable[q];		break;	case 1: /* ramp down */		q<<=3;		if (a->trmpos<0) q=255-q;		temp=q;		break;	case 2: /* square wave */		temp=255;		break;	case 3: /* random */		temp=getrandom(256);		break;	}	temp*=a->trmdepth;	temp>>=7;	if (a->trmpos>=0) {		a->volume=a->tmpvolume+temp;		if (a->volume>64) a->volume=64;	} else {		a->volume=a->tmpvolume-temp;		if (a->volume<0) a->volume=0;	}	a->ownvol = 1;	if (tick)		a->trmpos+=a->trmspd;	return 0;}static int DoS3MEffectT(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE tempo;	tempo = UniGetByte();	if (tick || mod->patdly2)		return 0;	mod->bpm = (tempo < 32) ? 32 : tempo;	return 0;}static int DoS3MEffectU(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat, q;	UWORD temp = 0;	/* silence warning */	dat = UniGetByte();	if (!tick) {		if (dat&0x0f) a->vibdepth=dat&0xf;		if (dat&0xf0) a->vibspd=(dat&0xf0)>>2;	} else		if (a->main.period) {			q=(a->vibpos>>2)&0x1f;			switch (a->wavecontrol&3) {			case 0: /* sine */				temp=VibratoTable[q];				break;			case 1: /* ramp down */				q<<=3;				if (a->vibpos<0) q=255-q;				temp=q;				break;			case 2: /* square wave */				temp=255;				break;			case 3: /* random */				temp=getrandom(256);				break;			}			temp*=a->vibdepth;			temp>>=8;			if (a->vibpos>=0)				a->main.period=a->tmpperiod+temp;			else				a->main.period=a->tmpperiod-temp;			a->ownper = 1;			a->vibpos+=a->vibspd;	}	return 0;}/*========== Envelope helpers */static int DoKeyOff(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	a->main.keyoff|=KEY_OFF;	if ((!(a->main.volflg&EF_ON))||(a->main.volflg&EF_LOOP))		a->main.keyoff=KEY_KILL;	return 0;}static int DoKeyFade(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat=UniGetByte();	if ((tick>=dat)||(tick==mod->sngspd-1)) {		a->main.keyoff=KEY_KILL;		if (!(a->main.volflg&EF_ON))			a->main.fadevol=0;	}	return 0;}/*========== Fast Tracker effects *//* DoXMEffect6 after DoXMEffectA */static int DoXMEffectA(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE inf, lo, hi;	inf = UniGetByte();	if (inf)		a->s3mvolslide = inf;	else		inf = a->s3mvolslide;		if (tick) {		lo=inf&0xf;		hi=inf>>4;		if (!hi) {			a->tmpvolume-=lo;			if (a->tmpvolume<0) a->tmpvolume=0;		} else {			a->tmpvolume+=hi;			if (a->tmpvolume>64) a->tmpvolume=64;		}	}	return 0;}static int DoXMEffect6(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	if (a->main.period)		DoVibrato(tick, a);	return DoXMEffectA(tick, flags, a, mod, channel);}static int DoXMEffectE1(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat=UniGetByte();	if (!tick) {		if (dat) a->fportupspd=dat;		if (a->main.period)			a->tmpperiod-=(a->fportupspd<<2);	}	return 0;}static int DoXMEffectE2(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat=UniGetByte();	if (!tick) {		if (dat) a->fportdnspd=dat;		if (a->main.period)			a->tmpperiod+=(a->fportdnspd<<2);	}	return 0;}static int DoXMEffectEA(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat=UniGetByte();	if (!tick)		if (dat) a->fslideupspd=dat;	a->tmpvolume+=a->fslideupspd;	if (a->tmpvolume>64) a->tmpvolume=64;	return 0;}static int DoXMEffectEB(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat=UniGetByte();	if (!tick)		if (dat) a->fslidednspd=dat;	a->tmpvolume-=a->fslidednspd;	if (a->tmpvolume<0) a->tmpvolume=0;	return 0;}static int DoXMEffectG(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	mod->volume=UniGetByte()<<1;	if (mod->volume>128) mod->volume=128;	return 0;}static int DoXMEffectH(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE inf;	inf = UniGetByte();	if (tick) {		if (inf) mod->globalslide=inf;		else inf=mod->globalslide;		if (inf & 0xf0) inf&=0xf0;		mod->volume=mod->volume+((inf>>4)-(inf&0xf))*2;		if (mod->volume<0)			mod->volume=0;		else if (mod->volume>128)			mod->volume=128;	}	return 0;}static int DoXMEffectL(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat=UniGetByte();	if ((!tick)&&(a->main.i)) {		UWORD points;		INSTRUMENT *i=a->main.i;		MP_VOICE *aout;		if ((aout=a->slave)) {			if (aout->venv.env) {				points=i->volenv[i->volpts-1].pos;				aout->venv.p=aout->venv.env[(dat>points)?points:dat].pos;			}			if (aout->penv.env) {				points=i->panenv[i->panpts-1].pos;				aout->penv.p=aout->penv.env[(dat>points)?points:dat].pos;			}		}	}	return 0;}static int DoXMEffectP(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE inf, lo, hi;	SWORD pan;	inf = UniGetByte();	if (!mod->panflag)		return 0;	if (inf)		a->pansspd = inf;	else		inf =a->pansspd;	if (tick) {		lo=inf&0xf;		hi=inf>>4;		/* slide right has absolute priority */		if (hi)			lo = 0;		pan=((a->main.panning==PAN_SURROUND)?PAN_CENTER:a->main.panning)+hi-lo;		a->main.panning=(pan<PAN_LEFT)?PAN_LEFT:(pan>PAN_RIGHT?PAN_RIGHT:pan);	}	return 0;}static int DoXMEffectX1(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat = UniGetByte();	if (dat)		a->ffportupspd = dat;	else		dat = a->ffportupspd;	if (a->main.period)		if (!tick) {			a->main.period-=dat;			a->tmpperiod-=dat;			a->ownper = 1;		}	return 0;}static int DoXMEffectX2(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	UBYTE dat;	dat = UniGetByte();	if (dat)		a->ffportdnspd=dat;	else		dat = a->ffportdnspd;	if (a->main.period)		if (!tick) {			a->main.period+=dat;			a->tmpperiod+=dat;			a->ownper = 1;		}	return 0;}/*========== Impulse Tracker effects */static void DoITToneSlide(UWORD tick, MP_CONTROL *a, UBYTE dat){	if (dat)		a->portspeed = dat;	/* if we don't come from another note, ignore the slide and play the note	   as is */	if (!a->oldnote || !a->main.period)			return;	if ((!tick)&&(a->newsamp)){		a->main.kick=KICK_NOTE;		a->main.start=-1;	} else		a->main.kick=(a->main.kick==KICK_NOTE)?KICK_ENV:KICK_ABSENT;	if (tick) {		int dist;		/* We have to slide a->main.period towards a->wantedperiod, compute the		   difference between those two values */		dist=a->main.period-a->wantedperiod;	    /* if they are equal or if portamentospeed is too big... */		if ((!dist)||((a->portspeed<<2)>abs(dist)))			/* ... make tmpperiod equal tperiod */			a->tmpperiod=a->main.period=a->wantedperiod;		else		  if (dist>0) {				a->tmpperiod-=a->portspeed<<2;			a->main.period-=a->portspeed<<2; /* dist>0 slide up */		} else {							a->tmpperiod+=a->portspeed<<2;			a->main.period+=a->portspeed<<2; /* dist<0 slide down */		}	} else		a->tmpperiod=a->main.period;	a->ownper=1;}static int DoITEffectG(UWORD tick, UWORD flags, MP_CONTROL *a, MODULE *mod, SWORD channel){	DoITToneSlide(tick, a, UniGetByte());	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -