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

📄 _sndlib.h

📁 音频信号的重采样程序,如44.1K的WAV转换成采样频率为48K的WAV.
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef SNDLIB_H#define SNDLIB_H#define SNDLIB_VERSION 20#define SNDLIB_REVISION 0#define SNDLIB_DATE "28-Mar-06"#include <stdio.h>#include <mus-config.h>#if HAVE_UNISTD_H && (!(defined(_MSC_VER)))  #include <unistd.h>#endif#include <sys/types.h>#ifndef __cplusplus#if HAVE_STDBOOL_H  #include <stdbool.h>#else#ifndef true  #define bool	int  #define true	1  #define false	0#endif#endif#endif#if (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T > 4)) || (defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64))  #if (SIZEOF_OFF_T == SIZEOF_LONG)    #define OFF_TD "%ld"  #else    #define OFF_TD "%lld"  #endif#else  #define OFF_TD "%d"#endif#ifndef MUS_LITTLE_ENDIAN  #if WORDS_BIGENDIAN    #define MUS_LITTLE_ENDIAN 0  #else    #define MUS_LITTLE_ENDIAN 1  #endif#endif#ifndef c__FUNCTION__#if (HAVE___FUNC__) || (defined(__STDC__) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))  #define c__FUNCTION__ __func__#else#ifdef __GNUC__  #define c__FUNCTION__ __FUNCTION__#else  #define c__FUNCTION__ ""#endif#endif#endif#if (!defined(M_PI))  #define M_PI 3.14159265358979323846264338327  #define M_PI_2 (M_PI / 2.0)#endif#define POWER_OF_2_P(x)	((((x) - 1) & (x)) == 0)/* from sys/param.h */#ifndef SEEK_SET  #define SEEK_SET 0  #define SEEK_END 2#endif#if (!SNDLIB_USE_FLOATS)  #define mus_sample_t int  #ifndef MUS_SAMPLE_BITS    #define MUS_SAMPLE_BITS 24  #endif  #define MUS_SAMPLE_0 0  #define MUS_BYTE_TO_SAMPLE(n) ((mus_sample_t)((n) << (MUS_SAMPLE_BITS - 8)))  #define MUS_SAMPLE_TO_BYTE(n) ((n) >> (MUS_SAMPLE_BITS - 8))  #define MUS_SHORT_TO_SAMPLE(n) ((mus_sample_t)((n) << (MUS_SAMPLE_BITS - 16)))  #define MUS_SAMPLE_TO_SHORT(n) ((short)((n) >> (MUS_SAMPLE_BITS - 16)))  #if (MUS_SAMPLE_BITS < 24)    #define MUS_INT24_TO_SAMPLE(n) ((mus_sample_t)((n) >> (24 - MUS_SAMPLE_BITS)))    #define MUS_SAMPLE_TO_INT24(n) ((int)((n) << (24 - MUS_SAMPLE_BITS)))  #else    #define MUS_INT24_TO_SAMPLE(n) ((mus_sample_t)((n) << (MUS_SAMPLE_BITS - 24)))    #define MUS_SAMPLE_TO_INT24(n) ((int)((n) >> (MUS_SAMPLE_BITS - 24)))  #endif  #define MUS_INT_TO_SAMPLE(n) ((mus_sample_t)(n))  #define MUS_SAMPLE_TO_INT(n) ((int)(n))  /* these are for direct read/write (no cross-image assumption is made about 32 bit int scaling) */  #define MUS_FLOAT_TO_FIX ((MUS_SAMPLE_BITS < 32) ? (1 << (MUS_SAMPLE_BITS - 1)) : 0x7fffffff)  #define MUS_FIX_TO_FLOAT (1.0 / (float)(MUS_FLOAT_TO_FIX))  #define MUS_FLOAT_TO_SAMPLE(n) ((mus_sample_t)((n) * MUS_FLOAT_TO_FIX))  #define MUS_SAMPLE_TO_FLOAT(n) ((float)((n) * MUS_FIX_TO_FLOAT))  #define MUS_DOUBLE_TO_SAMPLE(n) ((mus_sample_t)((n) * MUS_FLOAT_TO_FIX))  #define MUS_SAMPLE_TO_DOUBLE(n) ((double)((n) * MUS_FIX_TO_FLOAT))  #define MUS_SAMPLE_MAX ((mus_sample_t)((MUS_SAMPLE_BITS < 32) ? (MUS_FLOAT_TO_FIX - 1) : 0x7fffffff))  #define MUS_SAMPLE_MIN ((mus_sample_t)((MUS_SAMPLE_BITS < 32) ? (-(MUS_FLOAT_TO_FIX)) : -0x7fffffff))  #define mus_sample_abs(Sample) abs(Sample)#else  #define mus_sample_t Float  #ifndef MUS_SAMPLE_BITS    #define MUS_SAMPLE_BITS 24  #endif  #define MUS_SAMPLE_0 0.0  #define MUS_BYTE_TO_SAMPLE(n) ((mus_sample_t)((Float)(n) / (Float)(1 << 7)))  #define MUS_SHORT_TO_SAMPLE(n) ((mus_sample_t)((Float)(n) / (Float)(1 << 15)))  #define MUS_INT_TO_SAMPLE(n) ((mus_sample_t)((Float)(n) / (Float)(1 << (MUS_SAMPLE_BITS - 1))))  #define MUS_INT24_TO_SAMPLE(n) ((mus_sample_t)((Float)(n) / (Float)(1 << 23)))  #define MUS_FLOAT_TO_FIX 1.0  #define MUS_FIX_TO_FLOAT 1.0  #define MUS_FLOAT_TO_SAMPLE(n) ((mus_sample_t)(n))  #define MUS_DOUBLE_TO_SAMPLE(n) ((mus_sample_t)(n))  #define MUS_SAMPLE_TO_FLOAT(n) ((Float)(n))  #define MUS_SAMPLE_TO_DOUBLE(n) ((double)(n))  #define MUS_SAMPLE_TO_INT(n) ((int)((n) * (1 << (MUS_SAMPLE_BITS - 1))))  #define MUS_SAMPLE_TO_INT24(n) ((int)((n) * (1 << 23)))  #define MUS_SAMPLE_TO_SHORT(n) ((short)((n) * (1 << 15)))  #define MUS_SAMPLE_TO_BYTE(n) ((char)((n) * (1 << 7)))  #define MUS_SAMPLE_MAX 0.99999  #define MUS_SAMPLE_MIN (-1.0)  #define mus_sample_abs(Sample) fabs(Sample)#endifenum {MUS_UNSUPPORTED, MUS_NEXT, MUS_AIFC, MUS_RIFF, MUS_BICSF, MUS_NIST, MUS_INRS, MUS_ESPS, MUS_SVX, MUS_VOC,       MUS_SNDT, MUS_RAW, MUS_SMP, MUS_AVR, MUS_IRCAM, MUS_SD1, MUS_SPPACK, MUS_MUS10, MUS_HCOM, MUS_PSION, MUS_MAUD,      MUS_IEEE, MUS_MATLAB, MUS_ADC, MUS_MIDI, MUS_SOUNDFONT, MUS_GRAVIS, MUS_COMDISCO, MUS_GOLDWAVE, MUS_SRFS,      MUS_MIDI_SAMPLE_DUMP, MUS_DIAMONDWARE, MUS_ADF, MUS_SBSTUDIOII, MUS_DELUSION,      MUS_FARANDOLE, MUS_SAMPLE_DUMP, MUS_ULTRATRACKER, MUS_YAMAHA_SY85, MUS_YAMAHA_TX16W, MUS_DIGIPLAYER,      MUS_COVOX, MUS_AVI, MUS_OMF, MUS_QUICKTIME, MUS_ASF, MUS_YAMAHA_SY99, MUS_KURZWEIL_2000,      MUS_AIFF, MUS_PAF, MUS_CSL, MUS_FILE_SAMP, MUS_PVF, MUS_SOUNDFORGE, MUS_TWINVQ, MUS_AKAI4,      MUS_IMPULSETRACKER, MUS_KORG, MUS_NVF, MUS_MAUI, MUS_SDIF, MUS_OGG, MUS_FLAC, MUS_SPEEX, MUS_MPEG,      MUS_SHORTEN, MUS_TTA, MUS_WAVPACK,      MUS_NUM_HEADER_TYPES};#if defined(__GNUC__) && (!(defined(__cplusplus)))  #define MUS_HEADER_TYPE_OK(n) ({ int _sndlib_h_0 = n; ((_sndlib_h_0 > MUS_UNSUPPORTED) && (_sndlib_h_0 <= MUS_MAUI)); })#else  #define MUS_HEADER_TYPE_OK(n) (((n) > MUS_UNSUPPORTED) && ((n) <= MUS_MAUI))#endifenum {MUS_UNKNOWN, MUS_BSHORT, MUS_MULAW, MUS_BYTE, MUS_BFLOAT, MUS_BINT, MUS_ALAW, MUS_UBYTE, MUS_B24INT,      MUS_BDOUBLE, MUS_LSHORT, MUS_LINT, MUS_LFLOAT, MUS_LDOUBLE, MUS_UBSHORT, MUS_ULSHORT, MUS_L24INT,      MUS_BINTN, MUS_LINTN, MUS_BFLOAT_UNSCALED, MUS_LFLOAT_UNSCALED, MUS_BDOUBLE_UNSCALED, MUS_LDOUBLE_UNSCALED,      MUS_NUM_DATA_FORMATS};/* MUS_LINTN and MUS_BINTN refer to 32 bit ints with 31 bits of "fraction" -- the data is "left justified" *//* "unscaled" means the float value is used directly (i.e. not as -1.0 to 1.0, but (probably) -32768.0 to 32768.0) */#if defined(__GNUC__) && (!(defined(__cplusplus)))  #define MUS_DATA_FORMAT_OK(n) ({ int _sndlib_h_1 = n; ((_sndlib_h_1 > MUS_UNKNOWN) && (_sndlib_h_1 < MUS_NUM_DATA_FORMATS)); })#else  #define MUS_DATA_FORMAT_OK(n) (((n) > MUS_UNKNOWN) && ((n) < MUS_NUM_DATA_FORMATS))#endif#if MUS_MAC_OSX  #if MUS_LITTLE_ENDIAN    #define MUS_AUDIO_COMPATIBLE_FORMAT MUS_LFLOAT  #else    #define MUS_AUDIO_COMPATIBLE_FORMAT MUS_BFLOAT  #endif#else  #if MUS_LITTLE_ENDIAN    #define MUS_AUDIO_COMPATIBLE_FORMAT MUS_LSHORT  #else    #define MUS_AUDIO_COMPATIBLE_FORMAT MUS_BSHORT  #endif#endif#define MUS_NIST_SHORTPACK 2#define MUS_AIFF_IMA_ADPCM 99#define MUS_AUDIO_PACK_SYSTEM(n) ((n) << 16)#define MUS_AUDIO_SYSTEM(n) (((n) >> 16) & 0xffff)#define MUS_AUDIO_DEVICE(n) ((n) & 0xffff)enum {MUS_AUDIO_DEFAULT, MUS_AUDIO_DUPLEX_DEFAULT, MUS_AUDIO_ADAT_IN, MUS_AUDIO_AES_IN, MUS_AUDIO_LINE_OUT,      MUS_AUDIO_LINE_IN, MUS_AUDIO_MICROPHONE, MUS_AUDIO_SPEAKERS, MUS_AUDIO_DIGITAL_IN, MUS_AUDIO_DIGITAL_OUT,      MUS_AUDIO_DAC_OUT, MUS_AUDIO_ADAT_OUT, MUS_AUDIO_AES_OUT, MUS_AUDIO_DAC_FILTER, MUS_AUDIO_MIXER,      MUS_AUDIO_LINE1, MUS_AUDIO_LINE2, MUS_AUDIO_LINE3, MUS_AUDIO_AUX_INPUT, MUS_AUDIO_CD,      MUS_AUDIO_AUX_OUTPUT, MUS_AUDIO_SPDIF_IN, MUS_AUDIO_SPDIF_OUT, MUS_AUDIO_AMP, MUS_AUDIO_SRATE,      MUS_AUDIO_CHANNEL, MUS_AUDIO_FORMAT, MUS_AUDIO_IMIX, MUS_AUDIO_IGAIN, MUS_AUDIO_RECLEV,      MUS_AUDIO_PCM, MUS_AUDIO_PCM2, MUS_AUDIO_OGAIN, MUS_AUDIO_LINE, MUS_AUDIO_SYNTH,      MUS_AUDIO_BASS, MUS_AUDIO_TREBLE, MUS_AUDIO_PORT, MUS_AUDIO_SAMPLES_PER_CHANNEL,      MUS_AUDIO_DIRECTION};/* Snd's recorder uses MUS_AUDIO_DIRECTION to find the size of this list */#if defined(__GNUC__) && (!(defined(__cplusplus)))  #define MUS_AUDIO_DEVICE_OK(a) ({ int _sndlib_h_2 = a; ((_sndlib_h_2 >= MUS_AUDIO_DEFAULT) && (_sndlib_h_2 <= MUS_AUDIO_DIRECTION)); })#else  #define MUS_AUDIO_DEVICE_OK(a) (((a) >= MUS_AUDIO_DEFAULT) && ((a) <= MUS_AUDIO_DIRECTION))#endif#define MUS_ERROR -1enum {MUS_NO_ERROR, MUS_NO_FREQUENCY, MUS_NO_PHASE, MUS_NO_GEN, MUS_NO_LENGTH,      MUS_NO_FREE, MUS_NO_DESCRIBE, MUS_NO_DATA, MUS_NO_SCALER,      MUS_MEMORY_ALLOCATION_FAILED, MUS_UNSTABLE_TWO_POLE_ERROR,      MUS_CANT_OPEN_FILE, MUS_NO_SAMPLE_INPUT, MUS_NO_SAMPLE_OUTPUT,      MUS_NO_SUCH_CHANNEL, MUS_NO_FILE_NAME_PROVIDED, MUS_NO_LOCATION, MUS_NO_CHANNEL,      MUS_NO_SUCH_FFT_WINDOW, MUS_UNSUPPORTED_DATA_FORMAT, MUS_HEADER_READ_FAILED,      MUS_UNSUPPORTED_HEADER_TYPE,      MUS_FILE_DESCRIPTORS_NOT_INITIALIZED, MUS_NOT_A_SOUND_FILE, MUS_FILE_CLOSED, MUS_WRITE_ERROR,      MUS_HEADER_WRITE_FAILED, MUS_CANT_OPEN_TEMP_FILE, MUS_INTERRUPTED, MUS_BAD_ENVELOPE,      MUS_AUDIO_CHANNELS_NOT_AVAILABLE, MUS_AUDIO_SRATE_NOT_AVAILABLE, MUS_AUDIO_FORMAT_NOT_AVAILABLE,      MUS_AUDIO_NO_INPUT_AVAILABLE, MUS_AUDIO_CONFIGURATION_NOT_AVAILABLE,       MUS_AUDIO_NO_LINES_AVAILABLE, MUS_AUDIO_WRITE_ERROR, MUS_AUDIO_SIZE_NOT_AVAILABLE, MUS_AUDIO_DEVICE_NOT_AVAILABLE,      MUS_AUDIO_CANT_CLOSE, MUS_AUDIO_CANT_OPEN, MUS_AUDIO_READ_ERROR, MUS_AUDIO_AMP_NOT_AVAILABLE,      MUS_AUDIO_CANT_WRITE, MUS_AUDIO_CANT_READ, MUS_AUDIO_NO_READ_PERMISSION,      MUS_CANT_CLOSE_FILE, MUS_ARG_OUT_OF_RANGE,      MUS_MIDI_OPEN_ERROR, MUS_MIDI_READ_ERROR, MUS_MIDI_WRITE_ERROR, MUS_MIDI_CLOSE_ERROR, MUS_MIDI_INIT_ERROR, MUS_MIDI_MISC_ERROR,      MUS_NO_CHANNELS, MUS_NO_HOP, MUS_NO_WIDTH, MUS_NO_FILE_NAME, MUS_NO_RAMP, MUS_NO_RUN,       MUS_NO_INCREMENT, MUS_NO_OFFSET,      MUS_NO_XCOEFF, MUS_NO_YCOEFF, MUS_NO_XCOEFFS, MUS_NO_YCOEFFS, MUS_NO_RESET,      MUS_INITIAL_ERROR_TAG};/* keep this list in sync with mus_error_names in sound.c and snd-test.scm|rb */#if MUS_DEBUGGING  #define CALLOC(a, b)  mem_calloc((a), (b), c__FUNCTION__, __FILE__, __LINE__)  #define MALLOC(a)     mem_malloc((a), c__FUNCTION__, __FILE__, __LINE__)#ifndef __cplusplus  #define FREE(a)       a = mem_free(a, c__FUNCTION__, __FILE__, __LINE__)#else  #define FREE(a)       mem_free(a, c__FUNCTION__, __FILE__, __LINE__)#endif  #define REALLOC(a, b) mem_realloc(a, (b), c__FUNCTION__, __FILE__, __LINE__)#else  #define CALLOC(a, b)  calloc((size_t)(a), (size_t)(b))  #define MALLOC(a)     malloc((size_t)(a))  #define FREE(a)       free(a)  #define REALLOC(a, b) realloc(a, (size_t)(b))#endif#if MUS_WINDOZE  #ifdef FOPEN    #undef FOPEN  #endif  #if USE_SND    #define OPEN(File, Flags, Mode) snd_open((File), (Flags), 0)  #else    #define OPEN(File, Flags, Mode) open((File), (Flags))  #endif#else  #if USE_SND    #define OPEN(File, Flags, Mode) snd_open((File), (Flags), (Mode))   #else    #define OPEN(File, Flags, Mode) open((File), (Flags), (Mode))  #endif#endif#if USE_SND  #define FOPEN(File, Flags)        snd_fopen((File), (Flags))  #define CREAT(File, Flags)        snd_creat((File), (Flags))  #define REMOVE(OldF)              snd_remove(OldF, IGNORE_CACHE)  #define STRERROR(Err)             snd_io_strerror()  #define CLOSE(Fd, Name)           snd_close(Fd, Name)  #define FCLOSE(Fd, Name)          snd_fclose(Fd, Name)#else  #define FOPEN(File, Flags)        fopen((File), (Flags))  #define CREAT(File, Flags)        creat((File), (Flags))  #define REMOVE(OldF)              remove(OldF)  #define STRERROR(Err)             strerror(Err)  #define CLOSE(Fd, Name)           close(Fd)  #define FCLOSE(Fd, Name)          fclose(Fd)#endif#ifndef S_setB  #if HAVE_RUBY    #define S_setB "set_"  #endif  #if HAVE_SCHEME    #define S_setB "set! "  #endif  #if HAVE_FORTH    #define S_setB "set-"  #endif  #if (!HAVE_EXTENSION_LANGUAGE)    #define S_setB "set-"  #endif#endif#define MUS_LOOP_INFO_SIZE 8#ifndef Float  #define Float float#endif#ifdef __cplusplusextern "C" {#endif/* -------- sound.c -------- */#ifdef __GNUC__  int mus_error(int error, const char *format, ...) __attribute__ ((format (printf, 2, 3)));  void mus_print(const char *format, ...)           __attribute__ ((format (printf, 1, 2)));  char *mus_format(const char *format, ...)         __attribute__ ((format (printf, 1, 2)));

⌨️ 快捷键说明

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