📄 common.h
字号:
/*** Copyright (C) 1999-2001 Erik de Castro Lopo <erikd@zip.com.au>** ** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU Lesser General Public License as published by** the Free Software Foundation; either version 2.1 of the License, or** (at your option) any later version.** ** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the** GNU Lesser General Public License for more details.** ** You should have received a copy of the GNU Lesser General Public License** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/#ifndef COMMON_H_INCLUDED#define COMMON_H_INCLUDED#ifdef _WIN32 #pragma pack(push,1)#endif#define SF_BUFFER_LEN (4096)#define SF_FILENAME_LEN (256)#define SF_HEADER_LEN (2048)#define BITWIDTH2BYTES(x) (((x) + 7) / 8)#define PEAK_CHANNEL_COUNT 16enum{ SF_MODE_READ = 11, SF_MODE_WRITE = 12, SF_MODE_RW = 13, /* Unlikely that RW will ever be implemented. */ /* PEAK chunk location. */ SF_PEAK_START = 42, SF_PEAK_END = 43, /* Two endian enums. */ SF_ENDIAN_LITTLE = 100, SF_ENDIAN_BIG = 101, /* Char type for 8 bit files. */ SF_CHARS_SIGNED = 200, SF_CHARS_UNSIGNED = 201} ; /* Processor floating point capabilities. float32_get_capabilities () in** src/float32.c returns one of the latter three values.*/enum{ FLOAT_UNKNOWN = 0x00, FLOAT_CAN_RW_LE = 0x23, FLOAT_CAN_RW_BE = 0x34, FLOAT_BROKEN_LE = 0x35, FLOAT_BROKEN_BE = 0x36} ;enum{ SF_FALSE = 0, SF_TRUE = 1} ; /* Function pointer typedefs. */typedef int (*func_seek) (void*, int, int) ;typedef int (*func_short) (void*, short *ptr, unsigned int len) ;typedef int (*func_int) (void*, int *ptr, unsigned int len) ;typedef int (*func_float) (void*, float *ptr, unsigned int len) ;typedef int (*func_double) (void*, double *ptr, unsigned int len, int normalize) ;typedef int (*func_wr_hdr) (void*) ;typedef int (*func_close) (void*) ;/*---------------------------------------------------------------------------------------** PEAK_CHUNK - This chunk type is common to both AIFF and WAVE files although their ** endian encodings are different. */typedef struct { float value ; /* signed value of peak */ unsigned int position ; /* the sample frame for the peak */ } PEAK_POS ; typedef struct { unsigned int version ; /* version of the PEAK chunk */ unsigned int timestamp ; /* secs since 1/1/1970 */ PEAK_POS peak [PEAK_CHANNEL_COUNT] ; /* the peak info */ } PEAK_CHUNK ; /*=======================================================================================** SF_PRIVATE stuct - a pointer to this struct is passed back to the caller of the** sf_open_XXXX functions. The caller however has no knowledge of the struct's** contents. */typedef struct{ /* Force the compiler to double align the start of buffer. */ double buffer [SF_BUFFER_LEN/sizeof(double)] ; char filename [SF_FILENAME_LEN] ; /* logbuffer and logindex should only be changed within the logging functions ** of common.c */ char logbuffer [SF_BUFFER_LEN] ; unsigned char header [SF_HEADER_LEN] ; /* Guard value. If this changes the buffers above have overflowed. */ int Magick ; /* Index variables for maintaining logbuffer and header above. */ unsigned int logindex ; unsigned int headindex, headcurrent ; FILE *file ; int error ; int mode ; /* Open mode : SF_MODE_READ or SF_MODE_WRITE. */ int endian ; /* File endianness : SF_ENDIAN_LITTLE or SF_ENDIAN_BIG. */ int chars ; /* Chars are SF_CHARS_SIGNED or SF_CHARS_UNSIGNED. */ int fl32_endswap ; /* Need to endswap float32s? */ SF_INFO sf ; int has_peak ; /* Has a PEAK chunk (AIFF and WAVE) been read? */ int peak_loc ; /* Write a PEAK chunk at the start or end of the file? */ PEAK_CHUNK peak ; long dataoffset ; /* Offset in number of bytes from beginning of file. */ long datalength ; /* Length in bytes of the audio data. */ long tailstart ; /* Offset to file tailer. */ unsigned int blockwidth ; /* Size in bytes of one set of interleaved samples. */ unsigned int bytewidth ; /* Size in bytes of one sample (one channel). */ long filelength ; long current ; void *fdata ; double normfactor ; func_seek seek_func ; func_short read_short ; func_int read_int ; func_float read_float ; func_double read_double ; func_short write_short ; func_int write_int ; func_float write_float ; func_double write_double ; func_wr_hdr write_header ; func_close close ;} SF_PRIVATE ;enum{ SFE_NO_ERROR = 0, SFE_BAD_FILE, SFE_OPEN_FAILED, SFE_BAD_OPEN_FORMAT, SFE_BAD_SNDFILE_PTR, SFE_BAD_SF_INFO_PTR, SFE_BAD_INT_FD, SFE_BAD_INT_PTR, SFE_MALLOC_FAILED, SFE_BAD_SEEK, SFE_NOT_SEEKABLE, SFE_UNIMPLEMENTED, SFE_BAD_READ_ALIGN, SFE_BAD_WRITE_ALIGN, SFE_UNKNOWN_FORMAT, SFE_NOT_READMODE, SFE_NOT_WRITEMODE, SFE_BAD_MODE_RW, SFE_BAD_SF_INFO, SFE_SHORT_READ, SFE_SHORT_WRITE, SFE_INTERNAL, SFE_WAV_NO_RIFF, SFE_WAV_NO_WAVE, SFE_WAV_NO_FMT, SFE_WAV_FMT_SHORT, SFE_WAV_FMT_TOO_BIG, SFE_WAV_BAD_FACT, SFE_WAV_BAD_PEAK, SFE_WAV_PEAK_B4_FMT, SFE_WAV_BAD_FORMAT, SFE_WAV_BAD_BLOCKALIGN, SFE_WAV_NO_DATA, SFE_WAV_ADPCM_NOT4BIT, SFE_WAV_ADPCM_CHANNELS, SFE_WAV_GSM610_FORMAT, SFE_WAV_UNKNOWN_CHUNK, SFE_AIFF_NO_FORM, SFE_AIFF_AIFF_NO_FORM, SFE_AIFF_COMM_NO_FORM, SFE_AIFF_SSND_NO_COMM, SFE_AIFF_UNKNOWN_CHUNK, SFE_AIFF_COMM_CHUNK_SIZE, SFE_AIFF_BAD_COMM_CHUNK, SFE_AIFF_PEAK_B4_COMM, SFE_AIFF_BAD_PEAK, SFE_AIFF_NO_SSND, SFE_AIFF_NO_DATA, SFE_AU_UNKNOWN_FORMAT, SFE_AU_NO_DOTSND, SFE_RAW_READ_BAD_SPEC, SFE_RAW_BAD_BITWIDTH, SFE_PAF_NO_MARKER, SFE_PAF_VERSION, SFE_PAF_UNKNOWN_FORMAT, SFE_PAF_SHORT_HEADER, SFE_SVX_NO_FORM, SFE_SVX_NO_BODY, SFE_SVX_NO_DATA, SFE_SVX_BAD_COMP, SFE_NIST_BAD_HEADER, SFE_NIST_BAD_ENCODING, SFE_SMTD_NO_SEKD, SFE_SMTD_NO_SAMR, SFE_VOC_NO_CREATIVE, SFE_VOC_BAD_VERSION, SFE_VOC_BAD_MARKER, SFE_MAX_ERROR /* This must be last in list. */} ;/* Get the float32 capability of the processor at run time.** Implemented in src/float32.c.*/int float32_get_capability (int endianness) ;float float32_read (unsigned char *cptr) ;void float32_write (float in, unsigned char *out) ;/* Endian swapping routines implemented in src/common.h. */void endswap_short_array (short *ptr, int len) ;void endswap_int_array (int *ptr, int len) ;/* Functions for writing to the internal logging buffer. */void psf_log_printf (SF_PRIVATE *psf, char *format, ...) ;void psf_log_SFINFO (SF_PRIVATE *psf) ;/* Functions used when writing file headers. */int psf_binheader_writef (SF_PRIVATE *psf, char *format, ...) ;void psf_asciiheader_printf (SF_PRIVATE *psf, char *format, ...) ;/* Functions used when reading file headers. */int psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...) ;/* Functions used in the write function for updating the peak chunk. */void peak_update_short (SF_PRIVATE *psf, short *ptr, size_t items) ;void peak_update_int (SF_PRIVATE *psf, int *ptr, size_t items) ;void peak_update_double (SF_PRIVATE *psf, double *ptr, size_t items) ;/* Init functions for a number of common data encodings. */int pcm_read_init (SF_PRIVATE *psf) ;int pcm_write_init (SF_PRIVATE *psf) ;int ulaw_read_init (SF_PRIVATE *psf) ;int ulaw_write_init (SF_PRIVATE *psf) ;int alaw_read_init (SF_PRIVATE *psf) ;int alaw_write_init (SF_PRIVATE *psf) ;int float32_read_init (SF_PRIVATE *psf) ;int float32_write_init (SF_PRIVATE *psf) ;/* Functions for reading and writing different file formats.*/int aiff_open_read (SF_PRIVATE *psf) ;int aiff_open_write (SF_PRIVATE *psf) ;int au_open_read (SF_PRIVATE *psf) ;int au_nh_open_read (SF_PRIVATE *psf) ; /* Headerless version of AU. */int au_open_write (SF_PRIVATE *psf) ;int wav_open_read (SF_PRIVATE *psf) ;int wav_open_write (SF_PRIVATE *psf) ;int raw_open_read (SF_PRIVATE *psf) ;int raw_open_write (SF_PRIVATE *psf) ;int paf_open_read (SF_PRIVATE *psf) ;int paf_open_write (SF_PRIVATE *psf) ;int svx_open_read (SF_PRIVATE *psf) ;int svx_open_write (SF_PRIVATE *psf) ;int nist_open_read (SF_PRIVATE *psf) ;int nist_open_write (SF_PRIVATE *psf) ;int smpltd_open_read (SF_PRIVATE *psf) ;int smpltd_open_write (SF_PRIVATE *psf) ;int voc_open_read (SF_PRIVATE *psf) ;int voc_open_write (SF_PRIVATE *psf) ;int rx2_open_read (SF_PRIVATE *psf) ;int rx2_open_write (SF_PRIVATE *psf) ;#ifdef _WIN32 #pragma pack(pop,1)#endif#endif /* COMMON_H_INCLUDED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -