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

📄 nb_celp.c

📁 一个开源的sip源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
      ALLOC(interp_qlsp, st->lpcSize, spx_lsp_t);   if (st->lpc_enh_enabled && SUBMODE(comb_gain)>0 && !st->count_lost)   {      multicomb(st->exc-st->subframeSize, out, st->interp_qlpc, st->lpcSize, 2*st->subframeSize, best_pitch, 40, SUBMODE(comb_gain), stack);      multicomb(st->exc+st->subframeSize, out+2*st->subframeSize, st->interp_qlpc, st->lpcSize, 2*st->subframeSize, best_pitch, 40, SUBMODE(comb_gain), stack);   } else {      for (i=0;i<st->frameSize;i++)         out[i]=st->exc[i-st->subframeSize];   }      /* If the last packet was lost, re-scale the excitation to obtain the same energy as encoded in ol_gain */   if (st->count_lost)    {      spx_word16_t exc_ener;      spx_word32_t gain32;      spx_word16_t gain;      exc_ener = compute_rms16 (st->exc, st->frameSize);      gain32 = PDIV32(ol_gain, ADD16(exc_ener,1));#ifdef FIXED_POINT      if (gain32 > 32767)         gain32 = 32767;      gain = EXTRACT16(gain32);#else      if (gain32 > 2)         gain32=2;      gain = gain32;#endif      for (i=0;i<st->frameSize;i++)      {         st->exc[i] = MULT16_16_Q14(gain, st->exc[i]);         out[i]=st->exc[i-st->subframeSize];      }   }   /*Loop on subframes */   for (sub=0;sub<st->nbSubframes;sub++)   {      int offset;      spx_word16_t *sp;      spx_word16_t *exc;      /* Offset relative to start of frame */      offset = st->subframeSize*sub;      /* Original signal */      sp=out+offset;      /* Excitation */      exc=st->exc+offset;      /* LSP interpolation (quantized and unquantized) */      lsp_interpolate(st->old_qlsp, qlsp, interp_qlsp, st->lpcSize, sub, st->nbSubframes);      /* Make sure the LSP's are stable */      lsp_enforce_margin(interp_qlsp, st->lpcSize, LSP_MARGIN);      /* Compute interpolated LPCs (unquantized) */      lsp_to_lpc(interp_qlsp, ak, st->lpcSize, stack);      /* Compute analysis filter at w=pi */      {         spx_word32_t pi_g=LPC_SCALING;         for (i=0;i<st->lpcSize;i+=2)         {            /*pi_g += -st->interp_qlpc[i] +  st->interp_qlpc[i+1];*/            pi_g = ADD32(pi_g, SUB32(EXTEND32(ak[i+1]),EXTEND32(ak[i])));         }         st->pi_gain[sub] = pi_g;      }            iir_mem16(sp, st->interp_qlpc, sp, st->subframeSize, st->lpcSize,                 st->mem_sp, stack);            for (i=0;i<st->lpcSize;i++)         st->interp_qlpc[i] = ak[i];   }   if (st->highpass_enabled)      highpass(out, out, st->frameSize, (st->isWideband?HIGHPASS_WIDEBAND:HIGHPASS_NARROWBAND)|HIGHPASS_OUTPUT, st->mem_hp);   /*for (i=0;i<st->frameSize;i++)     printf ("%d\n", (int)st->frame[i]);*/   /* Store the LSPs for interpolation in the next frame */   for (i=0;i<st->lpcSize;i++)      st->old_qlsp[i] = qlsp[i];   /* The next frame will not be the first (Duh!) */   st->first = 0;   st->count_lost=0;   st->last_pitch = best_pitch;#ifdef FIXED_POINT   st->last_pitch_gain = PSHR16(pitch_average,2);#else   st->last_pitch_gain = .25*pitch_average;   #endif   st->pitch_gain_buf[st->pitch_gain_buf_idx++] = st->last_pitch_gain;   if (st->pitch_gain_buf_idx > 2) /* rollover */      st->pitch_gain_buf_idx = 0;   st->last_ol_gain = ol_gain;   return 0;}int nb_encoder_ctl(void *state, int request, void *ptr){   EncState *st;   st=(EncState*)state;        switch(request)   {   case SPEEX_GET_FRAME_SIZE:      (*(spx_int32_t*)ptr) = st->frameSize;      break;   case SPEEX_SET_LOW_MODE:   case SPEEX_SET_MODE:      st->submodeSelect = st->submodeID = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_LOW_MODE:   case SPEEX_GET_MODE:      (*(spx_int32_t*)ptr) = st->submodeID;      break;   case SPEEX_SET_VBR:      st->vbr_enabled = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_VBR:      (*(spx_int32_t*)ptr) = st->vbr_enabled;      break;   case SPEEX_SET_VAD:      st->vad_enabled = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_VAD:      (*(spx_int32_t*)ptr) = st->vad_enabled;      break;   case SPEEX_SET_DTX:      st->dtx_enabled = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_DTX:      (*(spx_int32_t*)ptr) = st->dtx_enabled;      break;   case SPEEX_SET_ABR:      st->abr_enabled = (*(spx_int32_t*)ptr);      st->vbr_enabled = st->abr_enabled!=0;      if (st->vbr_enabled)       {         spx_int32_t i=10;         spx_int32_t rate, target;         float vbr_qual;         target = (*(spx_int32_t*)ptr);         while (i>=0)         {            speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i);            speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate);            if (rate <= target)               break;            i--;         }         vbr_qual=i;         if (vbr_qual<0)            vbr_qual=0;         speex_encoder_ctl(st, SPEEX_SET_VBR_QUALITY, &vbr_qual);         st->abr_count=0;         st->abr_drift=0;         st->abr_drift2=0;      }            break;   case SPEEX_GET_ABR:      (*(spx_int32_t*)ptr) = st->abr_enabled;      break;   case SPEEX_SET_VBR_QUALITY:      st->vbr_quality = (*(float*)ptr);      break;   case SPEEX_GET_VBR_QUALITY:      (*(float*)ptr) = st->vbr_quality;      break;   case SPEEX_SET_QUALITY:      {         int quality = (*(spx_int32_t*)ptr);         if (quality < 0)            quality = 0;         if (quality > 10)            quality = 10;         st->submodeSelect = st->submodeID = ((const SpeexNBMode*)(st->mode->mode))->quality_map[quality];      }      break;   case SPEEX_SET_COMPLEXITY:      st->complexity = (*(spx_int32_t*)ptr);      if (st->complexity<0)         st->complexity=0;      break;   case SPEEX_GET_COMPLEXITY:      (*(spx_int32_t*)ptr) = st->complexity;      break;   case SPEEX_SET_BITRATE:      {         spx_int32_t i=10;         spx_int32_t rate, target;         target = (*(spx_int32_t*)ptr);         while (i>=0)         {            speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i);            speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate);            if (rate <= target)               break;            i--;         }      }      break;   case SPEEX_GET_BITRATE:      if (st->submodes[st->submodeID])         (*(spx_int32_t*)ptr) = st->sampling_rate*SUBMODE(bits_per_frame)/st->frameSize;      else         (*(spx_int32_t*)ptr) = st->sampling_rate*(NB_SUBMODE_BITS+1)/st->frameSize;      break;   case SPEEX_SET_SAMPLING_RATE:      st->sampling_rate = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_SAMPLING_RATE:      (*(spx_int32_t*)ptr)=st->sampling_rate;      break;   case SPEEX_RESET_STATE:      {         int i;         st->bounded_pitch = 1;         st->first = 1;         for (i=0;i<st->lpcSize;i++)            st->old_lsp[i]=(M_PI*((float)(i+1)))/(st->lpcSize+1);         for (i=0;i<st->lpcSize;i++)            st->mem_sw[i]=st->mem_sw_whole[i]=st->mem_sp[i]=st->mem_exc[i]=0;         for (i=0;i<st->frameSize+st->max_pitch+1;i++)            st->excBuf[i]=st->swBuf[i]=0;         for (i=0;i<st->windowSize-st->frameSize;i++)            st->winBuf[i]=0;      }      break;   case SPEEX_SET_SUBMODE_ENCODING:      st->encode_submode = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_SUBMODE_ENCODING:      (*(spx_int32_t*)ptr) = st->encode_submode;      break;   case SPEEX_GET_LOOKAHEAD:      (*(spx_int32_t*)ptr)=(st->windowSize-st->frameSize);      break;   case SPEEX_SET_PLC_TUNING:      st->plc_tuning = (*(spx_int32_t*)ptr);      if (st->plc_tuning>100)         st->plc_tuning=100;      break;   case SPEEX_GET_PLC_TUNING:      (*(spx_int32_t*)ptr)=(st->plc_tuning);      break;   case SPEEX_SET_VBR_MAX_BITRATE:      st->vbr_max = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_VBR_MAX_BITRATE:      (*(spx_int32_t*)ptr) = st->vbr_max;      break;   case SPEEX_SET_HIGHPASS:      st->highpass_enabled = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_HIGHPASS:      (*(spx_int32_t*)ptr) = st->highpass_enabled;      break;   /* This is all internal stuff past this point */   case SPEEX_GET_PI_GAIN:      {         int i;         spx_word32_t *g = (spx_word32_t*)ptr;         for (i=0;i<st->nbSubframes;i++)            g[i]=st->pi_gain[i];      }      break;   case SPEEX_GET_EXC:      {         int i;         for (i=0;i<st->nbSubframes;i++)            ((spx_word16_t*)ptr)[i] = compute_rms16(st->exc+i*st->subframeSize, st->subframeSize);      }      break;   case SPEEX_GET_RELATIVE_QUALITY:      (*(float*)ptr)=st->relative_quality;      break;   case SPEEX_SET_INNOVATION_SAVE:      st->innov_rms_save = (spx_word16_t*)ptr;      break;   case SPEEX_SET_WIDEBAND:      st->isWideband = *((spx_int32_t*)ptr);      break;   case SPEEX_GET_STACK:      *((char**)ptr) = st->stack;      break;   default:      speex_warning_int("Unknown nb_ctl request: ", request);      return -1;   }   return 0;}int nb_decoder_ctl(void *state, int request, void *ptr){   DecState *st;   st=(DecState*)state;   switch(request)   {   case SPEEX_SET_LOW_MODE:   case SPEEX_SET_MODE:      st->submodeID = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_LOW_MODE:   case SPEEX_GET_MODE:      (*(spx_int32_t*)ptr) = st->submodeID;      break;   case SPEEX_SET_ENH:      st->lpc_enh_enabled = *((spx_int32_t*)ptr);      break;   case SPEEX_GET_ENH:      *((spx_int32_t*)ptr) = st->lpc_enh_enabled;      break;   case SPEEX_GET_FRAME_SIZE:      (*(spx_int32_t*)ptr) = st->frameSize;      break;   case SPEEX_GET_BITRATE:      if (st->submodes[st->submodeID])         (*(spx_int32_t*)ptr) = st->sampling_rate*SUBMODE(bits_per_frame)/st->frameSize;      else         (*(spx_int32_t*)ptr) = st->sampling_rate*(NB_SUBMODE_BITS+1)/st->frameSize;      break;   case SPEEX_SET_SAMPLING_RATE:      st->sampling_rate = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_SAMPLING_RATE:      (*(spx_int32_t*)ptr)=st->sampling_rate;      break;   case SPEEX_SET_HANDLER:      {         SpeexCallback *c = (SpeexCallback*)ptr;         st->speex_callbacks[c->callback_id].func=c->func;         st->speex_callbacks[c->callback_id].data=c->data;         st->speex_callbacks[c->callback_id].callback_id=c->callback_id;      }      break;   case SPEEX_SET_USER_HANDLER:      {         SpeexCallback *c = (SpeexCallback*)ptr;         st->user_callback.func=c->func;         st->user_callback.data=c->data;         st->user_callback.callback_id=c->callback_id;      }      break;   case SPEEX_RESET_STATE:      {         int i;         for (i=0;i<st->lpcSize;i++)            st->mem_sp[i]=0;         for (i=0;i<st->frameSize + st->max_pitch + 1;i++)            st->excBuf[i]=0;      }      break;   case SPEEX_SET_SUBMODE_ENCODING:      st->encode_submode = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_SUBMODE_ENCODING:      (*(spx_int32_t*)ptr) = st->encode_submode;      break;   case SPEEX_GET_LOOKAHEAD:      (*(spx_int32_t*)ptr)=st->subframeSize;      break;   case SPEEX_SET_HIGHPASS:      st->highpass_enabled = (*(spx_int32_t*)ptr);      break;   case SPEEX_GET_HIGHPASS:      (*(spx_int32_t*)ptr) = st->highpass_enabled;      break;   case SPEEX_GET_PI_GAIN:      {         int i;         spx_word32_t *g = (spx_word32_t*)ptr;         for (i=0;i<st->nbSubframes;i++)            g[i]=st->pi_gain[i];      }      break;   case SPEEX_GET_EXC:      {         int i;         for (i=0;i<st->nbSubframes;i++)            ((spx_word16_t*)ptr)[i] = compute_rms16(st->exc+i*st->subframeSize, st->subframeSize);      }      break;   case SPEEX_GET_DTX_STATUS:      *((spx_int32_t*)ptr) = st->dtx_enabled;      break;   case SPEEX_SET_INNOVATION_SAVE:      st->innov_save = (spx_word16_t*)ptr;      break;   case SPEEX_SET_WIDEBAND:      st->isWideband = *((spx_int32_t*)ptr);      break;   case SPEEX_GET_STACK:      *((char**)ptr) = st->stack;      break;   default:      speex_warning_int("Unknown nb_ctl request: ", request);      return -1;   }   return 0;}

⌨️ 快捷键说明

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