internal void Reset() { prev_gain_Q16 = 0; Arrays.MemSetInt(exc_Q14, 0, SilkConstants.MAX_FRAME_LENGTH); Arrays.MemSetInt(sLPC_Q14_buf, 0, SilkConstants.MAX_LPC_ORDER); Arrays.MemSetShort(outBuf, 0, SilkConstants.MAX_FRAME_LENGTH + 2 * SilkConstants.MAX_SUB_FRAME_LENGTH); lagPrev = 0; LastGainIndex = 0; fs_kHz = 0; fs_API_hz = 0; nb_subfr = 0; frame_length = 0; subfr_length = 0; ltp_mem_length = 0; LPC_order = 0; Arrays.MemSetShort(prevNLSF_Q15, 0, SilkConstants.MAX_LPC_ORDER); first_frame_after_reset = 0; pitch_lag_low_bits_iCDF = null; pitch_contour_iCDF = null; nFramesDecoded = 0; nFramesPerPacket = 0; ec_prevSignalType = 0; ec_prevLagIndex = 0; Arrays.MemSetInt(VAD_flags, 0, SilkConstants.MAX_FRAMES_PER_PACKET); LBRR_flag = 0; Arrays.MemSetInt(LBRR_flags, 0, SilkConstants.MAX_FRAMES_PER_PACKET); resampler_state.Reset(); psNLSF_CB = null; indices.Reset(); sCNG.Reset(); lossCnt = 0; prevSignalType = 0; sPLC.Reset(); }
/* Set decoder sampling rate */ internal int silk_decoder_set_fs( int fs_kHz, /* I Sampling frequency (kHz) */ int fs_API_Hz /* I API Sampling frequency (Hz) */ ) { int frame_length, ret = 0; Inlines.OpusAssert(fs_kHz == 8 || fs_kHz == 12 || fs_kHz == 16); Inlines.OpusAssert(this.nb_subfr == SilkConstants.MAX_NB_SUBFR || this.nb_subfr == SilkConstants.MAX_NB_SUBFR / 2); /* New (sub)frame length */ this.subfr_length = Inlines.silk_SMULBB(SilkConstants.SUB_FRAME_LENGTH_MS, fs_kHz); frame_length = Inlines.silk_SMULBB(this.nb_subfr, this.subfr_length); /* Initialize resampler when switching internal or external sampling frequency */ if (this.fs_kHz != fs_kHz || this.fs_API_hz != fs_API_Hz) { /* Initialize the resampler for dec_API.c preparing resampling from fs_kHz to API_fs_Hz */ ret += Resampler.silk_resampler_init(this.resampler_state, Inlines.silk_SMULBB(fs_kHz, 1000), fs_API_Hz, 0); this.fs_API_hz = fs_API_Hz; } if (this.fs_kHz != fs_kHz || frame_length != this.frame_length) { if (fs_kHz == 8) { if (this.nb_subfr == SilkConstants.MAX_NB_SUBFR) { this.pitch_contour_iCDF = Tables.silk_pitch_contour_NB_iCDF; } else { this.pitch_contour_iCDF = Tables.silk_pitch_contour_10_ms_NB_iCDF; } } else { if (this.nb_subfr == SilkConstants.MAX_NB_SUBFR) { this.pitch_contour_iCDF = Tables.silk_pitch_contour_iCDF; } else { this.pitch_contour_iCDF = Tables.silk_pitch_contour_10_ms_iCDF; } } if (this.fs_kHz != fs_kHz) { this.ltp_mem_length = Inlines.silk_SMULBB(SilkConstants.LTP_MEM_LENGTH_MS, fs_kHz); if (fs_kHz == 8 || fs_kHz == 12) { this.LPC_order = SilkConstants.MIN_LPC_ORDER; this.psNLSF_CB = Tables.silk_NLSF_CB_NB_MB; } else { this.LPC_order = SilkConstants.MAX_LPC_ORDER; this.psNLSF_CB = Tables.silk_NLSF_CB_WB; } if (fs_kHz == 16) { this.pitch_lag_low_bits_iCDF = Tables.silk_uniform8_iCDF; } else if (fs_kHz == 12) { this.pitch_lag_low_bits_iCDF = Tables.silk_uniform6_iCDF; } else if (fs_kHz == 8) { this.pitch_lag_low_bits_iCDF = Tables.silk_uniform4_iCDF; } else { /* unsupported sampling rate */ Inlines.OpusAssert(false); } this.first_frame_after_reset = 1; this.lagPrev = 100; this.LastGainIndex = 10; this.prevSignalType = SilkConstants.TYPE_NO_VOICE_ACTIVITY; Arrays.MemSetShort(this.outBuf, 0, SilkConstants.MAX_FRAME_LENGTH + 2 * SilkConstants.MAX_SUB_FRAME_LENGTH); Arrays.MemSetInt(this.sLPC_Q14_buf, 0, SilkConstants.MAX_LPC_ORDER); } this.fs_kHz = fs_kHz; this.frame_length = frame_length; } /* Check that settings are valid */ Inlines.OpusAssert(this.frame_length > 0 && this.frame_length <= SilkConstants.MAX_FRAME_LENGTH); return(ret); }