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

📄 load_uni.c

📁 linux上播放midi音乐,但是要一些设置.可网上查找. 软件名称: TiMidity++-2.13.0.tar
💻 C
📖 第 1 页 / 共 2 页
字号:
	i->samplenumber[u] = of.numsmp + _mm_read_UBYTE (modreader);#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);			\		}      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);      mh.flags &= (UF_XMPERIODS | UF_LINEAR | UF_INST | UF_NNA);    }  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.flags &= (UF_XMPERIODS | UF_LINEAR);      mh.flags |= UF_INST | UF_NOWRAP;    }  /* 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;  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];    }  /* 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 */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 + -