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

📄 esig_edr.c

📁 该压缩包为最新版htk的源代码,htk是现在比较流行的语音处理软件,请有兴趣的朋友下载使用
💻 C
📖 第 1 页 / 共 5 页
字号:
         if ((ch = getc(file)) == EOF)            break;         hi = (hi << 8) | ch;         if ((ch = getc(file)) == EOF)            break;         lo = ch;               /* start on low-order 24 bits */         if ((ch = getc(file)) == EOF)            break;         lo = (lo << 8) | ch;         if ((ch = getc(file)) == EOF)            break;         lo = (lo << 8) | ch;         if (ex == 2047)                /* Inf or NaN */            item = HUGE_VAL;         else            {               if (ex == 0)     /* unnormalized */                  ex = 1;               /* adjust for different exponent bias */               else             /* normalized */                  hi |= 0x10000000; /* hidden bit */               item = ldexp((double) hi, 24) + (double) lo;               /* fraction bits as integer, i.e. scaled by 2^52 */               item = ldexp(item, ex - 1075);               /* 1075: number of fractional places (52)                  minus exponent bias (-1023) */            }         data[n] = (sn) ? -item : item;      }   return n;}/* Read items of type FLOAT */static intEdrReadFloat(float  *data,             long   length,             FILE   *file){   long     n;          /* number of items read */   unsigned long   fr;          /* 23 fraction bits (and hidden bit) */   int              ex;         /* exponent */   int              sn;         /* sign */   int              ch;         /* input character */   double           item;       /* one input data item */   for (n = 0; n < length; n++)      {         if ((ch = getc(file)) == EOF)            break;         sn = ((ch & 0x80) != 0); /* sign */         ex = ch & 0x7f;                /* 7 bits of exponent */         if ((ch = getc(file)) == EOF)            break;         ex = (ex << 1) | (ch >> 7); /* rest of exponent */         fr = ch & 0x7f;                /* first 7 fraction bits */         if ((ch = getc(file)) == EOF)            break;         fr = (fr << 8) | ch;         if ((ch = getc(file)) == EOF)            break;         fr = (fr << 8) | ch;         if (ex == 255)         /* Inf or NaN */            item = FLT_MAX;         /*! What's a portable way to get the float equivalent of HUGE_VAL          * in ANSI C? */         else            {               if (ex == 0)     /* unnormalized */                  ex = 1;               /* adjust for different exponent bias */               else             /* normalized */                  fr |= 0x800000;       /* hidden bit */               item = ldexp((double) fr, ex - 150);               /* 150: number of fractional places (23)                  minus exponent bias (-127) */               if (item > FLT_MAX)                  item = FLT_MAX;            }         data[n] = (sn) ? -item : item;      }   return n;}/* Read items of type LONG */static intEdrReadLong(long    *data,            long    length,            FILE    *file,            int     longlong){   long     n;          /* number of items read */   int              ch;         /* input character */   switch (longlong)      {      case EDR1:         {            unsigned long               item;    /* one input data item */            for (n = 0; n < length; n++)               {                  if ((ch = getc(file)) == EOF)                     break;                  item = ch;                  if ((ch = getc(file)) == EOF)                     break;                  item = (item << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  item = (item << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  item = (item << 8) | ch;                  if ((item & 0x80000000) == 0)                     data[n] = item;#if (LONG_MIN == -0xffffffff)   /* Unlikely on 2's-complement machine,                                 * but allowed by ANSI. */                  else                     if (item == 0x80000000)                        {                           data[n] = LONG_MIN;                           /* CLIPPING */                        }#endif                     else                        data[n] = -1L - (long) (item ^ 0xffffffff);               }            return n;         }         break;      case EDR2:         {            unsigned long               hi, lo;            for (n = 0; n < length; n++)               {                  /* Get high-order 4 bytes */                  if ((ch = getc(file)) == EOF)                     break;                  hi = ch;                  if ((ch = getc(file)) == EOF)                     break;                  hi = (hi << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  hi = (hi << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  hi = (hi << 8) | ch;                  /* Get low-order 4 bytes */                  if ((ch = getc(file)) == EOF)                     break;                  lo = ch;                  if ((ch = getc(file)) == EOF)                     break;                  lo = (lo << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  lo = (lo << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  lo = (lo << 8) | ch;                  /* Combine the pieces */#if (ULONG_MAX > 0xffffffffUL)  /* unsigned longs more than 32 bits */                  {                     const unsigned long                        lmaxhi = LONG_MAX >> 32,                        lmaxlo = LONG_MAX & 0xffffffffUL,                        lminhi = ~ (~ (unsigned long) LONG_MIN >> 32),                        lminlo = LONG_MIN & 0xffffffffUL,                        sgnext = ~ 0xffffffffUL;                     if ((hi & 0x80000000) == 0)        /* non-negative */                        {                           if (hi > lmaxhi || hi == lmaxhi && lo > lmaxlo)                              {                                 data[n] = LONG_MAX;                                 /* CLIPPING */                              }                           else                              data[n] = (hi << 32) | lo;                        }                     else       /* negative */                        {                           hi |= sgnext;                           if (hi < lminhi || hi == lminhi && lo < lminlo)                              {                                 data[n] = LONG_MIN;                                 /* CLIPPING */                              }                           else                              data[n] = -1L - (long) ~((hi << 32) | lo);                        }                  }#else  /* 32-bit unsigned longs */                  {                     if ((hi & 0x80000000) == 0)        /* non-negative */                        {                           if (hi != 0 || lo > LONG_MAX)                              {                                 data[n] = LONG_MAX;                                 /* CLIPPING */                              }                           else                              data[n] = lo;                        }                     else       /* negative */                        {                           if (hi != -1UL || lo < LONG_MIN)                              {                                 data[n] = LONG_MIN;                                 /* CLIPPING */                              }                           else                              data[n] = -1L - (long) (0xffffffff ^ lo);                        }                  }#endif               }            return n;         }         break;      default:         return 0;      }}/* Read items of type ULONG */static intEdrReadUlong(Ulong *data,             long length,             FILE *file,             int longlong){   long     n;          /* number of items read */   int              ch;         /* input character */   switch (longlong)      {      case EDR1:         {            unsigned long               item;    /* one input data item */            for (n = 0; n < length; n++)               {                  if ((ch = getc(file)) == EOF)                     break;                  item = ch;                  if ((ch = getc(file)) == EOF)                     break;                  item = (item << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  item = (item << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  item = (item << 8) | ch;                  data[n] = item;               }            return n;         }         break;      case EDR2:         {            unsigned long               hi, lo;            for (n = 0; n < length; n++)               {                  /* Get high-order 4 bytes */                  if ((ch = getc(file)) == EOF)                     break;                  hi = ch;                  if ((ch = getc(file)) == EOF)                     break;                  hi = (hi << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  hi = (hi << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  hi = (hi << 8) | ch;                  /* Get low-order 4 bytes */                  if ((ch = getc(file)) == EOF)                     break;                  lo = ch;                  if ((ch = getc(file)) == EOF)                     break;                  lo = (lo << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  lo = (lo << 8) | ch;                  if ((ch = getc(file)) == EOF)                     break;                  lo = (lo << 8) | ch;                  /* Combine the pieces */#if (ULONG_MAX > 0xffffffffUL)  /* unsigned longs more than 32 bits */                  {                     const unsigned long                        ulmaxhi = ULONG_MAX >> 32,                        ulmaxlo = ULONG_MAX & 0xffffffffUL;                     if (hi > ulmaxhi || hi == ulmaxhi && lo > ulmaxlo)                        {                           data[n] = ULONG_MAX;                           /* CLIPPING */                        }                     else                        data[n] = (hi << 32) | lo;                  }#else  /* 32-bit unsigned longs */                  {                     if (hi != 0)                        {                           data[n] = ULONG_MAX;                           /* CLIPPING */                        }                     else                        data[n] = lo;                  }#endif               }            return n;         }         break;      default:         return 0;      }}/* Read items of type SHORT */static intEdrReadShort(short  *data,             long   length,             FILE   *file){   long     n;          /* number of items read */   unsigned int    item;        /* one input data item */   int              ch;         /* input character */   for (n = 0; n < length; n++)      {         if ((ch = getc(file)) == EOF)            break;         item = ch;         if ((ch = getc(file)) == EOF)            break;         item = (item << 8) | ch;         data[n] =            (item & 0x8000)            ? (-1 - (int) (item ^ 0xffff))            : item;      }   return n;}/* Read items of type USHORT */static intEdrReadUshort(Ushort *data,              long length,              FILE *file){   long     n;          /* number of items read */   unsigned int    item;        /* one input data item */   int              ch;         /* input character */   for (n = 0; n < length; n++)      {         if ((ch = getc(file)) == EOF)            break;         item = ch;         if ((ch = getc(file)) == EOF)            break;         item = (item << 8) | ch;         data[n] = item;      }   return n;}/* Read items of type SCHAR */static intEdrReadSchar(Schar  *data,             long   length,             FILE   *file){   long    n;                   /* number of items read */   int      ch;                 /* input character */   for (n = 0; n < length; n++)      {         if ((ch = getc(file)) == EOF)            break;         data[n] = (ch & 0x80) ? ch - 0x100 : ch;      }   return n;}/* Read items of type UCHAR */static intEdrReadUchar(Uchar  *data,             long   length,             FILE   *file){   long     n;          /* number of items read */   int              ch;         /* input character */   for (n = 0; n < length; n++)      {         if ((ch = getc(file)) == EOF)            break;         data[n] = ch;      }   return n;

⌨️ 快捷键说明

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