📄 process_fr.c
字号:
/*| This material contains proprietary software of Entropic Processing, Inc. | Any reproduction, distribution, or publication without the the prior | written permission of Entropic Processing, Inc. is strictly prohibited.| Any public distribution of copies of this work authorized in writing by| Entropic Processing, Inc. must bear the notice | | "Copyright 1986 Entropic Processing, Inc."*/#ifdef SCCSstatic char *sccs_id = "@(#)process_fr.c 1.2 4/29/86";#endif/*anahd is a pointer to the output ana file header -- it should either be global to this routine or passed to it. Similarly, anarec is a pointer to an ana record and should either be global or passed as a parameter -- I show it here passed as a parameter.I didn't change the line that reads SD data -- that needs rewritingin terms of the new stuff (I flagged it). */process_frame (locn, blksze, p, anarec, datatype)int locn, blksze;struct ana_data *anarec;struct pitch *p;char datatype;{#define bufsize 1024 int i, j, k, ind; float lpcfilter[100], rc[100], sig_energy, res_energy; static int mem_ptr = 0, beg_addr = -bufsize, mem_size = bufsize; static float data_mem[bufsize]; float inpbuf[bufsize], iobfr[256]; if (debug_level) fprintf (stderr, "process_f-pitchrame(%d,%d)\n", locn, blksze); if (beg_addr == -bufsize) beg_addr = istan - mem_size; if (locn < beg_addr) { fprintf (stderr, "oldana: locn(%d) < beg_addr(%d)\n", locn, beg_addr); exit (2); } for (i = locn; i < locn + blksze; i++) { if (i >= beg_addr + mem_size) { if (debug_level) fprintf (stderr, "Reading %d points\n", frmlen);/*the next line needs rewriting in terms of new get_sd_rec function*/ get_fdata (ifd, datatype, iobfr, frmlen); if (dcrem == yes) { dc_val_rem += remove_dc (iobfr, frmlen); dc_pts_rem += frmlen; } pre_emphasis (iobfr, frmlen, num, den, pstate); beg_addr += frmlen; for (j = 0; j < frmlen; j++) { data_mem[mem_ptr] = iobfr[j]; mem_ptr = (mem_ptr + 1) % mem_size; } } j = (i - beg_addr + mem_ptr) % mem_size; inpbuf[i - locn] = data_mem[j]; } if (debug_level) fprintf (stderr, "analyze: "); analyze (inpbuf, blksze, order, method, &sig_energy, lpcfilter, rc, &res_energy, window, matsiz); if (debug_level) fprintf (stderr, "gain = %f\n", res_energy / sig_energy); j = ptr - pknt - 1; if (j < 0) j += lntpbuf; if (pknt == 0) { locn += matsiz - 1; blksze -= matsiz - 1;/*write an ana unvoiced record (flip sign of ref coeffs for compatibility with Berny's program)*/ anarec->tag = locn; anarec->frame_len = blksze; anarec->p_pulse_len[0] = 0; anarec->raw_power[0] = sig_energy; anarec->raw_power[1] = -1.; anarec->lpc_power[0] = res_energy; anarec->lpc_power[1] = -1.; for (i = 1; i <= order; i++) anarec->ref_coeff[i] = -rc[i]; put_ana_rec(anarec, anahd, anaptr); locn -= matsiz - 1; blksze += matsiz - 1; }/*write an ana voiced record (flip sign of ref coeffs for compatibility with Berny's program)*/ if (pknt && debug_level) fprintf (stderr, "Writing voiced frame\n"); for (i = 1; i <= order; i++) anarec->ref_coeff[i] = -rc[i]; locn = 0; ind = 0; for (k = 0; k < pknt; k++) { j = (j + 1) % lntpbuf; if (to_be_analyzed[j] == yes) { to_be_analyzed[j] = no; sig_energy = 0.0; for (i = 0; i < period[j]; i++) sig_energy += inpbuf[locn + i] * inpbuf[locn + i]; sig_energy /= period[j]; frame->raw_power[ind] = sig_energy; frame->p_pulse_len[ind] = period[j]; ind++; } locn += period[j]; } frame->p_pulse_len[ind] = 0; frame->raw_power[ind] = -1.; frame->lpc_power[0] = res_energy; frame->lpc_power[1] = -1.; put_ana_rec(anarec, anahd, anaptr);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -