⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synths.c,v

📁 lpc10-15为美军2400bps语音压缩标准的C语音源代码。
💻 C,V
📖 第 1 页 / 共 2 页
字号:
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 + -