📄 synths.c,v
字号:
head 1.2;access;symbols;locks; strict;comment @ * @;1.2date 96.08.20.20.42.59; author jaf; state Exp;branches;next 1.1;1.1date 96.08.19.22.30.33; author jaf; state Exp;branches;next ;desc@@1.2log@Removed all static local variables that were SAVE'd in the Fortrancode, and put them in struct lpc10_decoder_state that is passed as anargument.Removed init function, since all initialization is now done ininit_lpc10_decoder_state().@text@/*$Log: synths.c,v $ * Revision 1.1 1996/08/19 22:30:33 jaf * Initial revision **/#ifdef P_R_O_T_O_T_Y_P_E_Sextern 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/* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order)*/#include "f2c.h"/* 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: synths.c,v $ * 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]; extern /* Subroutine */ bsynz_(real *, integer *, integer *, real *, real *, real *, real *, struct lpc10_decoder_state *), irc2pc_(real *, real * , integer *, real *, real *); 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: synths.c,v $ * 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: synths.c,v $ * 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 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -