| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $Log$ | 
					
						
							| 
									
										
										
										
											2004-08-31 13:32:11 +00:00
										 |  |  | Revision 1.18  2004/08/31 13:32:11  markster | 
					
						
							| 
									
										
										
										
											2021-10-30 21:04:43 -04:00
										 |  |  | Merge NetBSD and Courtesy tone with modifications (bug #2329) | 
					
						
							| 
									
										
										
										
											2004-08-31 13:32:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-10-26 18:50:49 +00:00
										 |  |  | Revision 1.17  2003/10/26 18:50:49  markster | 
					
						
							|  |  |  | Make it build and run on MacOS X | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Revision 1.3  2003/10/26 18:50:49  markster | 
					
						
							|  |  |  | Make it build and run on MacOS X | 
					
						
							| 
									
										
										
										
											2003-04-23 19:13:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Revision 1.2  2003/04/23 19:13:35  markster | 
					
						
							|  |  |  | More OpenBSD patches | 
					
						
							| 
									
										
										
										
											2003-02-12 13:59:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-16 22:37:31 +00:00
										 |  |  | Revision 1.1.1.2  2003/03/16 22:37:30  matteo | 
					
						
							|  |  |  | dom mar 16 23:37:23 CET 2003 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Revision 1.2  2003/03/16 16:09:48  markster | 
					
						
							|  |  |  | Mere James's cleanups for fewer build warnings | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Revision 1.1  2000/01/05 00:20:06  markster | 
					
						
							|  |  |  | Add broken lpc10 code...  It's not too far from working I don't think... | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * Revision 1.1  1996/08/19  22:47:31  jaf | 
					
						
							|  |  |  |  * Initial revision | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef __LPC10_H__
 | 
					
						
							|  |  |  | #define __LPC10_H__
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-09 23:13:52 +00:00
										 |  |  | #define P_R_O_T_O_T_Y_P_E_S
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  | #define LPC10_SAMPLES_PER_FRAME 180
 | 
					
						
							|  |  |  | #define LPC10_BITS_IN_COMPRESSED_FRAME 54
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   The "#if defined"'s in this file are by no means intended to be | 
					
						
							|  |  |  |   complete.  They are what Nautilus uses, which has been successfully | 
					
						
							|  |  |  |   compiled under DOS with the Microsoft C compiler, and under a few | 
					
						
							|  |  |  |   versions of Unix with the GNU C compiler. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-08-31 13:32:11 +00:00
										 |  |  | #if defined(unix) || defined(__unix__) || defined(__NetBSD__)
 | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  | typedef short		INT16; | 
					
						
							| 
									
										
										
										
											2006-02-10 23:37:27 +00:00
										 |  |  | typedef int			INT32; | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(__MSDOS__) || defined(MSDOS)
 | 
					
						
							| 
									
										
										
										
											2006-02-10 23:37:27 +00:00
										 |  |  | typedef int			INT16; | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  | typedef long		INT32; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-10-26 18:50:49 +00:00
										 |  |  | #if defined(__APPLE__)
 | 
					
						
							|  |  |  | typedef short		INT16; | 
					
						
							| 
									
										
										
										
											2006-02-10 23:37:27 +00:00
										 |  |  | typedef int			INT32; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if defined(WIN32) && defined(_MSC_VER)
 | 
					
						
							|  |  |  | typedef __int16		INT16; | 
					
						
							|  |  |  | typedef __int32		INT32; | 
					
						
							|  |  |  | #pragma warning(disable: 4005)
 | 
					
						
							| 
									
										
										
										
											2003-10-26 18:50:49 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* The initial values for every member of this structure is 0, except
 | 
					
						
							|  |  |  |    where noted in comments. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* These two lines are copied from f2c.h.  There should be a more
 | 
					
						
							|  |  |  |    elegant way of doing this than having the same declarations in two | 
					
						
							|  |  |  |    files. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef float real; | 
					
						
							|  |  |  | typedef INT32 integer; | 
					
						
							|  |  |  | typedef INT32 logical; | 
					
						
							|  |  |  | typedef INT16 shortint; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct lpc10_encoder_state { | 
					
						
							|  |  |  |     /* State used only by function hp100 */ | 
					
						
							|  |  |  |     real z11; | 
					
						
							|  |  |  |     real z21; | 
					
						
							|  |  |  |     real z12; | 
					
						
							|  |  |  |     real z22; | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  |     /* State used by function analys */ | 
					
						
							|  |  |  |     real inbuf[540], pebuf[540]; | 
					
						
							|  |  |  |     real lpbuf[696], ivbuf[312]; | 
					
						
							|  |  |  |     real bias; | 
					
						
							|  |  |  |     integer osbuf[10];  /* no initial value necessary */ | 
					
						
							|  |  |  |     integer osptr;     /* initial value 1 */ | 
					
						
							|  |  |  |     integer obound[3]; | 
					
						
							|  |  |  |     integer vwin[6]	/* was [2][3] */;   /* initial value vwin[4] = 307; vwin[5] = 462; */ | 
					
						
							|  |  |  |     integer awin[6]	/* was [2][3] */;   /* initial value awin[4] = 307; awin[5] = 462; */ | 
					
						
							|  |  |  |     integer voibuf[8]	/* was [2][4] */; | 
					
						
							|  |  |  |     real rmsbuf[3]; | 
					
						
							|  |  |  |     real rcbuf[30]	/* was [10][3] */; | 
					
						
							|  |  |  |     real zpre; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function onset */ | 
					
						
							|  |  |  |     real n; | 
					
						
							|  |  |  |     real d__;   /* initial value 1.f */ | 
					
						
							|  |  |  |     real fpc;   /* no initial value necessary */ | 
					
						
							|  |  |  |     real l2buf[16]; | 
					
						
							|  |  |  |     real l2sum1; | 
					
						
							|  |  |  |     integer l2ptr1;   /* initial value 1 */ | 
					
						
							|  |  |  |     integer l2ptr2;   /* initial value 9 */ | 
					
						
							|  |  |  |     integer lasti;    /* no initial value necessary */ | 
					
						
							|  |  |  |     logical hyst;   /* initial value FALSE_ */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function voicin */ | 
					
						
							|  |  |  |     real dither;   /* initial value 20.f */ | 
					
						
							|  |  |  |     real snr; | 
					
						
							|  |  |  |     real maxmin; | 
					
						
							|  |  |  |     real voice[6]	/* was [2][3] */;   /* initial value is probably unnecessary */ | 
					
						
							|  |  |  |     integer lbve, lbue, fbve, fbue; | 
					
						
							|  |  |  |     integer ofbue, sfbue; | 
					
						
							|  |  |  |     integer olbue, slbue; | 
					
						
							|  |  |  |     /* Initial values:
 | 
					
						
							|  |  |  | 	lbve = 3000; | 
					
						
							|  |  |  | 	fbve = 3000; | 
					
						
							|  |  |  | 	fbue = 187; | 
					
						
							|  |  |  | 	ofbue = 187; | 
					
						
							|  |  |  | 	sfbue = 187; | 
					
						
							|  |  |  | 	lbue = 93; | 
					
						
							|  |  |  | 	olbue = 93; | 
					
						
							|  |  |  | 	slbue = 93; | 
					
						
							|  |  |  | 	snr = (real) (fbve / fbue << 6); | 
					
						
							|  |  |  | 	*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function dyptrk */ | 
					
						
							|  |  |  |     real s[60]; | 
					
						
							|  |  |  |     integer p[120]	/* was [60][2] */; | 
					
						
							|  |  |  |     integer ipoint; | 
					
						
							|  |  |  |     real alphax; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function chanwr */ | 
					
						
							|  |  |  |     integer isync; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct lpc10_decoder_state { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function decode */ | 
					
						
							|  |  |  |     integer iptold;   /* initial value 60 */ | 
					
						
							|  |  |  |     logical first;   /* initial value TRUE_ */ | 
					
						
							|  |  |  |     integer ivp2h; | 
					
						
							|  |  |  |     integer iovoic; | 
					
						
							|  |  |  |     integer iavgp;   /* initial value 60 */ | 
					
						
							|  |  |  |     integer erate; | 
					
						
							|  |  |  |     integer drc[30]	/* was [3][10] */; | 
					
						
							|  |  |  |     integer dpit[3]; | 
					
						
							|  |  |  |     integer drms[3]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function synths */ | 
					
						
							|  |  |  |     real buf[360]; | 
					
						
							|  |  |  |     integer buflen;   /* initial value 180 */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function pitsyn */ | 
					
						
							|  |  |  |     integer ivoico;   /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ | 
					
						
							|  |  |  |     integer ipito;   /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ | 
					
						
							|  |  |  |     real rmso;   /* initial value 1.f */ | 
					
						
							|  |  |  |     real rco[10];   /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ | 
					
						
							|  |  |  |     integer jsamp;   /* no initial value necessary as long as first_pitsyn is initially TRUE_ */ | 
					
						
							|  |  |  |     logical first_pitsyn;   /* initial value TRUE_ */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function bsynz */ | 
					
						
							|  |  |  |     integer ipo; | 
					
						
							|  |  |  |     real exc[166]; | 
					
						
							|  |  |  |     real exc2[166]; | 
					
						
							|  |  |  |     real lpi1; | 
					
						
							|  |  |  |     real lpi2; | 
					
						
							|  |  |  |     real lpi3; | 
					
						
							|  |  |  |     real hpi1; | 
					
						
							|  |  |  |     real hpi2; | 
					
						
							|  |  |  |     real hpi3; | 
					
						
							|  |  |  |     real rmso_bsynz; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function random */ | 
					
						
							|  |  |  |     integer j;   /* initial value 2 */ | 
					
						
							|  |  |  |     integer k;   /* initial value 5 */ | 
					
						
							|  |  |  |     shortint y[5];  /* initial value { -21161,-8478,30892,-10216,16950 } */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* State used by function deemp */ | 
					
						
							|  |  |  |     real dei1; | 
					
						
							|  |  |  |     real dei2; | 
					
						
							|  |  |  |     real deo1; | 
					
						
							|  |  |  |     real deo2; | 
					
						
							|  |  |  |     real deo3; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Calling sequence: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Call create_lpc10_encoder_state(), which returns a pointer to an | 
					
						
							|  |  |  |   already initialized lpc10_encoder_state structure. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   lpc10_encode reads indices 0 through (LPC10_SAMPLES_PER_FRAME-1) of | 
					
						
							|  |  |  |   array speech[], and writes indices 0 through | 
					
						
							|  |  |  |   (LPC10_BITS_IN_COMPRESSED_FRAME-1) of array bits[], and both reads | 
					
						
							|  |  |  |   and writes the lpc10_encoder_state structure contents.  The | 
					
						
							|  |  |  |   lpc10_encoder_state structure should *not* be initialized for every | 
					
						
							|  |  |  |   frame of encoded speech.  Once at the beginning of execution, done | 
					
						
							|  |  |  |   automatically for you by create_lpc10_encoder_state(), is enough. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   init_lpc10_encoder_state() reinitializes the lpc10_encoder_state | 
					
						
							|  |  |  |   structure.  This might be useful if you are finished processing one | 
					
						
							|  |  |  |   sound sample, and want to reuse the same lpc10_encoder_state | 
					
						
							|  |  |  |   structure to process another sound sample.  There might be other | 
					
						
							|  |  |  |   uses as well. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Note that the comments in the lpc10/lpcenc.c file imply that indices | 
					
						
							|  |  |  |   1 through 180 of array speech[] are read.  These comments were | 
					
						
							|  |  |  |   written for the Fortran version of the code, before it was | 
					
						
							|  |  |  |   automatically converted to C by the conversion program f2c.  f2c | 
					
						
							|  |  |  |   seems to use the convention that the pointers to arrays passed as | 
					
						
							|  |  |  |   function arguments point to the first index used in the Fortran | 
					
						
							|  |  |  |   code, whatever index that might be (usually 1), and then it modifies | 
					
						
							|  |  |  |   the pointer inside of the function, like so: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (speech) { | 
					
						
							|  |  |  |       --speech; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   So that the code can access the first value at index 1 and the last | 
					
						
							|  |  |  |   at index 180.  This makes the translated C code "closer" to the | 
					
						
							|  |  |  |   original Fortran code. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   The calling sequence for the decoder is similar to the encoder.  The | 
					
						
							|  |  |  |   only significant difference is that the array bits[] is read | 
					
						
							|  |  |  |   (indices 0 through (LPC10_BITS_IN_COMPRESSED_FRAME-1)), and the | 
					
						
							|  |  |  |   array speech[] is written (indices 0 through | 
					
						
							|  |  |  |   (LPC10_SAMPLES_PER_FRAME-1)). | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  |   */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-16 22:37:31 +00:00
										 |  |  | struct lpc10_encoder_state * create_lpc10_encoder_state (void); | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  | void init_lpc10_encoder_state (struct lpc10_encoder_state *st); | 
					
						
							|  |  |  | int lpc10_encode (real *speech, INT32 *bits, struct lpc10_encoder_state *st); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-03-16 22:37:31 +00:00
										 |  |  | struct lpc10_decoder_state * create_lpc10_decoder_state (void); | 
					
						
							| 
									
										
										
										
											2000-01-05 00:19:54 +00:00
										 |  |  | void init_lpc10_decoder_state (struct lpc10_decoder_state *st); | 
					
						
							|  |  |  | int lpc10_decode (INT32 *bits, real *speech, struct lpc10_decoder_state *st); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* __LPC10_H__ */
 |