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

📄 sp_enc.cpp

📁 实现3GPP的GSM中AMR语音的CODECS。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
 Local Variables Needed:    None.------------------------------------------------------------------------------ FUNCTION DESCRIPTION This function frees the memory used for state memory.------------------------------------------------------------------------------ REQUIREMENTS None.------------------------------------------------------------------------------ REFERENCES sp_enc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE Note: Original function name of Speech_Encode_Frame_exit was changed to       GSMEncodeFrameExit in the Code section.void Speech_Encode_Frame_exit (void **state_data){    Speech_Encode_FrameState **state =        (Speech_Encode_FrameState **) state_data;  if (state == NULL || *state == NULL)      return;  Pre_Process_exit(&(*state)->pre_state);  cod_amr_exit(&(*state)->cod_amr_state);  setCounter((*state)->complexityCounter);  WMOPS_output(0);  setCounter(0); // set counter to global counter  // deallocate memory  free(*state);  *state = NULL;  return;}------------------------------------------------------------------------------ RESOURCES USED [optional] When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/void GSMEncodeFrameExit(void **state_data){    Speech_Encode_FrameState **state =        (Speech_Encode_FrameState **) state_data;    if (state == NULL || *state == NULL)        return;    Pre_Process_exit(&(*state)->pre_state);    cod_amr_exit(&(*state)->cod_amr_state);    /* deallocate memory */    oscl_free(*state);    *state = NULL;    return;}/****************************************************************************//*------------------------------------------------------------------------------ FUNCTION NAME: Speech_Encode_Frame_First------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs:    st = pointer to a structure of type Speech_Encode_FrameState that contains            the post filter states    new_speech = pointer to buffer of length L_FRAME that contains                 the speech input (Word16) Outputs:    The structure of type Speech_Encode_FrameState pointed to by st is updated. Returns:    return_value = 0 (int) Global Variables Used:    None. Local Variables Needed:    None.------------------------------------------------------------------------------ FUNCTION DESCRIPTION This function encodes the first frame of speech. It calls the pre-processing filter and the first frame encoder.------------------------------------------------------------------------------ REQUIREMENTS None.------------------------------------------------------------------------------ REFERENCES sp_enc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODEint Speech_Encode_Frame_First (    Speech_Encode_FrameState *st,  // i/o : post filter states    Word16 *new_speech)            // i   : speech input{#if !defined(NO13BIT)   Word16 i;#endif   setCounter(st->complexityCounter);#if !defined(NO13BIT)  // Delete the 3 LSBs (13-bit input)  for (i = 0; i < L_NEXT; i++)  {     new_speech[i] = new_speech[i] & 0xfff8;  }#endif  // filter + downscaling  Pre_Process (st->pre_state, new_speech, L_NEXT);  cod_amr_first(st->cod_amr_state, new_speech);  Init_WMOPS_counter (); // reset WMOPS counter for the new frame  return 0;}------------------------------------------------------------------------------ RESOURCES USED [optional] When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/void Speech_Encode_Frame_First(    Speech_Encode_FrameState *st,  /* i/o : post filter states       */    Word16 *new_speech)            /* i   : speech input             */{#if !defined(NO13BIT)    Word16 i;#endif#if !defined(NO13BIT)    /* Delete the 3 LSBs (13-bit input) */    for (i = 0; i < L_NEXT; i++)    {        new_speech[i] = new_speech[i] & 0xfff8;    }#endif    /* filter + downscaling */    Pre_Process(st->pre_state, new_speech, L_NEXT);    cod_amr_first(st->cod_amr_state, new_speech);    return;}/*------------------------------------------------------------------------------ FUNCTION NAME: cod_amr------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs:    state_data = a void pointer to the post filter states    mode = AMR mode of type enum Mode    new_speech = pointer to buffer of length L_FRAME that contains             the speech input of type Word16    serial = pointer to the serial bit stream of type Word16    usedMode = pointer to the used mode of type enum Mode Outputs:    serial -> encoded serial bit stream    The value pointed to by usedMode is updated. Returns:    return_value = 0 (int) Global Variables Used:    None. Local Variables Needed:    None.------------------------------------------------------------------------------ FUNCTION DESCRIPTION This function is the entry point to the GSM AMR encoder. The following operations are performed to generate one encoded frame: First, the incoming audio samples are passed through the pre-processing filter where they are filtered and downscaled. A call is then made to the main encoder cod_amr(). This generates the set of encoded parameters which include the LSP, adaptive codebook, and fixed codebook quantization indices (addresses and gains). The generated parameters are then converted to serial bits.------------------------------------------------------------------------------ REQUIREMENTS None.------------------------------------------------------------------------------ REFERENCES sp_enc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE Note: Original function name of Speech_Encode_Frame was changed to       GSMEncodeFrame in the Code section.int Speech_Encode_Frame (    void *state_data,             // i/o : post filter states    enum Mode mode,               // i   : speech coder mode    Word16 *new_speech,           // i   : speech input    Word16 *serial,               // o   : serial bit stream    enum Mode *usedMode           // o   : used speech coder mode    ){  Speech_Encode_FrameState *st =     (Speech_Encode_FrameState *) state_data;  Word16 prm[MAX_PRM_SIZE];   // Analysis parameters  Word16 syn[L_FRAME];        // Buffer for synthesis speech  Word16 i;  setCounter(st->complexityCounter);  Reset_WMOPS_counter (); // reset WMOPS counter for the new frame  // initialize the serial output frame to zero  for (i = 0; i < MAX_SERIAL_SIZE; i++)  {    serial[i] = 0;  }#if !defined(NO13BIT)  // Delete the 3 LSBs (13-bit input)  for (i = 0; i < L_FRAME; i++)  {     new_speech[i] = new_speech[i] & 0xfff8;  }#endif  // filter + downscaling  Pre_Process (st->pre_state, new_speech, L_FRAME);  // Call the speech encoder  cod_amr(st->cod_amr_state, mode, new_speech, prm, usedMode, syn);  // Parameters to serial bits  Prm2bits (*usedMode, prm, &serial[0]);  fwc();  setCounter(0); // set counter to global counter  return 0;}------------------------------------------------------------------------------ RESOURCES USED [optional] When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/void GSMEncodeFrame(    void *state_data,             /* i/o : post filter states          */    enum Mode mode,               /* i   : speech coder mode           */    Word16 *new_speech,           /* i   : speech input                */    Word16 *serial,               /* o   : serial bit stream           */    enum Mode *usedMode           /* o   : used speech coder mode      */){    Speech_Encode_FrameState *st =        (Speech_Encode_FrameState *) state_data;    Word16 prm[MAX_PRM_SIZE];   /* Analysis parameters.                 */    Word16 syn[L_FRAME];        /* Buffer for synthesis speech          */    Word16 i;    /* initialize the serial output frame to zero */    for (i = 0; i < MAX_SERIAL_SIZE; i++)    {        serial[i] = 0;    }#if !defined(NO13BIT)    /* Delete the 3 LSBs (13-bit input) */    for (i = 0; i < L_FRAME; i++)    {        new_speech[i] = new_speech[i] & 0xfff8;    }#endif    /* filter + downscaling */    Pre_Process(st->pre_state, new_speech, L_FRAME);    /* Call the speech encoder */    cod_amr(st->cod_amr_state, mode, new_speech, prm, usedMode, syn);    /* Parameters to serial bits */    Prm2bits(*usedMode, prm, &serial[0]);    return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -