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

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

?? harm.c

?? MELPe 1200 bps, fixed point
?? C
字號:
/* ================================================================== */
/*                                                                    */ 
/*    Microsoft Speech coder     ANSI-C Source Code                   */
/*    SC1200 1200 bps speech coder                                    */
/*    Fixed Point Implementation      Version 7.0                     */
/*    Copyright (C) 2000, Microsoft Corp.                             */
/*    All rights reserved.                                            */
/*                                                                    */ 
/* ================================================================== */

/*------------------------------------------------------------------*/
/*																	*/
/* File:		harm.c												*/
/*																	*/
/* Description: harmonic synthesis routines			 				*/
/*																	*/
/*------------------------------------------------------------------*/


#include "sc1200.h"
#include "constant.h"
#include "mathhalf.h"
#include "mat_lib.h"
#include "math_lib.h"
#include "dsp_sub.h"

#define FIXED_PHASE		1
#define SYN_FFT_SIZE	256
#define TWO_Q12			8192                                 /* 2 * (1 << 12) */
#define X075_Q15		24576                             /* 0.75 * (1 << 15) */
#define X500_Q3			4000                                /* 500 * (1 << 3) */
#define X1000_Q3		8000                               /* 1000 * (1 << 3) */
#define X2000_Q3		16000                              /* 2000 * (1 << 3) */
#define X3000_Q3		24000                              /* 3000 * (1 << 3) */
#define X085_Q14		13926                             /* 0.85 * (1 << 15) */
#define X092_Q14		15073                             /* 0.92 * (1 << 15) */
#define X095_Q14		15565                             /* 0.95 * (1 << 15) */
#define X098_Q14		16056                             /* 0.98 * (1 << 15) */
#define X102_Q14		16712                             /* 1.02 * (1 << 15) */
#define X105_Q14		17203                             /* 1.05 * (1 << 15) */

static void		realIDFT(Shortword mag[], Shortword phase[],
						 Shortword signal[], Shortword length);


/***************************************************************************
**
** Function:		realIDFT()
**
** Description:		IDFT to generate real output
**
** Arguments:
**
**	Shortword mag[]		input magnitudes (Q13)
**	Shortword phase[]	input phase (Q0)
**	Shortword signal[]	output signal (Q15)
**	Shortword length	The IDFT length
**
** Return value:			None
**
*****************************************************************************/
static void realIDFT(Shortword mag[], Shortword phase[], Shortword signal[],
					 Shortword length)
{
	register Shortword	i, j, k;
	Shortword	w, w2, length2;
	Shortword	temp;
	Longword	L_temp;
	Shortword	idftc[PITCHMAX];

	/*	length2 = (length/2) + 1; */
	length2 = add(shr(length, 1), 1);
	/*	w = TWOPI / length; */
	w = divide_s(TWO_Q3, length);                      /* w = 2/length in Q18 */

	/* The following for loop builds up the lookup table for cosines with     */
	/* radians from 0 to 1.                                                   */
	for (i = 0; i < length; i++){
		L_temp = L_mult(w, i);                               /* L_temp in Q19 */

		/* make sure argument for cos function is less than 1 */
		if (L_temp > (Longword) ONE_Q19){
			/*	cos(pi+x) = cos(pi-x) */
			L_temp = L_sub((Longword) TWO_Q19, L_temp);
		} else if (L_temp == (Longword) ONE_Q19)
			L_temp = L_sub(L_temp, 1);

		L_temp = L_shr(L_temp, 4);                           /* L_temp in Q15 */
		temp = extract_l(L_temp);
		idftc[i] = cos_fxp(temp);                             /* idftc in Q15 */
	}

	w = shr(w, 1);                                     /* w = 2/length in Q17 */
	w2 = shr(w, 1);                                   /* w2 = 1/length in Q17 */
	mag[0] = mult(mag[0], w2);                                /* mag[] in Q15 */
	temp = sub(length2, 1);
	for (i = 1; i < temp; i++){
		/*	mag[i] *= (2.0/length); */
		mag[i] = mult(mag[i], w);                         /* mag[] is now Q15 */
	}

	temp = shl(i, 1);
	if (temp == length)            /* length is even, mag[i] *= (1.0/length); */
		mag[i] = mult(mag[i], w2);
	else                            /* length is odd, mag[i] *= (2.0/length); */
		mag[i] = mult(mag[i], w);

	for (i = 0; i < length; i++){
		L_temp = L_deposit_h(mag[0]);                        /* L_temp in Q15 */
		k = i;
		for (j = 1; j < length2; j++){
			k = add(k, phase[j]);
			while (k < 0)
				k = add(k, length);
			while (k >= length)
				k = sub(k, length);
			L_temp = L_mac(L_temp, mag[j], idftc[k]);
			k = sub(k, phase[j]);
			k = add(k, i);
		}

		/* It might take some proofs, but mag[] is already weighted by w      */
		/* (which is inversely proportional to length) and L_temp here never  */
		/* overflows a Shortword.                                             */
		signal[i] = round(L_temp);
		k = k;
	}
}


/***************************************************************************
**
** Function:		set_fc()
**
** Description: 	Set cut-off frequency based on voicing information
**
** Arguments:
**
**	Shortword bpvc[]	band voicing information (Q14)
**	Shortword *fc		output cut-off frequency (Q3)
**
** Return value:			None
**
*****************************************************************************/

void set_fc(Shortword bpvc[], Shortword *fc)
{
	register Shortword	i;
	Shortword	index;
	const Shortword		syn_bp_map[16] = {                              /* Q0 */
		 500,  500,  500,  500,  500,  500,  500, 4000,
		1000, 1000, 1000, 4000, 2000, 3000, 3000, 4000
	};

	/* ====== Generate voicing information ====== */
	if (bpvc[0] < X05_Q14){                        /* ---- Pure unvoiced ---- */
		*fc = 0;
		return;
	}

	/* ---- Voiced: pack bandpass voicing ---- */
	index = 0;
	bpvc[0] = ONE_Q14;
	for (i = 1; i < NUM_BANDS; i++){
		index <<= 1;                                            /* left shift */
		if (bpvc[i] > X05_Q14){
			bpvc[i] = ONE_Q14;
			index |= 1;
		} else {
			bpvc[i] = 0;
			index |= 0;
		}
	}
	*fc = (Shortword) (syn_bp_map[index] << 3);
}


/***************************************************************************
**
** Function:		harm_syn_pitch()
**
** Description:		harmonic synthesis for one pitch
**
** Arguments:
**
**	Shortword amp[]			input harmonic mags (Q13)
**	Shortword signal[]		output synthesized signal buffer (Q15)
**	Shortword fc			The cut-off frequency (Q3)
**	Shortword length		The pitch length
**
** Return value:			None
**
*****************************************************************************/
void harm_syn_pitch(Shortword amp[], Shortword signal[], Shortword fc, 
					Shortword length)
{
	register Shortword	i;
	Shortword	rndphase[SYN_FFT_SIZE/2 + 1];                           /* Q0 */
	Shortword	factor, fn;                                            /* Q15 */
	Shortword	temp1, temp2;
	Shortword	totalCnt, voicedCnt, mixedCnt, index;
	Shortword	mag[SYN_FFT_SIZE/2 + 1];
	Shortword	phase[SYN_FFT_SIZE/2 + 1];                              /* Q0 */
	Shortword	fc1, fc2;

	/* ====== Generate random phase for unvoiced segment ====== */
	/* Note that phase[] and rndphase[] computed in harm_syn_pitch() are now  */
	/* the actual phases divided by (2*PI)/length.                            */

	for (i = 0; i < length/2 + 1; i++)
		rndphase[i] = mult(length, rand_minstdgen());

	/* ====== Harmonic Synthesis ====== */
	/* The fc1 and fc2 computed in the if block below are Q2 */

	if (fc <= X500_Q3){
		fc1 = mult(X085_Q14, fc);
		fc2 = mult(X105_Q14, fc);
		factor = ONE_Q15;
	} else if (fc <= X1000_Q3){
		fc1 = mult(X095_Q14, fc);
		fc2 = mult(X105_Q14, fc);
		factor = X09_Q15;
	} else if (fc <= X2000_Q3){
		fc1 = mult(X098_Q14, fc);
		fc2 = mult(X102_Q14, fc);
		factor = X08_Q15;
	} else if (fc <= X3000_Q3){
		fc1 = mult(X095_Q14, fc);
		fc2 = mult(X105_Q14, fc);
		factor = X075_Q15;
	} else {
		fc1 = mult(X092_Q14, fc);
		fc2 = shift_r(fc, -1);   /* We map fc (Q3) to fc2 (Q2) with rounding. */
		factor = X07_Q15;
	}

	/* fc1 and fc2 are now Q2. */

	temp1 = divide_s(fc1, shl(FSAMP, 2));
	temp2 = divide_s(fc2, shl(FSAMP, 2));     /* Now temp1 and temp2 are Q15. */
	voicedCnt = mult(temp1, length);
	mixedCnt = mult(temp2, length);
	totalCnt = (Shortword) ((length/2) + 1);

	/* ====== set values to mag and phase ====== */
	v_equ(mag, amp, add(voicedCnt, 1));                                /* Q13 */

	/* Now we compute phase[] in multiples of w = (2*PI)/length.  Therefore   */
	/* phase[] -> (i*FIXED_PHASE)*length/(2*PI).                              */
	temp1 = 0;                /* temp1 = i * temp2 in the following for loop. */
	temp2 = extract_l(L_mult(FIXED_PHASE, length));
	temp2 = shr(temp2, 1);                    /* temp2 = FIXED_PHASE * length */
	while (temp2 >= 2*length)
		temp2 = sub(temp2, (Shortword) (2*length));
	for (i = 0; i < mixedCnt + 1; i++){
		phase[i] = shr(temp1, 1);
		temp1 = add(temp1, temp2);
		if (temp1 >= 2*length)
			temp1 = sub(temp1, (Shortword) (2*length));
	}
	index = 0;
	for (i = add(voicedCnt, 1); i < add(mixedCnt, 1); i++, index ++){
		temp1 = sub(i, voicedCnt);
		temp2 = sub(mixedCnt, voicedCnt);
		fn = divide_s(temp1, temp2);                                   /* Q15 */
		temp1 = mult(factor, fn);
		temp2 = sub(ONE_Q15, fn);
		temp1 = add(temp1, temp2);
		mag[i] = mult(amp[i], temp1);                                  /* Q13 */
		temp1 = mult(fn, rndphase[index]);                              /* Q0 */
		temp2 = sub(phase[i], temp1);
		if (temp2 < 0)
			temp2 = add(temp2, length);
		phase[i] = temp2;
	}
	for (i = add(mixedCnt, 1); i < totalCnt; i++, index ++){
		mag[i] = mult(amp[i], factor);                                 /* Q13 */
		temp2 = negate(rndphase[index]);                                /* Q0 */
		if (temp2 < 0)
			temp2 = add(temp2, length);
		phase[i] = temp2;                         /* This moves phase[i] from */
                                                     /* negative to positive. */
	}

	/* ====== getting one pitch cycle ====== */
	realIDFT(mag, phase, signal, length);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美福利电影网| 色欧美片视频在线观看在线视频| 欧美三级日本三级少妇99| 亚洲精品国产第一综合99久久 | 欧美日韩一区不卡| 亚洲国产精品久久一线不卡| 欧美日韩高清在线播放| 五月婷婷综合激情| 日韩欧美在线1卡| 国产v日产∨综合v精品视频| 国产精品国产三级国产有无不卡| 日本国产一区二区| 婷婷开心激情综合| 日韩免费观看高清完整版| 国产伦精一区二区三区| 国产精品久久777777| 欧美伊人久久久久久午夜久久久久| 日韩vs国产vs欧美| 久久久久久**毛片大全| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 不卡的av在线播放| 亚洲综合久久久| wwwwxxxxx欧美| 成人av资源在线观看| 亚洲色图欧洲色图| 日韩欧美黄色影院| jlzzjlzz亚洲女人18| 天堂久久一区二区三区| 中文av一区二区| 欧美剧在线免费观看网站| 国产成人综合网站| 亚洲va中文字幕| 国产欧美综合色| 欧美欧美欧美欧美| 成人app下载| 蜜桃视频一区二区| 亚洲激情在线播放| 国产丝袜美腿一区二区三区| 欧美性猛交一区二区三区精品| 国内久久精品视频| 亚洲精品五月天| 国产精品素人一区二区| 91精品国产乱| 色菇凉天天综合网| 韩国欧美国产一区| 日韩av在线播放中文字幕| 亚洲天堂av老司机| 久久蜜桃av一区二区天堂| 在线观看三级视频欧美| 国产在线麻豆精品观看| 日韩一区二区免费在线电影| 99精品视频免费在线观看| 麻豆视频观看网址久久| 亚洲一区二区av电影| 中文字幕中文字幕一区| 国产午夜精品一区二区三区嫩草| 日韩欧美在线观看一区二区三区| 日本不卡视频在线| 性感美女极品91精品| 亚洲欧美日韩系列| 中文字幕一区二区三区在线观看 | 欧美日韩久久一区二区| 99久久99久久精品免费观看 | 91视频免费观看| 国产91色综合久久免费分享| 韩国理伦片一区二区三区在线播放| 亚洲福利视频一区| 亚洲综合免费观看高清在线观看| 一区免费观看视频| 一区精品在线播放| 国产精品国产三级国产aⅴ原创| 久久精品夜夜夜夜久久| 欧美精品一区二区蜜臀亚洲| 国产永久精品大片wwwapp| 九九九精品视频| 麻豆视频观看网址久久| 日本怡春院一区二区| 日韩黄色免费电影| 日本视频在线一区| 久久9热精品视频| 久久国产婷婷国产香蕉| 精品亚洲成a人在线观看| 精品综合免费视频观看| 国产一区二区三区综合| 国产一区二区不卡在线| 中文字幕中文字幕一区| 亚洲精品精品亚洲| 亚洲成a人v欧美综合天堂| 日韩国产精品91| 美国欧美日韩国产在线播放| 国产原创一区二区| 国产a级毛片一区| 99视频精品在线| 91传媒视频在线播放| 欧美日韩国产首页| 欧美大片顶级少妇| 国产欧美日韩卡一| 欧洲av在线精品| 日韩一级免费观看| 日本一区二区三区视频视频| 亚洲女性喷水在线观看一区| 午夜天堂影视香蕉久久| 久久97超碰色| www.日本不卡| 欧美日韩国产精品成人| 久久综合狠狠综合| 亚洲女人****多毛耸耸8| 肉肉av福利一精品导航| 国产河南妇女毛片精品久久久| 97精品国产露脸对白| 日韩午夜电影av| 欧美高清在线一区| 亚洲第一综合色| 毛片不卡一区二区| av电影在线观看一区| 美女mm1313爽爽久久久蜜臀| 成人免费看黄yyy456| 欧美伊人精品成人久久综合97| 欧美精品一区二区三区很污很色的| 国产精品美女久久久久aⅴ| 首页综合国产亚洲丝袜| 成人免费观看男女羞羞视频| 欧美另类一区二区三区| 中文字幕欧美日韩一区| 亚洲最大成人网4388xx| 国产一区二区三区四区在线观看 | 欧美日韩大陆一区二区| 国产女人aaa级久久久级| 偷拍日韩校园综合在线| 成人午夜精品一区二区三区| 欧美一区二区三区四区高清| 97精品视频在线观看自产线路二| 日韩视频一区二区三区| 一区二区三区资源| 国产一区高清在线| 欧美美女黄视频| 成人欧美一区二区三区小说| 国产一区二区日韩精品| 欧美日韩久久一区二区| 国产精品麻豆一区二区| 国内成人精品2018免费看| 欧美日韩国产综合一区二区| 亚洲色欲色欲www在线观看| 精品一区二区三区久久久| 欧美丰满少妇xxxbbb| 亚洲综合在线观看视频| 亚洲免费在线播放| 成人精品亚洲人成在线| 久久久精品国产99久久精品芒果| 亚洲成人av电影在线| 色哟哟亚洲精品| 中文字幕亚洲综合久久菠萝蜜| 国产一区二区在线电影| 日韩视频一区二区三区| 五月综合激情网| 欧洲av一区二区嗯嗯嗯啊| 亚洲美女在线国产| 成人开心网精品视频| 久久精品在这里| 极品美女销魂一区二区三区| 欧美一卡2卡3卡4卡| 日韩精品亚洲一区| 人人狠狠综合久久亚洲| 欧美日韩国产高清一区| 亚洲午夜日本在线观看| 91官网在线免费观看| 一区二区三区不卡视频| 91成人免费在线| 亚洲在线免费播放| 在线观看日韩av先锋影音电影院| 日韩av电影天堂| 5858s免费视频成人| 麻豆精品久久久| 精品国产乱码久久久久久夜甘婷婷 | 欧美高清性hdvideosex| 五月综合激情网| 日韩一卡二卡三卡国产欧美| 久久成人免费电影| 亚洲精品一区二区三区香蕉 | 国产精品色哟哟网站| 不卡电影免费在线播放一区| 亚洲免费伊人电影| 欧美日韩中文另类| 秋霞午夜av一区二区三区| 日韩免费成人网| 国产精品123区| 中文字幕一区二区三区乱码在线| 一本到不卡免费一区二区| 亚洲自拍另类综合| 91精品国产综合久久国产大片| 美女视频第一区二区三区免费观看网站| 精品国产1区二区| 白白色亚洲国产精品| 亚洲成av人在线观看| 欧美成人一区二区三区在线观看| 国产精品综合av一区二区国产馆| 国产精品视频一二| 欧美日韩二区三区| 国产成人精品免费网站| 亚洲美女偷拍久久|