📄 alaw.c
字号:
0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a} ; /* alaw_encode */#ifdef WIN32 //v for compatibility with MSVC++ 6, 7, & 8beta compilers #define inline #endifstatic inline voidalaw2s_array (unsigned char *buffer, int count, short *ptr){ while (--count >= 0) ptr [count] = alaw_decode [(int) buffer [count]] ;} /* alaw2s_array */static inline voidalaw2i_array (unsigned char *buffer, int count, int *ptr){ while (--count >= 0) ptr [count] = alaw_decode [(int) buffer [count]] << 16 ;} /* alaw2i_array */static inline voidalaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact){ while (--count >= 0) ptr [count] = normfact * alaw_decode [(int) buffer [count]] ;} /* alaw2f_array */static inline voidalaw2d_array (unsigned char *buffer, int count, double *ptr, double normfact){ while (--count >= 0) ptr [count] = normfact * alaw_decode [(int) buffer [count]] ;} /* alaw2d_array */static inline voids2alaw_array (short *ptr, int count, unsigned char *buffer){ while (--count >= 0) { if (ptr [count] >= 0) buffer [count] = alaw_encode [ptr [count] / 16] ; else buffer [count] = 0x7F & alaw_encode [ptr [count] / -16] ; } ;} /* s2alaw_array */static inline voidi2alaw_array (int *ptr, int count, unsigned char *buffer){ while (--count >= 0) { if (ptr [count] >= 0) buffer [count] = alaw_encode [ptr [count] >> (16 + 4)] ; else buffer [count] = 0x7F & alaw_encode [- ptr [count] >> (16 + 4)] ; } ;} /* i2alaw_array */static inline voidf2alaw_array (float *ptr, int count, unsigned char *buffer, float normfact){ while (--count >= 0) { if (ptr [count] >= 0) buffer [count] = alaw_encode [lrintf (normfact * ptr [count])] ; else buffer [count] = 0x7F & alaw_encode [- lrintf (normfact * ptr [count])] ; } ;} /* f2alaw_array */static inline voidd2alaw_array (double *ptr, int count, unsigned char *buffer, double normfact){ while (--count >= 0) { if (ptr [count] >= 0) buffer [count] = alaw_encode [lrint (normfact * ptr [count])] ; else buffer [count] = 0x7F & alaw_encode [- lrint (normfact * ptr [count])] ; } ;} /* d2alaw_array *//*==============================================================================*/static sf_count_talaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len){ int bufferlen, readcount ; sf_count_t total = 0 ; bufferlen = ARRAY_LEN (psf->u.ucbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; alaw2s_array (psf->u.ucbuf, readcount, ptr + total) ; total += readcount ; if (readcount < bufferlen) break ; len -= readcount ; } ; return total ;} /* alaw_read_alaw2s */static sf_count_talaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len){ int bufferlen, readcount ; sf_count_t total = 0 ; bufferlen = ARRAY_LEN (psf->u.ucbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; alaw2i_array (psf->u.ucbuf, readcount, ptr + total) ; total += readcount ; if (readcount < bufferlen) break ; len -= readcount ; } ; return total ;} /* alaw_read_alaw2i */static sf_count_talaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len){ int bufferlen, readcount ; sf_count_t total = 0 ; float normfact ; normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ; bufferlen = ARRAY_LEN (psf->u.ucbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; alaw2f_array (psf->u.ucbuf, readcount, ptr + total, normfact) ; total += readcount ; if (readcount < bufferlen) break ; len -= readcount ; } ; return total ;} /* alaw_read_alaw2f */static sf_count_talaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len){ int bufferlen, readcount ; sf_count_t total = 0 ; double normfact ; normfact = (psf->norm_double) ? 1.0 / ((double) 0x8000) : 1.0 ; bufferlen = ARRAY_LEN (psf->u.ucbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; readcount = psf_fread (psf->u.ucbuf, 1, bufferlen, psf) ; alaw2d_array (psf->u.ucbuf, readcount, ptr + total, normfact) ; total += readcount ; if (readcount < bufferlen) break ; len -= readcount ; } ; return total ;} /* alaw_read_alaw2d *//*=============================================================================================*/static sf_count_talaw_write_s2alaw (SF_PRIVATE *psf, short *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = ARRAY_LEN (psf->u.ucbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; s2alaw_array (ptr + total, bufferlen, psf->u.ucbuf) ; writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* alaw_write_s2alaw */static sf_count_talaw_write_i2alaw (SF_PRIVATE *psf, int *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = ARRAY_LEN (psf->u.ucbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; i2alaw_array (ptr + total, bufferlen, psf->u.ucbuf) ; writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* alaw_write_i2alaw */static sf_count_talaw_write_f2alaw (SF_PRIVATE *psf, float *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; float normfact ; normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) / 16.0 : 1.0 / 16 ; bufferlen = ARRAY_LEN (psf->u.ucbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; f2alaw_array (ptr + total, bufferlen, psf->u.ucbuf, normfact) ; writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* alaw_write_f2alaw */static sf_count_talaw_write_d2alaw (SF_PRIVATE *psf, double *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; double normfact ; normfact = (psf->norm_double) ? (1.0 * 0x7FFF) / 16.0 : 1.0 / 16.0 ; bufferlen = ARRAY_LEN (psf->u.ucbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; d2alaw_array (ptr + total, bufferlen, psf->u.ucbuf, normfact) ; writecount = psf_fwrite (psf->u.ucbuf, 1, bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* alaw_write_d2alaw *//*** Do not edit or modify anything in this comment block.** The arch-tag line is a file identity tag for the GNU Arch ** revision control system.**** arch-tag: 289ccfc2-42a6-4f1f-a29f-4dcc9bfa8752*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -