📄 pcm.c
字号:
else bufferlen = ARRAY_LEN (psf->u.sbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; endswap_short_copy (psf->u.sbuf, ptr + total, bufferlen) ; writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_s2bes */static sf_count_tpcm_write_s2les (SF_PRIVATE *psf, short *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; if (CPU_IS_LITTLE_ENDIAN) return psf_fwrite (ptr, sizeof (short), len, psf) ; bufferlen = ARRAY_LEN (psf->u.sbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; endswap_short_copy (psf->u.sbuf, ptr + total, bufferlen) ; writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_s2les */static sf_count_tpcm_write_s2bet (SF_PRIVATE *psf, short *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; s2bet_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ; writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_s2bet */static sf_count_tpcm_write_s2let (SF_PRIVATE *psf, short *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; s2let_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ; writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_s2let */static sf_count_tpcm_write_s2bei (SF_PRIVATE *psf, short *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = ARRAY_LEN (psf->u.ibuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; s2bei_array (ptr + total, psf->u.ibuf, bufferlen) ; writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_s2bei */static sf_count_tpcm_write_s2lei (SF_PRIVATE *psf, short *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = ARRAY_LEN (psf->u.ibuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; s2lei_array (ptr + total, psf->u.ibuf, bufferlen) ; writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_s2lei *//*-----------------------------------------------------------------------------------------------*/static sf_count_tpcm_write_i2sc (SF_PRIVATE *psf, int *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = ARRAY_LEN (psf->u.scbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; i2sc_array (ptr + total, psf->u.scbuf, bufferlen) ; writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_i2sc */static sf_count_tpcm_write_i2uc (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 ; i2uc_array (ptr + total, psf->u.ucbuf, bufferlen) ; writecount = psf_fwrite (psf->u.ucbuf, sizeof (signed char), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_i2uc */static sf_count_tpcm_write_i2bes (SF_PRIVATE *psf, int *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = ARRAY_LEN (psf->u.sbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; i2bes_array (ptr + total, psf->u.sbuf, bufferlen) ; writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_i2bes */static sf_count_tpcm_write_i2les (SF_PRIVATE *psf, int *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = ARRAY_LEN (psf->u.sbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; i2les_array (ptr + total, psf->u.sbuf, bufferlen) ; writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_i2les */static sf_count_tpcm_write_i2bet (SF_PRIVATE *psf, int *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; i2bet_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ; writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_i2bet */static sf_count_tpcm_write_i2let (SF_PRIVATE *psf, int *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; i2let_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ; writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_i2les */static sf_count_tpcm_write_i2bei (SF_PRIVATE *psf, int *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; if (CPU_IS_BIG_ENDIAN) return psf_fwrite (ptr, sizeof (int), len, psf) ; bufferlen = ARRAY_LEN (psf->u.ibuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; endswap_int_copy (psf->u.ibuf, ptr + total, bufferlen) ; writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_i2bei */static sf_count_tpcm_write_i2lei (SF_PRIVATE *psf, int *ptr, sf_count_t len){ int bufferlen, writecount ; sf_count_t total = 0 ; if (CPU_IS_LITTLE_ENDIAN) return psf_fwrite (ptr, sizeof (int), len, psf) ; bufferlen = ARRAY_LEN (psf->u.ibuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; endswap_int_copy (psf->u.ibuf, ptr + total, bufferlen) ; writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_i2lei *//*------------------------------------------------------------------------------**==============================================================================**------------------------------------------------------------------------------*/static voidf2sc_array (float *src, signed char *dest, int count, int normalize){ float normfact ; normfact = normalize ? (1.0 * 0x7F) : 1.0 ; while (--count >= 0) { dest [count] = lrintf (src [count] * normfact) ; } ;} /* f2sc_array */static voidf2sc_clip_array (float *src, signed char *dest, int count, int normalize){ float normfact, scaled_value ; normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ; while (--count >= 0) { scaled_value = src [count] * normfact ; if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) { dest [count] = 127 ; continue ; } ; if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) { dest [count] = -128 ; continue ; } ; dest [count] = lrintf (scaled_value) >> 24 ; } ;} /* f2sc_clip_array */static sf_count_tpcm_write_f2sc (SF_PRIVATE *psf, float *ptr, sf_count_t len){ void (*convert) (float *, signed char *, int, int) ; int bufferlen, writecount ; sf_count_t total = 0 ; convert = (psf->add_clipping) ? f2sc_clip_array : f2sc_array ; bufferlen = ARRAY_LEN (psf->u.scbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; convert (ptr + total, psf->u.scbuf, bufferlen, psf->norm_float) ; writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_f2sc *//*==============================================================================*/static voidf2uc_array (float *src, unsigned char *dest, int count, int normalize){ float normfact ; normfact = normalize ? (1.0 * 0x7F) : 1.0 ; while (--count >= 0) { dest [count] = lrintf (src [count] * normfact) + 128 ; } ;} /* f2uc_array */static voidf2uc_clip_array (float *src, unsigned char *dest, int count, int normalize){ float normfact, scaled_value ; normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ; while (--count >= 0) { scaled_value = src [count] * normfact ; if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) { dest [count] = 0xFF ; continue ; } ; if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) { dest [count] = 0 ; continue ; } ; dest [count] = (lrintf (scaled_value) >> 24) + 128 ; } ;} /* f2uc_clip_array */static sf_count_tpcm_write_f2uc (SF_PRIVATE *psf, float *ptr, sf_count_t len){ void (*convert) (float *, unsigned char *, int, int) ; int bufferlen, writecount ; sf_count_t total = 0 ; convert = (psf->add_clipping) ? f2uc_clip_array : f2uc_array ; bufferlen = ARRAY_LEN (psf->u.ucbuf) ; while (len > 0) { if (len < bufferlen) bufferlen = (int) len ; convert (ptr + total, psf->u.ucbuf, bufferlen, psf->norm_float) ; writecount = psf_fwrite (psf->u.ucbuf, sizeof (unsigned char), bufferlen, psf) ; total += writecount ; if (writecount < bufferlen) break ; len -= writecount ; } ; return total ;} /* pcm_write_f2uc *//*==============================================================================*/static voidf2bes_array (float *src, short *dest, int count, int normalize){ unsigned char *ucptr ; float normfact ; short value ; normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ; ucptr = ((unsigned char*) dest) + 2 * count ; while (--count >= 0) { ucptr -= 2 ; value = lrintf (src [count] * normfact) ; ucptr [1] = value ; ucptr [0] = value >> 8 ; } ;} /* f2bes_array */static voidf2bes_clip_array (float *src, short *dest, int count, int normalize){ unsigned char *ucptr ; float normfact, scaled_value ; int value ; normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ; ucptr = ((unsigned char*) dest) + 2 * count ; while (--count >= 0) { ucptr -= 2 ; scaled_value = src [count] * normfact ; if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF)) { ucptr [1] = 0xFF ; ucptr [0] = 0x7F ; continue ; } ; if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000)) { ucptr [1] = 0x00 ; ucptr [0] = 0x80 ; continue ; } ; value = lrintf (scaled_value) ; ucptr [1] = value >> 16 ; ucptr [0] = value >> 24 ; } ;} /* f2bes_clip_array */static sf_count_tpcm_write_f2bes (SF_PRIVATE *psf, float *ptr, sf_count_t len){ void (*convert) (float *, short *t, int, int) ; int bufferlen, writecount ; sf_count_t total = 0 ; convert = (psf->add_clipping) ? f2bes_clip_array : f2bes_array ; bufferlen = ARRAY_LEN (psf->u.sbuf) ; while (len > 0) { if (len < bufferlen)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -