diff options
Diffstat (limited to '1.2-netsec/codecs/lpc10/synths.c')
-rw-r--r-- | 1.2-netsec/codecs/lpc10/synths.c | 425 |
1 files changed, 0 insertions, 425 deletions
diff --git a/1.2-netsec/codecs/lpc10/synths.c b/1.2-netsec/codecs/lpc10/synths.c deleted file mode 100644 index 736d54b65..000000000 --- a/1.2-netsec/codecs/lpc10/synths.c +++ /dev/null @@ -1,425 +0,0 @@ -/* - -$Log$ -Revision 1.16 2004/06/26 03:50:14 markster -Merge source cleanups (bug #1911) - -Revision 1.15 2003/09/27 02:45:37 markster -Fix various compiler warnings (bug #322) - -Revision 1.2 2003/09/27 02:45:37 markster -Fix various compiler warnings (bug #322) - -Revision 1.1.1.1 2003/02/12 13:59:15 matteo -mer feb 12 14:56:57 CET 2003 - -Revision 1.2 2000/01/05 08:20:39 markster -Some OSS fixes and a few lpc changes to make it actually work - - * Revision 1.2 1996/08/20 20:42:59 jaf - * Removed all static local variables that were SAVE'd in the Fortran - * code, and put them in struct lpc10_decoder_state that is passed as an - * argument. - * - * Removed init function, since all initialization is now done in - * init_lpc10_decoder_state(). - * - * Revision 1.1 1996/08/19 22:30:33 jaf - * Initial revision - * - -*/ - -/* -- translated by f2c (version 19951025). - You must link the resulting object file with the libraries: - -lf2c -lm (in that order) -*/ - -#include "f2c.h" - -#ifdef P_R_O_T_O_T_Y_P_E_S -extern int synths_(integer *voice, integer *pitch, real *rms, real *rc, real *speech, integer *k, struct lpc10_decoder_state *st); -/* comlen contrl_ 12 */ -/*:ref: pitsyn_ 14 12 4 4 4 6 6 4 4 4 6 6 4 6 */ -/*:ref: irc2pc_ 14 5 6 6 4 6 6 */ -/*:ref: bsynz_ 14 7 6 4 4 6 6 6 6 */ -/*:ref: deemp_ 14 2 6 4 */ -/*:ref: initpitsyn_ 14 0 */ -/*:ref: initbsynz_ 14 0 */ -/*:ref: initdeemp_ 14 0 */ -#endif - -/* Common Block Declarations */ - -extern struct { - integer order, lframe; - logical corrp; -} contrl_; - -#define contrl_1 contrl_ - -/* Table of constant values */ - -static real c_b2 = .7f; - -/* ***************************************************************** */ - -/* SYNTHS Version 54 */ - -/* $Log$ - * Revision 1.16 2004/06/26 03:50:14 markster - * Merge source cleanups (bug #1911) - * -/* Revision 1.15 2003/09/27 02:45:37 markster -/* Fix various compiler warnings (bug #322) -/* -/* Revision 1.2 2003/09/27 02:45:37 markster -/* Fix various compiler warnings (bug #322) -/* -/* Revision 1.1.1.1 2003/02/12 13:59:15 matteo -/* mer feb 12 14:56:57 CET 2003 -/* -/* Revision 1.2 2000/01/05 08:20:39 markster -/* Some OSS fixes and a few lpc changes to make it actually work -/* - * Revision 1.2 1996/08/20 20:42:59 jaf - * Removed all static local variables that were SAVE'd in the Fortran - * code, and put them in struct lpc10_decoder_state that is passed as an - * argument. - * - * Removed init function, since all initialization is now done in - * init_lpc10_decoder_state(). - * - * Revision 1.1 1996/08/19 22:30:33 jaf - * Initial revision - * */ -/* Revision 1.5 1996/03/26 19:31:58 jaf */ -/* Commented out trace statements. */ - -/* Revision 1.4 1996/03/25 19:41:01 jaf */ -/* Changed so that MAXFRM samples are always returned in the output array */ -/* SPEECH. */ - -/* This required delaying the returned samples by MAXFRM sample times, */ -/* and remembering any "left over" samples returned by PITSYN from one */ -/* call of SYNTHS to the next. */ - -/* Changed size of SPEECH from 2*MAXFRM to MAXFRM. Removed local */ -/* variable SOUT. Added local state variables BUF and BUFLEN. */ - -/* Revision 1.3 1996/03/25 19:20:10 jaf */ -/* Added comments about the range of possible return values for argument */ -/* K, and increased the size of the arrays filled in by PITSYN from 11 to */ -/* 16, as has been already done inside of PITSYN. */ - -/* Revision 1.2 1996/03/22 00:18:18 jaf */ -/* Added comments explaining meanings of input and output parameters, and */ -/* indicating which array indices can be read or written. */ - -/* Added entry INITSYNTHS, which does nothing except call the */ -/* corresponding initialization entries for subroutines PITSYN, BSYNZ, */ -/* and DEEMP. */ - -/* Revision 1.1 1996/02/07 14:49:44 jaf */ -/* Initial revision */ - - -/* ***************************************************************** */ - -/* The note below is from the distributed version of the LPC10 coder. */ -/* The version of the code below has been modified so that SYNTHS always */ -/* has a constant frame length output of MAXFRM. */ - -/* Also, BSYNZ and DEEMP need not be modified to work on variable */ -/* positions within an array. It is only necessary to pass the first */ -/* index desired as the array argument. What actually gets passed is the */ -/* address of that array position, which the subroutine treats as the */ -/* first index of the array. */ - -/* This technique is used in subroutine ANALYS when calling PREEMP, so it */ -/* appears that multiple people wrote different parts of this LPC10 code, */ -/* and that they didn't necessarily have equivalent knowledge of Fortran */ -/* (not surprising). */ - -/* NOTE: There is excessive buffering here, BSYNZ and DEEMP should be */ -/* changed to operate on variable positions within SOUT. Also, */ -/* the output length parameter is bogus, and PITSYN should be */ -/* rewritten to allow a constant frame length output. */ - -/* Input: */ -/* VOICE - Half frame voicing decisions */ -/* Indices 1 through 2 read. */ -/* Input/Output: */ -/* PITCH - Pitch */ -/* PITCH is restricted to range 20 to 156, inclusive, */ -/* before calling subroutine PITSYN, and then PITSYN */ -/* can modify it further under some conditions. */ -/* RMS - Energy */ -/* Only use is for debugging, and passed to PITSYN. */ -/* See comments there for how it can be modified. */ -/* RC - Reflection coefficients */ -/* Indices 1 through ORDER restricted to range -.99 to .99, */ -/* before calling subroutine PITSYN, and then PITSYN */ -/* can modify it further under some conditions. */ -/* Output: */ -/* SPEECH - Synthesized speech samples. */ -/* Indices 1 through the final value of K are written. */ -/* K - Number of samples placed into array SPEECH. */ -/* This is always MAXFRM. */ - -/* Subroutine */ int synths_(integer *voice, integer *pitch, real * - rms, real *rc, real *speech, integer *k, struct lpc10_decoder_state *st) -{ - /* Initialized data */ - - real *buf; - integer *buflen; - - /* System generated locals */ - integer i__1; - real r__1, r__2; - - /* Local variables */ - real rmsi[16]; - integer nout, ivuv[16], i__, j; - extern /* Subroutine */ int deemp_(real *, integer *, struct lpc10_decoder_state *); - real ratio; - integer ipiti[16]; - real g2pass; - real pc[10]; - extern /* Subroutine */ int pitsyn_(integer *, integer *, integer *, real - *, real *, integer *, integer *, integer *, real *, real *, - integer *, real *, struct lpc10_decoder_state *); - real rci[160] /* was [10][16] */; - -/* $Log$ - * Revision 1.16 2004/06/26 03:50:14 markster - * Merge source cleanups (bug #1911) - * -/* Revision 1.15 2003/09/27 02:45:37 markster -/* Fix various compiler warnings (bug #322) -/* -/* Revision 1.2 2003/09/27 02:45:37 markster -/* Fix various compiler warnings (bug #322) -/* -/* Revision 1.1.1.1 2003/02/12 13:59:15 matteo -/* mer feb 12 14:56:57 CET 2003 -/* -/* Revision 1.2 2000/01/05 08:20:39 markster -/* Some OSS fixes and a few lpc changes to make it actually work -/* - * Revision 1.2 1996/08/20 20:42:59 jaf - * Removed all static local variables that were SAVE'd in the Fortran - * code, and put them in struct lpc10_decoder_state that is passed as an - * argument. - * - * Removed init function, since all initialization is now done in - * init_lpc10_decoder_state(). - * - * Revision 1.1 1996/08/19 22:30:33 jaf - * Initial revision - * */ -/* Revision 1.3 1996/03/29 22:03:47 jaf */ -/* Removed definitions for any constants that were no longer used. */ - -/* Revision 1.2 1996/03/26 19:34:33 jaf */ -/* Added comments indicating which constants are not needed in an */ -/* application that uses the LPC-10 coder. */ - -/* Revision 1.1 1996/02/07 14:43:51 jaf */ -/* Initial revision */ - -/* LPC Configuration parameters: */ -/* Frame size, Prediction order, Pitch period */ -/* Arguments */ -/* $Log$ - * Revision 1.16 2004/06/26 03:50:14 markster - * Merge source cleanups (bug #1911) - * -/* Revision 1.15 2003/09/27 02:45:37 markster -/* Fix various compiler warnings (bug #322) -/* -/* Revision 1.2 2003/09/27 02:45:37 markster -/* Fix various compiler warnings (bug #322) -/* -/* Revision 1.1.1.1 2003/02/12 13:59:15 matteo -/* mer feb 12 14:56:57 CET 2003 -/* -/* Revision 1.2 2000/01/05 08:20:39 markster -/* Some OSS fixes and a few lpc changes to make it actually work -/* - * Revision 1.2 1996/08/20 20:42:59 jaf - * Removed all static local variables that were SAVE'd in the Fortran - * code, and put them in struct lpc10_decoder_state that is passed as an - * argument. - * - * Removed init function, since all initialization is now done in - * init_lpc10_decoder_state(). - * - * Revision 1.1 1996/08/19 22:30:33 jaf - * Initial revision - * */ -/* Revision 1.3 1996/03/29 22:05:55 jaf */ -/* Commented out the common block variables that are not needed by the */ -/* embedded version. */ - -/* Revision 1.2 1996/03/26 19:34:50 jaf */ -/* Added comments indicating which constants are not needed in an */ -/* application that uses the LPC-10 coder. */ - -/* Revision 1.1 1996/02/07 14:44:09 jaf */ -/* Initial revision */ - -/* LPC Processing control variables: */ - -/* *** Read-only: initialized in setup */ - -/* Files for Speech, Parameter, and Bitstream Input & Output, */ -/* and message and debug outputs. */ - -/* Here are the only files which use these variables: */ - -/* lpcsim.f setup.f trans.f error.f vqsetup.f */ - -/* Many files which use fdebug are not listed, since it is only used in */ -/* those other files conditionally, to print trace statements. */ -/* integer fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ -/* LPC order, Frame size, Quantization rate, Bits per frame, */ -/* Error correction */ -/* Subroutine SETUP is the only place where order is assigned a value, */ -/* and that value is 10. It could increase efficiency 1% or so to */ -/* declare order as a constant (i.e., a Fortran PARAMETER) instead of as -*/ -/* a variable in a COMMON block, since it is used in many places in the */ -/* core of the coding and decoding routines. Actually, I take that back. -*/ -/* At least when compiling with f2c, the upper bound of DO loops is */ -/* stored in a local variable before the DO loop begins, and then that is -*/ -/* compared against on each iteration. */ -/* Similarly for lframe, which is given a value of MAXFRM in SETUP. */ -/* Similarly for quant, which is given a value of 2400 in SETUP. quant */ -/* is used in only a few places, and never in the core coding and */ -/* decoding routines, so it could be eliminated entirely. */ -/* nbits is similar to quant, and is given a value of 54 in SETUP. */ -/* corrp is given a value of .TRUE. in SETUP, and is only used in the */ -/* subroutines ENCODE and DECODE. It doesn't affect the speed of the */ -/* coder significantly whether it is .TRUE. or .FALSE., or whether it is -*/ -/* a constant or a variable, since it is only examined once per frame. */ -/* Leaving it as a variable that is set to .TRUE. seems like a good */ -/* idea, since it does enable some error-correction capability for */ -/* unvoiced frames, with no change in the coding rate, and no noticeable -*/ -/* quality difference in the decoded speech. */ -/* integer quant, nbits */ -/* *** Read/write: variables for debugging, not needed for LPC algorithm -*/ - -/* Current frame, Unstable frames, Output clip count, Max onset buffer, -*/ -/* Debug listing detail level, Line count on listing page */ - -/* nframe is not needed for an embedded LPC10 at all. */ -/* nunsfm is initialized to 0 in SETUP, and incremented in subroutine */ -/* ERROR, which is only called from RCCHK. When LPC10 is embedded into */ -/* an application, I would recommend removing the call to ERROR in RCCHK, -*/ -/* and remove ERROR and nunsfm completely. */ -/* iclip is initialized to 0 in SETUP, and incremented in entry SWRITE in -*/ -/* sread.f. When LPC10 is embedded into an application, one might want */ -/* to cause it to be incremented in a routine that takes the output of */ -/* SYNTHS and sends it to an audio device. It could be optionally */ -/* displayed, for those that might want to know what it is. */ -/* maxosp is never initialized to 0 in SETUP, although it probably should -*/ -/* be, and it is updated in subroutine ANALYS. I doubt that its value */ -/* would be of much interest to an application in which LPC10 is */ -/* embedded. */ -/* listl and lincnt are not needed for an embedded LPC10 at all. */ -/* integer nframe, nunsfm, iclip, maxosp, listl, lincnt */ -/* common /contrl/ fsi, fso, fpi, fpo, fbi, fbo, pbin, fmsg, fdebug */ -/* common /contrl/ quant, nbits */ -/* common /contrl/ nframe, nunsfm, iclip, maxosp, listl, lincnt */ -/* Parameters/constants */ -/* Local variables that need not be saved */ -/* Local state */ -/* BUF is a buffer of speech samples that would have been returned -*/ -/* by the older version of SYNTHS, but the newer version doesn't, */ -/* so that the newer version can always return MAXFRM samples on */ -/* every call. This has the effect of delaying the return of */ -/* samples for one additional frame time. */ - -/* Indices 1 through BUFLEN contain samples that are left over from -*/ -/* the last call to SYNTHS. Given the way that PITSYN works, */ -/* BUFLEN should always be in the range MAXFRM-MAXPIT+1 through */ -/* MAXFRM, inclusive, after a call to SYNTHS is complete. */ - -/* On the first call to SYNTHS (or the first call after */ -/* reinitializing with the entry INITSYNTHS), BUFLEN is MAXFRM, and -*/ -/* a frame of silence is always returned. */ - /* Parameter adjustments */ - if (voice) { - --voice; - } - if (rc) { - --rc; - } - if (speech) { - --speech; - } - - /* Function Body */ - buf = &(st->buf[0]); - buflen = &(st->buflen); - -/* Computing MAX */ - i__1 = min(*pitch,156); - *pitch = max(i__1,20); - i__1 = contrl_1.order; - for (i__ = 1; i__ <= i__1; ++i__) { -/* Computing MAX */ -/* Computing MIN */ - r__2 = rc[i__]; - r__1 = min(r__2,.99f); - rc[i__] = max(r__1,-.99f); - } - pitsyn_(&contrl_1.order, &voice[1], pitch, rms, &rc[1], &contrl_1.lframe, - ivuv, ipiti, rmsi, rci, &nout, &ratio, st); - if (nout > 0) { - i__1 = nout; - for (j = 1; j <= i__1; ++j) { - -/* Add synthesized speech for pitch period J to the en -d of */ -/* BUF. */ - - irc2pc_(&rci[j * 10 - 10], pc, &contrl_1.order, &c_b2, &g2pass); - bsynz_(pc, &ipiti[j - 1], &ivuv[j - 1], &buf[*buflen], &rmsi[j - 1] - , &ratio, &g2pass, st); - deemp_(&buf[*buflen], &ipiti[j - 1], st); - *buflen += ipiti[j - 1]; - } - -/* Copy first MAXFRM samples from BUF to output array SPEECH -*/ -/* (scaling them), and then remove them from the beginning of - */ -/* BUF. */ - - for (i__ = 1; i__ <= 180; ++i__) { - speech[i__] = buf[i__ - 1] / 4096.f; - } - *k = 180; - *buflen += -180; - i__1 = *buflen; - for (i__ = 1; i__ <= i__1; ++i__) { - buf[i__ - 1] = buf[i__ + 179]; - } - } - return 0; -} /* synths_ */ |