亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? openlpc.fixed.c

?? LPC10 2.4Kpbs 語音壓縮定點運算C語言源程序OPENLPC
?? C
?? 第 1 頁 / 共 3 頁
字號:
    temp >>= PRECISION;
    temp = (temp - ftofix32(.0170881256f)) * x;
    temp >>= PRECISION;
    temp = (temp + ftofix32(.0308918810f)) * x;
    temp >>= PRECISION;
    temp = (temp - ftofix32(.0501743046f)) * x;
    temp >>= PRECISION;
    temp = (temp + ftofix32(.0889789874f)) * x;
    temp >>= PRECISION;
    temp = (temp - ftofix32(.2145988016f)) * x;
    temp >>= PRECISION;
    temp = (temp + ftofix32(1.570796305f)) * fixsqrt32(itofix32(1) - x);
    temp >>= PRECISION;

    return sign * (ftofix32(M_PI/2) - (fixed32)temp);
}

#define PREEMPH

#define bcopy(a, b, n)	  memmove(b, a, n)

#define LPC_FILTORDER   10
#define FS              8000.0	/* Sampling rate */
#define MAXWINDOW       1000	/* Max analysis window length */


typedef struct openlpc_e_state{
    int     framelen, buflen;
    fixed32 s[MAXWINDOW], y[MAXWINDOW], h[MAXWINDOW];
    fixed32 xv1[3], yv1[3],
            xv2[2], yv2[2],
            xv3[1], yv3[3],
            xv4[2], yv4[2];
    fixed32 w[MAXWINDOW], r[LPC_FILTORDER+1];
} openlpc_e_state_t;

typedef struct openlpc_d_state{
    fixed32 Oldper, OldG, Oldk[LPC_FILTORDER + 1];
    fixed32 bp[LPC_FILTORDER+1];
    fixed32 exc;
    fixed32 gainadj;
    int pitchctr, framelen, buflen;
} openlpc_d_state_t;

#define FC		200.0	/* Pitch analyzer filter cutoff */
#define DOWN		5	/* Decimation for pitch analyzer */
#define MINPIT		40.0	/* Minimum pitch (observed: 74) */
#define MAXPIT		320.0	/* Maximum pitch (observed: 250) */

#define MINPER		(int)(FS / (DOWN * MAXPIT) + .5)	/* Minimum period  */
#define MAXPER		(int)(FS / (DOWN * MINPIT) + .5)	/* Maximum period  */

#define REAL_MINPER	 (DOWN * MINPER) /* converted to samples units */

#define WSCALE		1.5863	/* Energy loss due to windowing */

#define BITS_FOR_LPC 38

#define ARCSIN_Q /* provides better quantization of first two k[] at low bitrates */

#if BITS_FOR_LPC == 38
/* (38 bit LPC-10, 2.7 Kbit/s @ 20ms, 2.4 Kbit/s @ 22.5 ms */
static int parambits[LPC_FILTORDER] = {6,5,5,4,4,3,3,3,3,2};
#elif BITS_FOR_LPC == 32
/* (32 bit LPC-10, 2.4 Kbit/s, not so good */
static int parambits[LPC_FILTORDER] = {5,5,5,4,3,3,2,2,2,1};
#else /* BITS_FOR_LPC == 80	*/
/* 80-bit LPC10, 4.8 Kbit/s */
static int parambits[LPC_FILTORDER] = {8,8,8,8,8,8,8,8,8,8};
#endif

static fixed32 logmaxminper;
static int sizeofparm;	/* computed by lpc_init */

static void auto_correl1(fixed32 *w, int n, fixed32 *r)
{
    int i, k;
    fixed64 temp, temp2;
    
    for (k=0; k <= MAXPER; k++, n--) {
        temp = 0;
        for (i=0; i < n; i++) {
            temp2 = w[i];
            temp += temp2 * w[i+k];
        }
        r[k] = (fixed32)(temp >> PRECISION);
    }
}

static void auto_correl2(fixed32 *w, int n, fixed32 *r)
{
    int i, k;
    fixed64 temp, temp2;
    
    for (k=0; k <= LPC_FILTORDER; k++, n--) {
        temp = 0;
        for (i=0; i < n; i++) {
            temp2 = w[i];
            temp += temp2 * w[i+k];
        }
        r[k] = (fixed32)(temp >> PRECISION);
    }
}

static void durbin(fixed32 r[], int p, fixed32 k[], fixed32 *g)
{
    int i, j;
    fixed32 a[LPC_FILTORDER+1], at[LPC_FILTORDER+1], e;
    
    for (i=0; i <= p; i++)
        a[i] = at[i] = 0;
    
    e = r[0];
    for (i=1; i <= p; i++) {
        k[i] = -r[i];
        for (j=1; j < i; j++) {
            at[j] = a[j];
            k[i] -= fixmul32(a[j], r[i-j]);
        }
        if (e == 0) {  /* fix by John Walker */
            *g = 0;
            return;
        }
        k[i] = fixdiv32(k[i], e);
        a[i] = k[i];
        for (j=1; j < i; j++)
            a[j] = at[j] + fixmul32(k[i], at[i-j]);
        e = fixmul32(e, (itofix32(1) - fixmul32(k[i], k[i])));
    }
    if (e < 0) {
        e = 0; /* fix by John Walker */
    }
    *g = fixsqrt32(e);
}

static void calc_pitch(fixed32 w[], int len, fixed32 *per)
{
    int i, j, rpos;
    fixed32 d[MAXWINDOW / DOWN], r[MAXPER + 1], rmax;
    fixed32 rval, rm, rp;
    fixed32 x, y;
    fixed32 vthresh;
    
    /* decimation */
    for (i=0, j=0; i < len; i+=DOWN)
        d[j++] = w[i];
    
    auto_correl1(d, len / DOWN, r);
    
    /* find peak between MINPER and MAXPER */
    x = itofix32(1);
    rpos = 0;
    rmax = 0;
    
    for (i = 1; i <= MAXPER; i++) {
        rm = r[i-1];
        rp = r[i+1];
        y = rm+r[i]+rp; /* find max of integral from i-1 to i+1 */
        if (y > rmax && r[i] > rm && r[i] > rp &&  i > MINPER) {
            rmax = y;
            rpos = i;
        }
    }
    
    /* consider adjacent values */
    rm = r[rpos-1];
    rp = r[rpos+1];
    
    if(rpos > 0) {
        x = fixdiv32(((rpos-1) * rm + rpos * r[rpos] + (rpos+1) * rp), (rm+r[rpos]+rp)); 
    }
    /* normalize, so that 0. < rval < 1. */ 
    rval = (r[0] == 0 ? 0 : fixdiv32(r[rpos], r[0]));
    
    
    /* periods near the low boundary and at low volumes
    are usually spurious and 
    manifest themselves as annoying mosquito buzzes */
    
    *per = 0;	/* default: unvoiced */
    if ( x > itofix32(MINPER) &&  /* x could be < MINPER or even < 0 if rpos == MINPER */
        x < itofix32(MAXPER + 1) /* same story */
        ) {
        
        vthresh = ftofix32(0.6); 
        if(r[0] > ftofix32(0.002))	   /* at low volumes (< 0.002), prefer unvoiced */ 
            vthresh = ftofix32(0.25);    /* drop threshold at high volumes */
        
        if(rval > vthresh)
            *per = x * DOWN;
    }
}

/* Initialization of various parameters */

openlpc_encoder_state *create_openlpc_encoder_state(void)
{
    openlpc_encoder_state *state;
    
    state = (openlpc_encoder_state *)malloc(sizeof(openlpc_encoder_state));
    
    return state;
}


void init_openlpc_encoder_state(openlpc_encoder_state *st, int framelen)
{
    int i, j;
    
    st->framelen = framelen;
    memset(st->y, 0, sizeof(st->y));
    st->buflen = framelen * 3 / 2;
    /*  (st->buflen > MAXWINDOW) return -1;*/
    
    for(i=0, j=0; i<sizeof(parambits)/sizeof(parambits[0]); i++) {
        j += parambits[i];
    }
    sizeofparm = (j + 7) / 8 + 2;
    for (i = 0; i < st->buflen; i++) {
        st->s[i] = 0;
        /* this is only calculated once, but used each frame, */
        /* so we will use floating point for accuracy */
        st->h[i] = ftofix32(WSCALE*(0.54 - 0.46 * cos(2 * M_PI * i / (st->buflen-1.0))));
    }
    /* init the filters */
    st->xv1[0] = st->xv1[1] = st->xv1[2] = st->yv1[0] = st->yv1[1] = st->yv1[2] = 0;
    st->xv2[0] = st->xv2[1] = st->yv2[0] = st->yv2[1] = 0;
    st->xv3[0] = st->yv3[0] = st->yv3[1] = st->yv3[2] = 0;
    st->xv4[0] = st->xv4[1] = st->yv4[0] = st->yv4[1] = 0;

    logmaxminper = fixlog32(fixdiv32(itofix32(MAXPER), itofix32(MINPER)));
}

void destroy_openlpc_encoder_state(openlpc_encoder_state *st)
{
    if(st != NULL)
    {
        free(st);
        st = NULL;
    }
}

/* LPC Analysis (compression) */

int openlpc_encode(const short *buf, unsigned char *parm, openlpc_encoder_state *st)
{
    int i, j;
    fixed32 per, gain, k[LPC_FILTORDER+1];
    fixed32 per1, per2;
    fixed32 xv10, xv11, xv12, yv10, yv11, yv12, xv30, yv30, yv31, yv32;
#ifdef PREEMPH
    fixed32 xv20, xv21, yv20, yv21, xv40, xv41, yv40, yv41;
#endif
    
    xv10 = st->xv1[0];
    xv11 = st->xv1[1];
    xv12 = st->xv1[2];
    yv10 = st->yv1[0];
    yv11 = st->yv1[1];
    yv12 = st->yv1[2];
    xv30 = st->xv3[0];
    yv30 = st->yv3[0];
    yv31 = st->yv3[1];
    yv32 = st->yv3[2];
    /* convert short data in buf[] to signed lin. data in s[] and prefilter */
    for (i=0, j=st->buflen - st->framelen; i < st->framelen; i++, j++) {
        
        /* special handling here for the intitial conversion */
        fixed32 u = (fixed32)(buf[i] << (PRECISION - 15));
        
        /* Anti-hum 2nd order Butterworth high-pass, 100 Hz corner frequency */
        /* Digital filter designed by mkfilter/mkshape/gencode   A.J. Fisher
        mkfilter -Bu -Hp -o 2 -a 0.0125 -l -z */
        
        xv10 = xv11;
        xv11 = xv12; 
#ifdef FAST_FILTERS        
        xv12 = ((u * 15) >> 4) + (u >> 7) + ((u * 11) >> 14); /* /GAIN */
        yv10 = yv11;
        yv11 = yv12;
        yv12 = (fixed32)((xv10 + xv12) - (xv11 + xv11)
            - ((yv10 * 7) >> 3) - ((yv10 * 5) >> 8)
            + ((yv11 * 15) >> 3) + (yv11 >> 6) );
#else
        xv12 = fixmul32(u, ftofix32(0.94597831)); /* /GAIN */
        yv10 = yv11;
        yv11 = yv12;
        yv12 = (fixed32)((xv10 + xv12) - (xv11 + xv11)
            + fixmul32(ftofix32(-0.8948742499), yv10) + fixmul32(ftofix32(1.8890389823), yv11));
#endif
        u = st->s[j] = yv12;	/* also affects input of next stage, to the LPC filter synth */
        
        /* low-pass filter s[] -> y[] before computing pitch */
        /* second-order Butterworth low-pass filter, corner at 300 Hz */
        /* Digital filter designed by mkfilter/mkshape/gencode   A.J. Fisher
        MKFILTER.EXE -Bu -Lp -o 2 -a 0.0375 -l -z */
#ifdef FAST_FILTERS        
        xv30 = ((u * 3) >> 6) + (u >> 13); /* GAIN */
        yv30 = yv31;
        yv31 = yv32;
        yv32 = xv30 - ((yv30 * 23) >> 5) + (yv30 >> 9)
            + ((yv31 * 107) >> 6) - (yv31 >> 9);
#else
        xv30 = fixmul32(u, ftofix32(0.04699658)); /* GAIN */
        yv30 = yv31;
        yv31 = yv32; 
        yv32 = xv30 + fixmul32(ftofix32(-0.7166152306), yv30) + fixmul32(ftofix32(1.6696186545), yv31);
#endif
        st->y[j] = yv32;
    }
    st->xv1[0] = xv10;
    st->xv1[1] = xv11;
    st->xv1[2] = xv12;
    st->yv1[0] = yv10;
    st->yv1[1] = yv11;
    st->yv1[2] = yv12;
    st->xv3[0] = xv30;
    st->yv3[0] = yv30;
    st->yv3[1] = yv31;
    st->yv3[2] = yv32;
#ifdef PREEMPH
    /* operate optional preemphasis s[] -> s[] on the newly arrived frame */
    xv20 = st->xv2[0];
    xv21 = st->xv2[1];
    yv20 = st->yv2[0];
    yv21 = st->yv2[1];
    xv40 = st->xv4[0];
    xv41 = st->xv4[1];
    yv40 = st->yv4[0];
    yv41 = st->yv4[1];
    for (j=st->buflen - st->framelen; j < st->buflen; j++) {
        fixed32 u = st->s[j];
        
        /* handcoded filter: 1 zero at 640 Hz, 1 pole at 3200 */
#define TAU (FS / 3200.f)
#define RHO (0.1f)
        xv20 = xv21; 	/* e(n-1) */
#ifdef FAST_FILTERS        
        xv21 = ((u * 3) >> 1) +((u * 43) >> 9);		/* e(n)	, add 4 dB to compensate attenuation */
        yv20 = yv21; 
        yv21 = ((yv20 * 11) >> 4) + ((yv20 * 7) >> 10) 	 /* u(n) */
            + ((xv21 * 23) >> 5) + ((xv21 * 7) >> 11)
            - ((xv20 * 11) >> 4) - ((xv20 * 7) >> 10);
#else
        xv21 = fixmul32(u, ftofix32(1.584));		/* e(n)	, add 4 dB to compensate attenuation */
        yv20 = yv21; 
        yv21 = fixmul32(ftofix32(TAU/(1.0f+RHO+TAU)), yv20) 	 /* u(n) */
            + fixmul32(ftofix32((RHO+TAU)/(1.0f+RHO+TAU)), xv21)
            - fixmul32(ftofix32(TAU/(1.0f+RHO+TAU)), xv20);
#endif
        u = yv21;
        
        /* cascaded copy of handcoded filter: 1 zero at 640 Hz, 1 pole at 3200 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线视频一区二区三区| 国产亚洲精品福利| 午夜精品爽啪视频| 这里是久久伊人| 免费的成人av| 久久婷婷久久一区二区三区| 激情久久久久久久久久久久久久久久| 日韩欧美一区二区久久婷婷| 国内精品视频一区二区三区八戒 | 色激情天天射综合网| 一二三区精品福利视频| 欧美精品乱码久久久久久按摩| 日韩电影网1区2区| 久久久久亚洲蜜桃| 在线国产电影不卡| 麻豆成人综合网| 中文字幕一区二区三区av| 欧美日韩在线播放三区四区| 美洲天堂一区二卡三卡四卡视频| 国产亚洲一区字幕| 欧美日韩在线播放三区四区| 狠狠色丁香婷综合久久| 亚洲女女做受ⅹxx高潮| 日韩欧美一级二级三级| 99国产精品一区| 婷婷久久综合九色综合绿巨人| 精品国产乱码久久久久久浪潮 | 三级欧美在线一区| 国产欧美一区二区三区鸳鸯浴| 91在线国产福利| 欧美a级一区二区| 国产精品不卡在线| 日韩免费高清av| 色香色香欲天天天影视综合网| 日本亚洲视频在线| 亚洲欧洲精品天堂一级| 日韩三级av在线播放| 91麻豆国产精品久久| 另类小说欧美激情| 亚洲一区二区欧美| 中文字幕+乱码+中文字幕一区| 欧美日韩高清一区二区三区| 成人午夜免费视频| 老司机免费视频一区二区| 亚洲在线视频免费观看| 国产三级久久久| 日韩三级电影网址| 9191精品国产综合久久久久久| 成人永久aaa| 精品一区二区三区免费视频| 亚洲成人777| 亚洲美女免费在线| 中文字幕一区二区视频| 久久色视频免费观看| 欧美日韩一区二区三区高清| 色综合天天视频在线观看 | 丰满岳乱妇一区二区三区| 免费视频最近日韩| 亚洲一区二区三区四区五区黄| 中文字幕在线不卡一区二区三区| 2023国产精品| 欧美mv日韩mv国产| 精品成人在线观看| 91精品国产综合久久久久| 在线视频一区二区免费| 91麻豆精品在线观看| 99久久国产综合精品麻豆| 成人av电影在线网| 欧美一激情一区二区三区| 色诱视频网站一区| 国产美女精品人人做人人爽| 日韩国产高清影视| 舔着乳尖日韩一区| 青青草原综合久久大伊人精品优势 | 九一九一国产精品| 精品一区精品二区高清| 激情另类小说区图片区视频区| 日本美女一区二区三区视频| 欧美a级一区二区| 另类的小说在线视频另类成人小视频在线 | 91在线观看免费视频| 99热在这里有精品免费| 91在线观看高清| 欧美最猛黑人xxxxx猛交| 色婷婷亚洲综合| 欧美日韩久久不卡| 日韩一区二区不卡| 亚洲精品一区在线观看| 久久久99精品免费观看| 国产精品蜜臀av| 亚洲欧美国产高清| 婷婷夜色潮精品综合在线| 欧美aaaaa成人免费观看视频| 久久99国产精品久久99果冻传媒| 国模大尺度一区二区三区| 国产乱码精品一区二区三| 99精品视频一区| 欧美性受xxxx黑人xyx性爽| 欧美一区二区三区四区视频| 26uuu国产日韩综合| 国产精品国产成人国产三级| 亚洲激情中文1区| 日韩福利视频网| 国产精品一区不卡| 色婷婷av一区| 欧美刺激午夜性久久久久久久 | 欧美乱妇23p| 精品欧美久久久| 最新国产成人在线观看| 亚洲一区二区三区四区五区黄 | 在线观看国产91| 欧美成人精品福利| 亚洲欧美在线另类| 日精品一区二区三区| 粉嫩aⅴ一区二区三区四区| 欧美性视频一区二区三区| 欧美tk—视频vk| 一区二区三区精品久久久| 久久不见久久见免费视频1| 9色porny自拍视频一区二区| 91精品午夜视频| 国产精品久久久久一区 | 一片黄亚洲嫩模| 韩国理伦片一区二区三区在线播放| av成人动漫在线观看| 日韩午夜三级在线| 亚洲欧美激情一区二区| 国内欧美视频一区二区| 欧美无乱码久久久免费午夜一区| 久久综合狠狠综合久久综合88 | 自拍偷拍欧美精品| 极品瑜伽女神91| 欧美日韩一区二区在线观看视频 | 91丨porny丨蝌蚪视频| 精品少妇一区二区三区| 亚洲福利视频一区二区| 99久久国产免费看| 精品国产91洋老外米糕| 图片区小说区区亚洲影院| a亚洲天堂av| 国产欧美日韩在线| 蜜桃av一区二区三区电影| 色婷婷综合久久久中文一区二区| 久久久综合视频| 免费看欧美美女黄的网站| 91成人网在线| 自拍偷在线精品自拍偷无码专区| 国产乱码精品一品二品| 精品剧情v国产在线观看在线| 日日夜夜精品免费视频| 欧美亚洲精品一区| 亚洲欧美另类在线| 成人国产在线观看| 国产女同性恋一区二区| 国产美女久久久久| 久久综合资源网| 国内外成人在线视频| 日韩精品一区二区三区四区视频| 天堂资源在线中文精品| 欧美日韩在线免费视频| 亚洲自拍偷拍九九九| 色偷偷久久一区二区三区| 亚洲欧美日韩系列| 欧美亚洲日本国产| 亚洲高清免费在线| 91精品国产综合久久久久久漫画| 五月天亚洲精品| 欧美一卡二卡三卡四卡| 免费在线视频一区| 欧美精品久久久久久久久老牛影院| 亚洲mv在线观看| 欧美一区午夜精品| 国产综合久久久久久鬼色| 久久综合九色综合久久久精品综合| 国产麻豆视频精品| 国产精品免费看片| 在线区一区二视频| 日韩av网站在线观看| 日韩欧美色综合网站| 国产最新精品免费| 国产精品久久久久影视| 在线观看视频一区| 日本亚洲一区二区| 国产日韩欧美电影| 91丝袜高跟美女视频| 天天影视涩香欲综合网| 日韩精品中文字幕一区| 国产成人久久精品77777最新版本| 中日韩免费视频中文字幕| 91丨porny丨中文| 男女男精品视频网| 中文乱码免费一区二区| 欧美丝袜自拍制服另类| 激情综合色丁香一区二区| 国产精品久久久久久久久晋中| 91亚洲国产成人精品一区二区三| 亚洲成av人影院在线观看网| 精品国免费一区二区三区| 99国产精品久久久久久久久久 | 亚洲不卡av一区二区三区|