typeconver.c

来自「speech signal process tools」· C语言 代码 · 共 1,620 行 · 第 1/3 页

C
1,620
字号
		    CLIP;		}		else if (src[i] > CHAR_MAX)		{		    dest[i].real = CHAR_MAX;		    CLIP;		}		else if (src[i] > 0) dest[i].real = src[i] + 0.5;		else dest[i].real = - (0.5 - src[i]);		dest[i].imag = 0;	    }	    break;}	case SHORT_CPLX: {	    short_cplx	*dest = (short_cplx *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < SHRT_MIN)		{		    dest[i].real = SHRT_MIN;		    CLIP;		}		else if (src[i] > SHRT_MAX)		{		    dest[i].real = SHRT_MAX;		    CLIP;		}		else if (src[i] > 0) dest[i].real = src[i] + 0.5;		else dest[i].real = - (0.5 - src[i]);		dest[i].imag = 0;	    }	    break;}	case LONG_CPLX: {	    long_cplx	*dest = (long_cplx *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < LONG_MIN)		{		    dest[i].real = LONG_MIN;		    CLIP;		}		else if (src[i] > LONG_MAX)		{		    dest[i].real = LONG_MAX;		    CLIP;		}		else if (src[i] > 0) dest[i].real = src[i] + 0.5;		else dest[i].real = - (0.5 - src[i]);		dest[i].imag = 0;	    }	    break;}	case FLOAT_CPLX: {	    float_cplx	*dest = (float_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i];		dest[i].imag = 0.0;	    }	    break;}	case DOUBLE_CPLX: {	    double_cplx	*dest = (double_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i];		dest[i].imag = 0.0;	    }	    break;}	}	break;}    case DOUBLE: {	double	*src = (double *) source;	switch (dest_type)	{	case BYTE: {	    char    *dest = (char *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < CHAR_MIN)		{		    dest[i] = CHAR_MIN;		    CLIP;		}		else if (src[i] > CHAR_MAX)		{		    dest[i] = CHAR_MAX;		    CLIP;		}		else if (src[i] > 0) dest[i] = src[i] + 0.5;		else dest[i] = - (0.5 - src[i]);	    }	    break;}	case SHORT: {	    short   *dest = (short *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < SHRT_MIN)		{		    dest[i] = SHRT_MIN;		    CLIP;		}		else if (src[i] > SHRT_MAX)		{		    dest[i] = SHRT_MAX;		    CLIP;		}		else if (src[i] > 0) dest[i] = src[i] + 0.5;		else dest[i] = - (0.5 - src[i]);	    }	    break;}	case LONG: {	    long    *dest = (long *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < LONG_MIN)		{		    dest[i] = LONG_MIN;		    CLIP;		}		else if (src[i] > LONG_MAX)		{		    dest[i] = LONG_MAX;		    CLIP;		}		else if (src[i] > 0) dest[i] = src[i] + 0.5;		else dest[i] = - (0.5 - src[i]);	    }	    break;}	case FLOAT: {	    float   *dest = (float *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < - FLT_MAX)		{		    dest[i] = - FLT_MAX;		    CLIP;		}		else if (src[i] > FLT_MAX)		{		    dest[i] = FLT_MAX;		    CLIP;		}		else dest[i] = src[i];	    }	    break;}	case DOUBLE: {	    double  *dest = (double *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i];	    }	    break;}	case BYTE_CPLX: {	    byte_cplx	*dest = (byte_cplx *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < CHAR_MIN)		{		    dest[i].real = CHAR_MIN;		    CLIP;		}		else if (src[i] > CHAR_MAX)		{		    dest[i].real = CHAR_MAX;		    CLIP;		}		else if (src[i] > 0) dest[i].real = src[i] + 0.5;		else dest[i].real = - (0.5 - src[i]);		dest[i].imag = 0;	    }	    break;}	case SHORT_CPLX: {	    short_cplx	*dest = (short_cplx *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < SHRT_MIN)		{		    dest[i].real = SHRT_MIN;		    CLIP;		}		else if (src[i] > SHRT_MAX)		{		    dest[i].real = SHRT_MAX;		    CLIP;		}		else if (src[i] > 0) dest[i].real = src[i] + 0.5;		else dest[i].real = - (0.5 - src[i]);		dest[i].imag = 0;	    }	    break;}	case LONG_CPLX: {	    long_cplx	*dest = (long_cplx *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < LONG_MIN)		{		    dest[i].real = LONG_MIN;		    CLIP;		}		else if (src[i] > LONG_MAX)		{		    dest[i].real = LONG_MAX;		    CLIP;		}		else if (src[i] > 0) dest[i].real = src[i] + 0.5;		else dest[i].real = - (0.5 - src[i]);		dest[i].imag = 0;	    }	    break;}	case FLOAT_CPLX: {	    float_cplx	*dest = (float_cplx *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i] < - FLT_MAX)		{		    dest[i].real = - FLT_MAX;		    CLIP;		}		else if (src[i] > FLT_MAX)		{		    dest[i].real = FLT_MAX;		    CLIP;		}		else dest[i].real = src[i];		dest[i].imag = 0.0;	    }	    break;}	case DOUBLE_CPLX: {	    double_cplx	*dest = (double_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i];		dest[i].imag = 0.0;	    }	    break;}	}	break;}    case BYTE_CPLX: {	byte_cplx   *src = (byte_cplx *) source;	switch (dest_type)	{	case BYTE: {	    char    *dest = (char *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case SHORT: {	    short   *dest = (short *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case LONG: {	    long    *dest = (long *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case FLOAT: {	    float   *dest = (float *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case DOUBLE: {	    double  *dest = (double *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case BYTE_CPLX: {	    byte_cplx	*dest = (byte_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i];	    }	    break;}	case SHORT_CPLX: {	    short_cplx	*dest = (short_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i].real;		dest[i].imag = src[i].imag;	    }	    break;}	case LONG_CPLX: {	    long_cplx	*dest = (long_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i].real;		dest[i].imag = src[i].imag;	    }	    break;}	case FLOAT_CPLX: {	    float_cplx	*dest = (float_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i].real;		dest[i].imag = src[i].imag;	    }	    break;}	case DOUBLE_CPLX: {	    double_cplx	*dest = (double_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i].real;		dest[i].imag = src[i].imag;	    }	    break;}	}	break;}    case SHORT_CPLX: {	short_cplx   *src = (short_cplx *) source;	switch (dest_type)	{	case BYTE: {	    char    *dest = (char *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i].real < CHAR_MIN)		{		    dest[i] = CHAR_MIN;		    CLIP_CX;		}		else if (src[i].real > CHAR_MAX)		{		    dest[i] = CHAR_MAX;		    CLIP_CX;		}		else dest[i] = src[i].real;	    }	    break;}	case SHORT: {	    short   *dest = (short *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case LONG: {	    long    *dest = (long *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case FLOAT: {	    float   *dest = (float *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case DOUBLE: {	    double  *dest = (double *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case BYTE_CPLX: {	    byte_cplx	*dest = (byte_cplx *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i].real < CHAR_MIN)		{		    dest[i].real = CHAR_MIN;		    CLIP_RE;		}		else if (src[i].real > CHAR_MAX)		{		    dest[i].real = CHAR_MAX;		    CLIP_RE;		}		else dest[i].real = src[i].real;		if (src[i].imag < CHAR_MIN)		{		    dest[i].imag = CHAR_MIN;		    CLIP_IM;		}		else if (src[i].imag > CHAR_MAX)		{		    dest[i].imag = CHAR_MAX;		    CLIP_IM;		}		else dest[i].imag = src[i].imag;	    }	    break;}	case SHORT_CPLX: {	    short_cplx	*dest = (short_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i];	    }	    break;}	case LONG_CPLX: {	    long_cplx	*dest = (long_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i].real;		dest[i].imag = src[i].imag;	    }	    break;}	case FLOAT_CPLX: {	    float_cplx	*dest = (float_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i].real;		dest[i].imag = src[i].imag;	    }	    break;}	case DOUBLE_CPLX: {	    double_cplx	*dest = (double_cplx *) destination;	    for (i = 0; i < num; i++)	    {		dest[i].real = src[i].real;		dest[i].imag = src[i].imag;	    }	    break;}	}	break;}    case LONG_CPLX: {	long_cplx   *src = (long_cplx *) source;	switch (dest_type)	{	case BYTE: {	    char    *dest = (char *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i].real < CHAR_MIN)		{		    dest[i] = CHAR_MIN;		    CLIP_CX;		}		else if (src[i].real > CHAR_MAX)		{		    dest[i] = CHAR_MAX;		    CLIP_CX;		}		else dest[i] = src[i].real;	    }	    break;}	case SHORT: {	    short   *dest = (short *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i].real < SHRT_MIN)		{		    dest[i] = SHRT_MIN;		    CLIP_CX;		}		else if (src[i].real > SHRT_MAX)		{		    dest[i] = SHRT_MAX;		    CLIP_CX;		}		else dest[i] = src[i].real;	    }	    break;}	case LONG: {	    long    *dest = (long *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case FLOAT: {	    float   *dest = (float *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case DOUBLE: {	    double  *dest = (double *) destination;	    for (i = 0; i < num; i++)	    {		dest[i] = src[i].real;	    }	    break;}	case BYTE_CPLX: {	    byte_cplx	*dest = (byte_cplx *) destination;	    for (i = 0; i < num; i++)	    {		if (src[i].real < CHAR_MIN)		{		    dest[i].real = CHAR_MIN;		    CLIP_RE;		}		else if (src[i].real > CHAR_MAX)		{

⌨️ 快捷键说明

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