Description | Uses | Classes, Interfaces, Objects and Records | Functions and Procedures | Types | Constants | Variables |
GSM6.10 codec. Delphi implementation based on C-source code by Jutta Degener and Carsten Bormann
1.0 First release
Name | Description |
---|---|
record gsm_state |
|
Class unaGSMcoder |
|
Class unaGSMDecoder |
GSM Decoder |
Class unaGSMEncoder |
GSM Encoder |
_pword = ˆ_word; |
_word = int16; |
_pwordArray = ˆ_wordArray; |
_wordArray = array[word] of _word; |
_plongword = ˆ_longword; |
_longword = int32; |
uword = uint16; |
ulongword = uint32; |
pgsm_state = ˆgsm_state; |
gsm = pgsm_state; |
pgsm_signal = ˆgsm_signal; |
gsm_signal = int16; |
pgsm_byte = ˆgsm_byte; |
gsm_byte = byte; |
gsm_frame = array[0..33 - 1] of gsm_byte; |
gsm_A: array[0..8 - 1] of _word = (20480, 20480, 20480, 20480, 13964, 15360, 8534, 9036); |
gsm_B: array[0..8 - 1] of _word = ( 0, 0, 2048, -2560, 94, -1792, -341, -1144); |
gsm_DLB: array[0..4 - 1] of _word = ( 6554, 16384, 26214, 32767 ); |
gsm_FAC: array[0..8 - 1] of _word = ( 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767); |
gsm_H: array[0..11 - 1] of _word = (-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134); |
gsm_INVA: array[0..8 - 1] of _word = ( 13107, 13107, 13107, 13107, 19223, 17476, 31454, 29708); |
gsm_MAC: array[0..8 - 1] of _word = ( 31, 31, 15, 15, 7, 7, 3, 3 ); |
GSM_MAGIC = $D; |
GSM_MAJOR = 1; |
gsm_MIC: array[0..8 - 1] of _word = ( -32, -32, -16, -16, -8, -8, -4, -4 ); |
GSM_MINOR = 0; |
gsm_NRFAC: array[0..8 - 1] of _word = ( 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384); |
GSM_OPT_FAST = 2; |
GSM_OPT_FRAME_CHAIN = 6; |
GSM_OPT_FRAME_INDEX = 5; |
GSM_OPT_LTP_CUT = 3; |
GSM_OPT_VERBOSE = 1; |
GSM_OPT_WAV49 = 4; |
GSM_PATCHLEVEL = 10; |
gsm_QLB: array[0..4 - 1] of _word = ( 3277, 11469, 21299, 32767 ); |
MAX_LONGWORD = 2147483647; |
MAX_WORD = 32767; |
MIN_LONGWORD = (-2147483647 - 1); |
MIN_WORD = (-32767 - 1); |
function _gsm_mult (a : _word ; b :_word ): _word; |
* Prototypes from add.c * |
function _gsm_div (num: _word ; denum :_word ): _word; |
function gsm_L_mult (a : _word ; b :_word ): _longword;{$IFDEF UNA_OK_INLINE }inline;{$ENDIF UNA_OK_INLINE } function gsm_mult_r (a : _word ; b :_word ): _word;{$IFDEF UNA_OK_INLINE }inline;{$ENDIF UNA_OK_INLINE } |
function _gsm_add (a : _word ; b :_word ): _word; |
function _gsm_sub (a : _word ; b :_word ): _word; |
function gsm_L_add (a : _longword ; b :_longword ): _longword;{$IFDEF UNA_OK_INLINE }inline;{$ENDIF UNA_OK_INLINE } |
function gsm_L_sub (a : _longword ; b :_longword ): _longword; |
function _gsm_norm (a : _longword ): _word; |
function gsm_abs (a : _word ): _word;{$IFDEF UNA_OK_INLINE }inline;{$ENDIF UNA_OK_INLINE } |
function _gsm_L_asl (a : _longword ; n :int32 ): _longword; |
function _gsm_asl (a : _word ; n :int32 ): _word; |
function _gsm_L_asr (a : _longword ; n :int32 ): _longword; |
function _gsm_asr (a : _word ; n :int32 ): _word; |
procedure Gsm_Coder( S: pgsm_state; _s: _pword; LARc: _pword; Nc: _pword; bc: _pword; Mc: _pword; xmaxc: _pword; xMc: _pword ); |
procedure Gsm_Long_Term_Predictor( S: pgsm_state; d: _pword; dp: _pword; e: _pword; dpp: _pword; Nc: _pword; bc: _pword ); |
procedure Gsm_LPC_Analysis( S: pgsm_state; _s: _pword; LARc: _pword ); |
procedure Gsm_Preprocess( S: pgsm_state; _s: _pword; _so: _pword ); |
procedure Gsm_Short_Term_Analysis_Filter( S: pgsm_state; LARc: _pword; _s: _pword ); |
procedure Gsm_Encoding( S: pgsm_state; e: _pword; ep: _pword; xmaxc: _pword; Mc: _pword; xMc: _pword ); |
procedure Gsm_Decoder( S: pgsm_state; LARcr: _pword; Ncr: _pword; bcr: _pword; Mcr: _pword; xmaxcr: _pword; xMcr: _pword; _s: _pword ); |
procedure Gsm_Long_Term_Synthesis_Filtering( S: pgsm_state; Ncr: _word; bcr: _word; erp: _pword; drp: _pword ); |
procedure Gsm_Decoding( S: pgsm_state; xmaxcr: _word; Mcr: _word; xMcr: _pword; //* [0..12] IN */ erp: _pword //* [0..39] OUT */ ); |
procedure Gsm_RPE_Decoding( S: pgsm_state; xmaxcr: _word; Mcr: _word; xMcr: _pword; erp: _pword ); |
procedure Gsm_RPE_Encoding( S: pgsm_state; e: _pword; xmaxc: _pword; Mc: _pword; xMc: _pword ); |
procedure Gsm_Short_Term_Synthesis_Filter( S: pgsm_state; LARcr: _pword; wt: _pword; _s: _pword ); |
function gsm_create(): gsm; |
procedure gsm_destroy(g: gsm); |
function gsm_option (g: gsm; opt: int32; val: pInt32): int32; |
function gsm_print (FILE *, gsm, gsm_byte *): int32; |
procedure gsm_encode (s: gsm; source: pgsm_signal; c: pgsm_byte); |
function gsm_decode (s: gsm; c: pgsm_byte; target: pgsm_signal): int32; |
function SASR(v: _word; c: int): _word; overload; |
function gsm_explode (gsm, gsm_byte *, gsm_signal *): int32; procedure gsm_implode (gsm, gsm_signal *, gsm_byte *); #endif /* GSM_H */ |
function SASR(v: _longword; c: int): _longword; overload; |
function GSM_MULT_R(a, b: _word): _word; |
function GSM_MULT(a, b: _word): _word; |
function GSM_L_MULT(a, b: _longword): _longword; |
function GSM_L_ADD(a, b: _longword): _longword; |
function GSM_ADD(a, b: _word): _word; |
function GSM_SUB(a, b: _word): _word; |
function GSM_ABS(a: _word): _word; |
_pword = ˆ_word; |
$Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/private.h,v 1.6 1996/07/02 10:15:26 jutta Exp $*/ #ifndef PRIVATE_H #define PRIVATE_H |
_word = int16; |
_pwordArray = ˆ_wordArray; |
_wordArray = array[word] of _word; |
_plongword = ˆ_longword; |
_longword = int32; |
uword = uint16; |
ulongword = uint32; |
pgsm_state = ˆgsm_state; |
gsm = pgsm_state; |
* Interface */ |
pgsm_signal = ˆgsm_signal; |
gsm_signal = int16; |
pgsm_byte = ˆgsm_byte; |
gsm_byte = byte; |
gsm_frame = array[0..33 - 1] of gsm_byte; |
gsm_A: array[0..8 - 1] of _word = (20480, 20480, 20480, 20480, 13964, 15360, 8534, 9036); |
#ifndef GSM_TABLE_C Table 4.1 Quantization of the Log.-Area Ratios i 1 2 3 4 5 6 7 8 */ |
gsm_B: array[0..8 - 1] of _word = ( 0, 0, 2048, -2560, 94, -1792, -341, -1144); |
gsm_DLB: array[0..4 - 1] of _word = ( 6554, 16384, 26214, 32767 ); |
Table 4.3a Decision level of the LTP gain quantizer bc 0 1 2 3 */ |
gsm_FAC: array[0..8 - 1] of _word = ( 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767); |
Table 4.6 Normalized direct mantissa used to compute xM/xmax i 0 1 2 3 4 5 6 7 */ |
gsm_H: array[0..11 - 1] of _word = (-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134); |
Table 4.4 Coefficients of the weighting filter i 0 1 2 3 4 5 6 7 8 9 10 */ |
gsm_INVA: array[0..8 - 1] of _word = ( 13107, 13107, 13107, 13107, 19223, 17476, 31454, 29708); |
Table 4.2 Tabulation of 1/A[1..8] |
gsm_MAC: array[0..8 - 1] of _word = ( 31, 31, 15, 15, 7, 7, 3, 3 ); |
GSM_MAGIC = $D; |
33 * 8 bits */ |
GSM_MAJOR = 1; |
gsm_MIC: array[0..8 - 1] of _word = ( -32, -32, -16, -16, -8, -8, -4, -4 ); |
GSM_MINOR = 0; |
gsm_NRFAC: array[0..8 - 1] of _word = ( 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384); |
Table 4.5 Normalized inverse mantissa used to compute xM/xmax i 0 1 2 3 4 5 6 7 */ |
GSM_OPT_FAST = 2; |
GSM_OPT_FRAME_CHAIN = 6; |
GSM_OPT_FRAME_INDEX = 5; |
GSM_OPT_LTP_CUT = 3; |
not supported |
GSM_OPT_VERBOSE = 1; |
GSM_OPT_WAV49 = 4; |
not supported |
GSM_PATCHLEVEL = 10; |
13 kbit/s RPE-LTP */ 1101 |
gsm_QLB: array[0..4 - 1] of _word = ( 3277, 11469, 21299, 32767 ); |
Table 4.3b Quantization levels of the LTP gain quantizer bc 0 1 2 3 */ |
MAX_LONGWORD = 2147483647; |
MAX_WORD = 32767; |
MIN_LONGWORD = (-2147483647 - 1); |
MIN_WORD = (-32767 - 1); |
half-byte to carry forward */ |
(c) 2012 Lake of Soft