📄 pcm.c
字号:
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; i2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_i2sc */int pcm_write_i2uc (SF_PRIVATE *psf, int *ptr, int len){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; i2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_i2uc */int pcm_write_i2bes (SF_PRIVATE *psf, int *ptr, int len){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; i2bes_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_i2bes */int pcm_write_i2les (SF_PRIVATE *psf, int *ptr, int len){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; i2les_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_i2les */int pcm_write_i2bet (SF_PRIVATE *psf, int *ptr, int len){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; i2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_i2bet */int pcm_write_i2let (SF_PRIVATE *psf, int *ptr, int len){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; i2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_i2les */int pcm_write_i2bei (SF_PRIVATE *psf, int *ptr, int len){ int total ; if (CPU_IS_LITTLE_ENDIAN) endswap_int_array (ptr, len) ; total = fwrite (ptr, 1, len * sizeof (int), psf->file) ; if (CPU_IS_LITTLE_ENDIAN) endswap_int_array (ptr, len) ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_i2bei */int pcm_write_i2lei (SF_PRIVATE *psf, int *ptr, int len){ int total ; if (CPU_IS_BIG_ENDIAN) endswap_int_array (ptr, len) ; total = fwrite (ptr, 1, len * sizeof (int), psf->file) ; if (CPU_IS_BIG_ENDIAN) endswap_int_array (ptr, len) ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_i2lei */int pcm_write_i2f (SF_PRIVATE *psf, int *ptr, int len){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; i2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_i2f *//*----------------------------------------------------------------------------------------------- */int pcm_write_d2sc (SF_PRIVATE *psf, double *ptr, int len, int normalize){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; double normfact ; normfact = (normalize ? ((double) 0x80) : 1.0) ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; d2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth, normfact) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_d2sc */int pcm_write_d2uc (SF_PRIVATE *psf, double *ptr, int len, int normalize){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; double normfact ; normfact = (normalize ? ((double) 0x80) : 1.0) ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; d2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, normfact) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_d2uc */int pcm_write_d2bes (SF_PRIVATE *psf, double *ptr, int len, int normalize){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; double normfact ; normfact = (normalize ? ((double) 0x8000) : 1.0) ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; d2bes_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_d2bes */int pcm_write_d2les (SF_PRIVATE *psf, double *ptr, int len, int normalize){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; double normfact ; normfact = (normalize ? ((double) 0x8000) : 1.0) ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; d2les_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_d2les */int pcm_write_d2let (SF_PRIVATE *psf, double *ptr, int len, int normalize){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; double normfact ; normfact = (normalize ? ((double) 0x800000) : 1.0) ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; d2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_d2les */int pcm_write_d2bet (SF_PRIVATE *psf, double *ptr, int len, int normalize){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; double normfact ; normfact = (normalize ? ((double) 0x800000) : 1.0) ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; d2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_d2bes */int pcm_write_d2bei (SF_PRIVATE *psf, double *ptr, int len, int normalize){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; double normfact ; normfact = (normalize ? ((double) 0x80000000) : 1.0) ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; d2bei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_d2bei */int pcm_write_d2lei (SF_PRIVATE *psf, double *ptr, int len, int normalize){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; double normfact ; normfact = (normalize ? ((double) 0x80000000) : 1.0) ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; d2lei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_d2lei */int pcm_write_d2f (SF_PRIVATE *psf, double *ptr, int len, int normalize){ unsigned int writecount, thiswrite ; int bytecount, bufferlen ; int index = 0, total = 0 ; double normfact ; normfact = (normalize) ? 1.0 : 1.0 ; bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ; bytecount = len * psf->bytewidth ; while (bytecount > 0) { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ; d2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth, normfact) ; thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ; total += thiswrite ; if (thiswrite < writecount) break ; index += thiswrite / psf->bytewidth ; bytecount -= thiswrite ; } ; total /= psf->bytewidth ; if (total < len) psf->error = SFE_SHORT_WRITE ; return total ;} /* pcm_write_d2f *//*----------------------------------------------------------------------------------------------- */static void sc2s_array (signed char *buffer, unsigned int count, short *ptr, int index){ int k ; for (k = 0 ; k < count ; k++) { ptr [index] = ((short) buffer [k]) ; index ++ ; } ;} /* sc2s_array */static void uc2s_array (unsigned char *buffer, unsigned int count, short *ptr, int index){ int k ; for (k = 0 ; k < count ; k++) { ptr [index] = ((((short) buffer [k]) - 128) % 256) ; index ++ ; } ;} /* uc2s_array */staticvoid bet2s_array (tribyte *buffer, unsigned int count, short *ptr, int index){ unsigned char *cptr ; int k ; int value; cptr = (unsigned char*) buffer ; for (k = 0 ; k < count ; k++) { value = (cptr [0] << 24) | (cptr [1] << 16) | (cptr [2] << 8) ; value = BE2H_INT (value) ; ptr [index] = (short) (value >> 16) ; index ++ ; cptr += 3 ; } ;} /* bet2s_array */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -