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

📄 load_uni.c

📁 wince下著名的视频播放器源码
💻 C
📖 第 1 页 / 共 2 页
字号:
{	INSTRUMENT *i;	int t;	UWORD wavcnt=0;	UBYTE vibtype,vibsweep,vibdepth,vibrate;	i=of.instruments;	for(of.numsmp=t=0;t<of.numins;t++,i++) {		int u,numsmp;		numsmp=_mm_read_UBYTE(modreader);		memset(i->samplenumber,0xff,INSTNOTES*sizeof(UWORD));		for(u=0;u<96;u++)			i->samplenumber[u]=of.numsmp+_mm_read_UBYTE(modreader);#if defined __STDC__ || defined _MSC_VER || defined MPW_C#define UNI_LoadEnvelope5(name) 									\		i-> name##flg=_mm_read_UBYTE(modreader);					\		i-> name##pts=_mm_read_UBYTE(modreader);					\		i-> name##susbeg=_mm_read_UBYTE(modreader);					\		i-> name##susend=i-> name##susbeg;							\		i-> name##beg=_mm_read_UBYTE(modreader);					\		i-> name##end=_mm_read_UBYTE(modreader);					\		for(u=0;u<12;u++) {											\			i-> name##env[u].pos=_mm_read_I_SWORD(modreader);		\			i-> name##env[u].val=_mm_read_I_SWORD(modreader);		\		}#else#define UNI_LoadEnvelope5(name) 									\		i-> name/**/flg=_mm_read_UBYTE(modreader);					\		i-> name/**/pts=_mm_read_UBYTE(modreader);					\		i-> name/**/susbeg=_mm_read_UBYTE(modreader);				\		i-> name/**/susend=i-> name/**/susbeg;						\		i-> name/**/beg=_mm_read_UBYTE(modreader);					\		i-> name/**/end=_mm_read_UBYTE(modreader);					\		for(u=0;u<12;u++) {											\			i-> name/**/env[u].pos=_mm_read_I_SWORD(modreader);		\			i-> name/**/env[u].val=_mm_read_I_SWORD(modreader);		\		}#endif		UNI_LoadEnvelope5(vol);		UNI_LoadEnvelope5(pan);#undef UNI_LoadEnvelope5		vibtype      =_mm_read_UBYTE(modreader);		vibsweep     =_mm_read_UBYTE(modreader);		vibdepth     =_mm_read_UBYTE(modreader);		vibrate      =_mm_read_UBYTE(modreader);		i->volfade=_mm_read_I_UWORD(modreader);		i->insname=readstring();		for(u=0;u<numsmp;u++,s++,of.numsmp++) {			/* Allocate more room for sample information if necessary */			if(of.numsmp+u==wavcnt) {				wavcnt+=UNI_SMPINCR;				if(!(wh=realloc(wh,wavcnt*sizeof(UNISMP05)))) {					_mm_errno=MMERR_OUT_OF_MEMORY;					return 0;				}				s=wh+(wavcnt-UNI_SMPINCR);			}			s->c2spd    =_mm_read_I_UWORD(modreader);			s->transpose=_mm_read_SBYTE(modreader);			s->volume   =_mm_read_UBYTE(modreader);			s->panning  =_mm_read_UBYTE(modreader);			s->length   =_mm_read_I_ULONG(modreader);			s->loopstart=_mm_read_I_ULONG(modreader);			s->loopend  =_mm_read_I_ULONG(modreader);			s->flags    =_mm_read_I_UWORD(modreader);			s->samplename=readstring();			s->vibtype =vibtype;			s->vibsweep=vibsweep;			s->vibdepth=vibdepth;			s->vibrate =vibrate;			if(_mm_eof(modreader)) {				free(wh);wh=NULL;				_mm_errno=MMERR_LOADING_SAMPLEINFO;				return 0;			}		}	}	/* sanity check */	if(!of.numsmp) {		if(wh) { free(wh);wh=NULL; }		_mm_errno=MMERR_LOADING_SAMPLEINFO;		return 0;	}	return 1;}static BOOL loadsmp5(void){	int t,u;	SAMPLE *q;	INSTRUMENT *d;	q=of.samples;s=wh;	for(u=0;u<of.numsmp;u++,q++,s++) {		q->samplename=s->samplename;		q->length   =s->length;		q->loopstart=s->loopstart;		q->loopend  =s->loopend;		q->volume   =s->volume;		q->speed    =s->c2spd;		q->panning  =s->panning;		q->vibtype  =s->vibtype;		q->vibsweep =s->vibsweep;		q->vibdepth =s->vibdepth;		q->vibrate  =s->vibrate;		/* convert flags */		q->flags=0;		if(s->flags&128) q->flags|=SF_REVERSE;		if(s->flags& 64) q->flags|=SF_SUSTAIN;		if(s->flags& 32) q->flags|=SF_BIDI;		if(s->flags& 16) q->flags|=SF_LOOP;		if(s->flags&  8) q->flags|=SF_BIG_ENDIAN;		if(s->flags&  4) q->flags|=SF_DELTA;		if(s->flags&  2) q->flags|=SF_SIGNED;		if(s->flags&  1) q->flags|=SF_16BITS;	}	d=of.instruments;s=wh;	for(u=0;u<of.numins;u++,d++)		for(t=0;t<INSTNOTES;t++)			d->samplenote[t]=(d->samplenumber[t]>=of.numsmp)?			  255:(t+s[d->samplenumber[t]].transpose);	free(wh);wh=NULL;	return 1;}BOOL UNI_Load(BOOL curious){	int t;	char *modtype,*oldtype=NULL;	INSTRUMENT *d;	SAMPLE *q;		/* read module header */	_mm_read_UBYTES(mh.id,4,modreader);	if(mh.id[3]!='N')		universion=mh.id[3]-'0';	else		universion=0x100;	if(universion>=6) {		if (universion==6)			_mm_read_UBYTE(modreader);		else			universion=_mm_read_M_UWORD(modreader);		mh.flags     =_mm_read_M_UWORD(modreader);		mh.numchn    =_mm_read_UBYTE(modreader);		mh.numvoices =_mm_read_UBYTE(modreader);		mh.numpos    =_mm_read_M_UWORD(modreader);		mh.numpat    =_mm_read_M_UWORD(modreader);		mh.numtrk    =_mm_read_M_UWORD(modreader);		mh.numins    =_mm_read_M_UWORD(modreader);		mh.numsmp    =_mm_read_M_UWORD(modreader);		mh.reppos    =_mm_read_M_UWORD(modreader);		mh.initspeed =_mm_read_UBYTE(modreader);		mh.inittempo =_mm_read_UBYTE(modreader);		mh.initvolume=_mm_read_UBYTE(modreader);		/* I expect this to show up soon in APlayer 1.06 format */		if (universion >= 0x106)			mh.bpmlimit=_mm_read_M_UWORD(modreader);		else			mh.bpmlimit=32;		mh.flags &= UF_XMPERIODS | UF_LINEAR | UF_INST | UF_NNA;		mh.flags |= UF_PANNING;	} else {		mh.numchn    =_mm_read_UBYTE(modreader);		mh.numpos    =_mm_read_I_UWORD(modreader);		mh.reppos    =(universion==5)?_mm_read_I_UWORD(modreader):0;		mh.numpat    =_mm_read_I_UWORD(modreader);		mh.numtrk    =_mm_read_I_UWORD(modreader);		mh.numins    =_mm_read_I_UWORD(modreader);		mh.initspeed =_mm_read_UBYTE(modreader);		mh.inittempo =_mm_read_UBYTE(modreader);		_mm_read_UBYTES(mh.positions,256,modreader);		_mm_read_UBYTES(mh.panning,32,modreader);		mh.flags     =_mm_read_UBYTE(modreader);		mh.bpmlimit  =32;		mh.flags &= UF_XMPERIODS | UF_LINEAR;		mh.flags |= UF_INST | UF_NOWRAP | UF_PANNING;	}		/* set module parameters */	of.flags     =mh.flags;	of.numchn    =mh.numchn;	of.numpos    =mh.numpos;	of.numpat    =mh.numpat;	of.numtrk    =mh.numtrk;	of.numins    =mh.numins;	of.reppos    =mh.reppos;	of.initspeed =mh.initspeed;	of.inittempo =mh.inittempo;	if(mh.bpmlimit)		of.bpmlimit=mh.bpmlimit;	else		/* be bug-compatible with older releases */		of.bpmlimit=32;	of.songname=readstring();	if(universion<0x102)		oldtype=readstring();	if(oldtype) {		int len=strlen(oldtype)+20;		if(!(modtype=_mm_malloc(len))) return 0;#ifdef HAVE_SNPRINTF		snprintf(modtype,len,"%s (was %s)",(universion>=0x100)?"APlayer":"MikCvt2",oldtype);#else		sprintf(modtype,"%s (was %s)",(universion>=0x100)?"APlayer":"MikCvt2",oldtype);#endif	} else {		if(!(modtype=_mm_malloc(10))) return 0;#ifdef HAVE_SNPRINTF		snprintf(modtype,10,"%s",(universion>=0x100)?"APlayer":"MikCvt3");#else		sprintf(modtype,"%s",(universion>=0x100)?"APlayer":"MikCvt3");#endif	}	of.modtype=strdup(modtype);	free(modtype);free(oldtype);	of.comment=readstring();	if(universion>=6) {		of.numvoices=mh.numvoices;		of.initvolume=mh.initvolume;	}	if(_mm_eof(modreader)) {		_mm_errno=MMERR_LOADING_HEADER;		return 0;	}	/* positions */	if(!AllocPositions(of.numpos)) return 0;	if(universion>=6) {		if(universion>=0x100)			_mm_read_M_UWORDS(of.positions,of.numpos,modreader);		else			for(t=0;t<of.numpos;t++) of.positions[t]=_mm_read_UBYTE(modreader);		_mm_read_M_UWORDS(of.panning,of.numchn,modreader);		_mm_read_UBYTES(of.chanvol,of.numchn,modreader);	} else {		if((mh.numpos>256)||(mh.numchn>32)) {			_mm_errno=MMERR_LOADING_HEADER;			return 0;		}		for(t=0;t<of.numpos;t++) of.positions[t]=mh.positions[t];		for(t=0;t<of.numchn;t++) of.panning[t]=mh.panning[t];	}	/* convert the ``end of song'' pattern code if necessary */	if(universion<0x106)		for(t=0;t<of.numpos;t++)			if(of.positions[t]==255) of.positions[t]=LAST_PATTERN;	/* instruments and samples */	if(universion>=6) {		of.numsmp=mh.numsmp;		if(!AllocSamples()) return 0;		if(!loadsmp6()) return 0;		if(of.flags&UF_INST) {			if(!AllocInstruments()) return 0;			if(!loadinstr6()) return 0;		}	} else {		if(!AllocInstruments()) return 0;		if(!loadinstr5()) return 0;		if(!AllocSamples()) {			if(wh) { free(wh);wh=NULL; }			return 0;		}		if(!loadsmp5()) return 0;		/* check if the original file had no instruments */		if(of.numsmp==of.numins) {			for(t=0,d=of.instruments;t<of.numins;t++,d++) {				int u;				if((d->volpts)||(d->panpts)||(d->globvol!=64)) break;				for(u=0;u<96;u++)					if((d->samplenumber[u]!=t)||(d->samplenote[u]!=u)) break;				if(u!=96) break;			}			if(t==of.numins) {				of.flags&=~UF_INST;				of.flags&=~UF_NOWRAP;				for(t=0,d=of.instruments,q=of.samples;t<of.numins;t++,d++,q++) {					q->samplename=d->insname;					d->insname=NULL;				}			}		}	}	/* patterns */	if(!AllocPatterns()) return 0;	if(universion>=6) {		_mm_read_M_UWORDS(of.pattrows,of.numpat,modreader);		_mm_read_M_UWORDS(of.patterns,of.numpat*of.numchn,modreader);	} else {		_mm_read_I_UWORDS(of.pattrows,of.numpat,modreader);		_mm_read_I_UWORDS(of.patterns,of.numpat*of.numchn,modreader);	}	/* tracks */	if(!AllocTracks()) return 0;	for(t=0;t<of.numtrk;t++)		if(!(of.tracks[t]=readtrack())) {			_mm_errno=MMERR_LOADING_TRACK;			return 0;		}	return 1;}CHAR *UNI_LoadTitle(void){	UBYTE ver;	int posit[3]={304,306,26};	_mm_fseek(modreader,3,SEEK_SET);	ver=_mm_read_UBYTE(modreader);	if(ver=='N') ver='6';	_mm_fseek(modreader,posit[ver-'4'],SEEK_SET);	return readstring();}/*========== Loader information */MIKMODAPI MLOADER load_uni={	NULL,	"UNI",	"APUN (APlayer) and UNI (MikMod)",	UNI_Init,	UNI_Test,	UNI_Load,	UNI_Cleanup,	UNI_LoadTitle};/* ex:set ts=4: */

⌨️ 快捷键说明

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