194 lines
6.6 KiB
C
194 lines
6.6 KiB
C
/*
|
|
* Project: Direct Subband about 13000 bps coder and QUATERDECK 4160 bps decoder (LPC10 based)
|
|
* Workfile: data.h
|
|
* Author: Georges Zanellato, Alfred Wiesen
|
|
* Created: 30 August 1995
|
|
* Last update: 26 October 1995
|
|
* DLL Version: 1.00
|
|
* Revision:
|
|
* Comment:
|
|
*
|
|
* (C) Copyright 1993-95 Lernout & Hauspie Speech Products N.V. (TM)
|
|
* All rights reserved. Company confidential.
|
|
*/
|
|
|
|
// ------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------
|
|
// Constant definitions
|
|
// ------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------
|
|
#define Fil_Lenght 8 // QMF filter lenght
|
|
#define L_RES 128 // Subband frame lenght
|
|
#define N_SB 3 // power(2,N_SB) = Number subband
|
|
#define NETAGES 10 // Filter order
|
|
#define NECHFEN 220 // Total window length
|
|
#define FACTRECO 60 // Overlap length
|
|
#define RECS2 30 // Half overlap length
|
|
#define NECHDECAL 160 // Input frame size
|
|
#define DECAL 160 // Input frame size
|
|
#define SOUDECAL1 54 // First subframe size
|
|
#define SOUDECAL 53 // Second and third subframe size
|
|
#define LIM_P1 20 // Lowest possible value for PITCH
|
|
#define LIM_P2 110 // Highest possible value for PITCH
|
|
#define lngEE 148 // Excitation vector length
|
|
|
|
#include "variable.h"
|
|
|
|
// ------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------
|
|
// Data types definitions
|
|
// ------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------
|
|
typedef short VAUTOC [NETAGES+1];
|
|
typedef short VEE [lngEE];
|
|
typedef short VSOU [SOUDECAL1];
|
|
|
|
// ------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------
|
|
// Instance data for coder
|
|
// ------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------
|
|
typedef struct C16008Data_Tag
|
|
{
|
|
// PhilF: This field needs to be at the top so that it can be accessed
|
|
// by casting to PC16008DATA or PC4808DATA
|
|
DWORD dwMaxBitRate;
|
|
// Long term
|
|
short zx0_i[2];
|
|
// Long term
|
|
short QMF_MEM_ANAL_I[112]; // Memory of QMF filter during analysis
|
|
short memBP[9];
|
|
// float Zb[5],Za[5]; // long term decimator
|
|
// float mem1[2];
|
|
#ifdef _X86_
|
|
short imem1[2];
|
|
#else
|
|
int imem1[23];
|
|
unsigned int uiDelayPosition;
|
|
int iInputStreamTime;
|
|
int iOutputStreamTime;
|
|
#endif
|
|
long memory[20];
|
|
|
|
long nbbit[NBFAC];
|
|
short nbsb_sp;
|
|
|
|
short DIV_MAX; // div. factor for the greatest max of a the sb of a sp frame
|
|
short MAX_LEVEL; // threshold below which a sb is replaced by white noise
|
|
short NBSB_SP_MAX; // max nbr of sb treated as speech
|
|
short nbbit_cf; // nber of bits required by the current frame of speech
|
|
|
|
// PhilF: Since these depend on the bit rate, moved them from global to here...
|
|
short quantif[2*NBSB_SP_MAX1_8000_12000]; //={QUANT_LEVELS};
|
|
short bits[NBSB_SP_MAX1_8000_12000]; //={CODING_BITS};
|
|
|
|
short codes_max[8]; // Quantized max. of each subband
|
|
long codes_sb[16]; // Two codes for each of the quantified subbands
|
|
short indic_sp[8]; // type of subband (0=noise; 1=speech)
|
|
short DATA_I[512]; // Intermediate vector = input and output of QMF
|
|
char stream[MAX_OUTPUT_BYTES_16000];
|
|
|
|
} C16008DATA, *PC16008DATA;
|
|
|
|
#ifdef CELP4800
|
|
typedef struct C4808Data_Tag
|
|
{
|
|
// PhilF: This field needs to be at the top so that it can be accessed
|
|
// by casting to PC16008DATA or PC4808DATA
|
|
DWORD dwMaxBitRate;
|
|
long DMSY[13]; // Synthesis memory filter
|
|
short MINV[13]; // Filter memory
|
|
short SIG[NECHFEN+SOUDECAL],M_PIT[160]; // Computation signal vectors
|
|
VSOU E,E_PE; // Excitation vectors
|
|
VEE EE; // Excitation vector
|
|
short mem2[2]; // Input filter memory
|
|
short mem_pit[2]; // Pitch memory
|
|
short LSP0[10]; // LSP memory
|
|
|
|
short SIG_CALP[380]; // RAM
|
|
short UNVOIS,PITCH,SOULONG; // RAM
|
|
long a,b; // RAM
|
|
short ialf;
|
|
long TLSP[24],VMAX[9]; // RAM
|
|
long veci1[10],veci2[10],veci3[10]; // RAM
|
|
long ttt[11]; // RAM
|
|
short SIGPI[2*NECHDECAL+FACTRECO]; // RAM
|
|
short zz[12];
|
|
VAUTOC A1,A2,A3,Aw,LSP; // RAM
|
|
VSOU H; // RAM
|
|
short GLTP; // RAM
|
|
short code[22]; // RAM
|
|
short output_frame[6];
|
|
short depl;
|
|
short *ptr1; // RAM
|
|
|
|
} C4808DATA, *PC4808DATA, *LPC4808DATA;
|
|
#endif
|
|
|
|
// ------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------
|
|
// Instance data for decoder
|
|
// ------------------------------------------------------------------------
|
|
// ------------------------------------------------------------------------
|
|
typedef struct D16008Data_Tag
|
|
{
|
|
// PhilF: This field needs to be at the top so that it can be accessed
|
|
// by casting to PD16008DATA or PD4808DATA
|
|
DWORD dwMaxBitRate;
|
|
long memfil[20];
|
|
short QMF_MEM_SYNT_I[112]; // Memory of QMF filter during synthesis
|
|
// float mem2[2];
|
|
#ifdef _X86_
|
|
short imem2[2];
|
|
#else
|
|
int imem2[56];
|
|
unsigned int uiDelayPosition;
|
|
int iInputStreamTime;
|
|
int iOutputStreamTime;
|
|
#endif
|
|
|
|
short out_mem[4];
|
|
short out_mem2[20];
|
|
long memory[20];
|
|
short mem1,mem2;
|
|
|
|
// PhilF: Since these depend on the bit rate, moved them from global to here...
|
|
short quantif[2*NBSB_SP_MAX1_8000_12000]; //={QUANT_LEVELS};
|
|
short bits[NBSB_SP_MAX1_8000_12000]; //={CODING_BITS};
|
|
long lRand;
|
|
|
|
short synth_speech[224];
|
|
short d_codes_max[8]; // Quantified max. of each subband
|
|
long d_codes_sb[16]; // Two codes for each of the quantified subbands
|
|
short d_indic_sp[8]; // type of subband (0=noise; 1=speech)
|
|
short d_DATA_I[512]; // Intermediate vector = input and output of QMF
|
|
char d_stream[MAX_OUTPUT_BYTES_16000];
|
|
short d_num_bandes;
|
|
|
|
} D16008DATA, *PD16008DATA;
|
|
|
|
#ifdef CELP4800
|
|
typedef struct D4808Data_Tag
|
|
{
|
|
// PhilF: This field needs to be at the top so that it can be accessed
|
|
// by casting to PD16008DATA or PD4808DATA
|
|
DWORD dwMaxBitRate;
|
|
long memfil[32]; // Synthesis filter memory
|
|
short MSYNTH[13]; // Filter memory
|
|
VSOU E; // Excitation vector
|
|
VEE EE,EEE; // Excitation vectors
|
|
short LSP0[10]; // LSP memory
|
|
|
|
short PITCH,SOULONG; // RAM
|
|
long TLSP[24]; // RAM
|
|
VAUTOC A1,A2,A3,LSP; // RAM
|
|
short GLTP;
|
|
short ss[DECAL]; // RAM
|
|
short code[22]; // RAM
|
|
short frame[6]; // RAM
|
|
short depl; // RAM
|
|
|
|
} D4808DATA, *PD4808DATA, *LPD4808DATA;
|
|
|
|
#endif
|