Lines Matching refs:st

400    SpeexPreprocessState *st = (SpeexPreprocessState *)speex_alloc(sizeof(SpeexPreprocessState));
401 st->frame_size = frame_size;
406 st->ps_size = st->frame_size;
409 if (st->ps_size & ~i)
411 st->ps_size &= ~i;
419 if (st->ps_size < 3*st->frame_size/4)
420 st->ps_size = st->ps_size * 3 / 2;
422 st->ps_size = st->frame_size;
425 N = st->ps_size;
426 N3 = 2*N - st->frame_size;
427 N4 = st->frame_size - N3;
429 st->sampling_rate = sampling_rate;
430 st->denoise_enabled = 1;
431 st->vad_enabled = 0;
432 st->dereverb_enabled = 0;
433 st->reverb_decay = 0;
434 st->reverb_level = 0;
435 st->noise_suppress = NOISE_SUPPRESS_DEFAULT;
436 st->echo_suppress = ECHO_SUPPRESS_DEFAULT;
437 st->echo_suppress_active = ECHO_SUPPRESS_ACTIVE_DEFAULT;
439 st->speech_prob_start = SPEECH_PROB_START_DEFAULT;
440 st->speech_prob_continue = SPEECH_PROB_CONTINUE_DEFAULT;
442 st->echo_state = NULL;
444 st->nbands = NB_BANDS;
445 M = st->nbands;
446 st->bank = filterbank_new(M, sampling_rate, N, 1);
448 st->frame = (spx_word16_t*)speex_alloc(2*N*sizeof(spx_word16_t));
449 st->window = (spx_word16_t*)speex_alloc(2*N*sizeof(spx_word16_t));
450 st->ft = (spx_word16_t*)speex_alloc(2*N*sizeof(spx_word16_t));
452 st->ps = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t));
453 st->noise = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t));
454 st->echo_noise = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t));
455 st->residual_echo = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t));
456 st->reverb_estimate = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t));
457 st->old_ps = (spx_word32_t*)speex_alloc((N+M)*sizeof(spx_word32_t));
458 st->prior = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t));
459 st->post = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t));
460 st->gain = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t));
461 st->gain2 = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t));
462 st->gain_floor = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t));
463 st->zeta = (spx_word16_t*)speex_alloc((N+M)*sizeof(spx_word16_t));
465 st->S = (spx_word32_t*)speex_alloc(N*sizeof(spx_word32_t));
466 st->Smin = (spx_word32_t*)speex_alloc(N*sizeof(spx_word32_t));
467 st->Stmp = (spx_word32_t*)speex_alloc(N*sizeof(spx_word32_t));
468 st->update_prob = (int*)speex_alloc(N*sizeof(int));
470 st->inbuf = (spx_word16_t*)speex_alloc(N3*sizeof(spx_word16_t));
471 st->outbuf = (spx_word16_t*)speex_alloc(N3*sizeof(spx_word16_t));
473 conj_window(st->window, 2*N3);
474 for (i=2*N3;i<2*st->ps_size;i++)
475 st->window[i]=Q15_ONE;
481 st->window[i+N3+N4]=st->window[i+N3];
482 st->window[i+N3]=1;
487 st->noise[i]=QCONST32(1.f,NOISE_SHIFT);
488 st->reverb_estimate[i]=0;
489 st->old_ps[i]=1;
490 st->gain[i]=Q15_ONE;
491 st->post[i]=SHL16(1, SNR_SHIFT);
492 st->prior[i]=SHL16(1, SNR_SHIFT);
496 st->update_prob[i] = 1;
499 st->inbuf[i]=0;
500 st->outbuf[i]=0;
503 st->agc_enabled = 0;
504 st->agc_level = 8000;
505 st->loudness_weight = (float*)speex_alloc(N*sizeof(float));
509 /*st->loudness_weight[i] = .5f*(1.f/(1.f+ff/8000.f))+1.f*exp(-.5f*(ff-3800.f)*(ff-3800.f)/9e5f);*/
510 st->loudness_weight[i] = .35f-.35f*ff/16000.f+.73f*exp(-.5f*(ff-3800)*(ff-3800)/9e5f);
511 if (st->loudness_weight[i]<.01f)
512 st->loudness_weight[i]=.01f;
513 st->loudness_weight[i] *= st->loudness_weight[i];
515 /*st->loudness = pow(AMP_SCALE*st->agc_level,LOUDNESS_EXP);*/
516 st->loudness = 1e-15;
517 st->agc_gain = 1;
518 st->max_gain = 30;
519 st->max_increase_step = exp(0.11513f * 12.*st->frame_size / st->sampling_rate);
520 st->max_decrease_step = exp(-0.11513f * 40.*st->frame_size / st->sampling_rate);
521 st->prev_loudness = 1;
522 st->init_max = 1;
524 st->was_speech = 0;
526 st->fft_lookup = spx_fft_init(2*N);
528 st->nb_adapt=0;
529 st->min_count=0;
530 return st;
533 EXPORT void speex_preprocess_state_destroy(SpeexPreprocessState *st)
535 speex_free(st->frame);
536 speex_free(st->ft);
537 speex_free(st->ps);
538 speex_free(st->gain2);
539 speex_free(st->gain_floor);
540 speex_free(st->window);
541 speex_free(st->noise);
542 speex_free(st->reverb_estimate);
543 speex_free(st->old_ps);
544 speex_free(st->gain);
545 speex_free(st->prior);
546 speex_free(st->post);
548 speex_free(st->loudness_weight);
550 speex_free(st->echo_noise);
551 speex_free(st->residual_echo);
553 speex_free(st->S);
554 speex_free(st->Smin);
555 speex_free(st->Stmp);
556 speex_free(st->update_prob);
557 speex_free(st->zeta);
559 speex_free(st->inbuf);
560 speex_free(st->outbuf);
562 spx_fft_destroy(st->fft_lookup);
563 filterbank_destroy(st->bank);
564 speex_free(st);
569 static void speex_compute_agc(SpeexPreprocessState *st, spx_word16_t Pframe, spx_word16_t *ft)
572 int N = st->ps_size;
579 loudness += 2.f*N*st->ps[i]* st->loudness_weight[i];
582 /*if (loudness < 2*pow(st->loudness, 1.0/LOUDNESS_EXP) &&
583 loudness*2 > pow(st->loudness, 1.0/LOUDNESS_EXP))*/
586 /*rate=2.0f*Pframe*Pframe/(1+st->nb_loudness_adapt);*/
588 st->loudness = (1-rate)*st->loudness + (rate)*pow(AMP_SCALE*loudness, LOUDNESS_EXP);
589 st->loudness_accum = (1-rate)*st->loudness_accum + rate;
590 if (st->init_max < st->max_gain && st->nb_adapt > 20)
591 st->init_max *= 1.f + .1f*Pframe*Pframe;
593 /*printf ("%f %f %f %f\n", Pframe, loudness, pow(st->loudness, 1.0f/LOUDNESS_EXP), st->loudness2);*/
595 target_gain = AMP_SCALE*st->agc_level*pow(st->loudness/(1e-4+st->loudness_accum), -1.0f/LOUDNESS_EXP);
597 if ((Pframe>.5 && st->nb_adapt > 20) || target_gain < st->agc_gain)
599 if (target_gain > st->max_increase_step*st->agc_gain)
600 target_gain = st->max_increase_step*st->agc_gain;
601 if (target_gain < st->max_decrease_step*st->agc_gain && loudness < 10*st->prev_loudness)
602 target_gain = st->max_decrease_step*st->agc_gain;
603 if (target_gain > st->max_gain)
604 target_gain = st->max_gain;
605 if (target_gain > st->init_max)
606 target_gain = st->init_max;
608 st->agc_gain = target_gain;
610 /*fprintf (stderr, "%f %f %f\n", loudness, (float)AMP_SCALE_1*pow(st->loudness, 1.0f/LOUDNESS_EXP), st->agc_gain);*/
613 ft[i] *= st->agc_gain;
614 st->prev_loudness = loudness;
618 static void preprocess_analysis(SpeexPreprocessState *st, spx_int16_t *x)
621 int N = st->ps_size;
622 int N3 = 2*N - st->frame_size;
623 int N4 = st->frame_size - N3;
624 spx_word32_t *ps=st->ps;
628 st->frame[i]=st->inbuf[i];
629 for (i=0;i<st->frame_size;i++)
630 st->frame[N3+i]=x[i];
634 st->inbuf[i]=x[N4+i];
638 st->frame[i] = MULT16_16_Q15(st->frame[i], st->window[i]);
644 max_val = MAX16(max_val, ABS16(st->frame[i]));
645 st->frame_shift = 14-spx_ilog2(EXTEND32(max_val));
647 st->frame[i] = SHL16(st->frame[i], st->frame_shift);
652 spx_fft(st->fft_lookup, st->frame, st->ft);
655 ps[0]=MULT16_16(st->ft[0],st->ft[0]);
657 ps[i]=MULT16_16(st->ft[2*i-1],st->ft[2*i-1]) + MULT16_16(st->ft[2*i],st->ft[2*i]);
659 st->ps[i] = PSHR32(st->ps[i], 2*st->frame_shift);
661 filterbank_compute_bank32(st->bank, ps, ps+N);
664 static void update_noise_prob(SpeexPreprocessState *st)
668 int N = st->ps_size;
671 st->S[i] = MULT16_32_Q15(QCONST16(.8f,15),st->S[i]) + MULT16_32_Q15(QCONST16(.05f,15),st->ps[i-1])
672 + MULT16_32_Q15(QCONST16(.1f,15),st->ps[i]) + MULT16_32_Q15(QCONST16(.05f,15),st->ps[i+1]);
673 st->S[0] = MULT16_32_Q15(QCONST16(.8f,15),st->S[0]) + MULT16_32_Q15(QCONST16(.2f,15),st->ps[0]);
674 st->S[N-1] = MULT16_32_Q15(QCONST16(.8f,15),st->S[N-1]) + MULT16_32_Q15(QCONST16(.2f,15),st->ps[N-1]);
676 if (st->nb_adapt==1)
679 st->Smin[i] = st->Stmp[i] = 0;
682 if (st->nb_adapt < 100)
684 else if (st->nb_adapt < 1000)
686 else if (st->nb_adapt < 10000)
690 if (st->min_count > min_range)
692 st->min_count = 0;
695 st->Smin[i] = MIN32(st->Stmp[i], st->S[i]);
696 st->Stmp[i] = st->S[i];
701 st->Smin[i] = MIN32(st->Smin[i], st->S[i]);
702 st->Stmp[i] = MIN32(st->Stmp[i], st->S[i]);
707 if (MULT16_32_Q15(QCONST16(.4f,15),st->S[i]) > st->Smin[i])
708 st->update_prob[i] = 1;
710 st->update_prob[i] = 0;
711 /*fprintf (stderr, "%f ", st->S[i]/st->Smin[i]);*/
712 /*fprintf (stderr, "%f ", st->update_prob[i]);*/
719 void speex_echo_get_residual(SpeexEchoState *st, spx_word32_t *Yout, int len);
721 EXPORT int speex_preprocess(SpeexPreprocessState *st, spx_int16_t *x, spx_int32_t *echo)
723 return speex_preprocess_run(st, x);
726 EXPORT int speex_preprocess_run(SpeexPreprocessState *st, spx_int16_t *x)
730 int N = st->ps_size;
731 int N3 = 2*N - st->frame_size;
732 int N4 = st->frame_size - N3;
733 spx_word32_t *ps=st->ps;
739 st->nb_adapt++;
740 if (st->nb_adapt>20000)
741 st->nb_adapt = 20000;
742 st->min_count++;
744 beta = MAX16(QCONST16(.03,15),DIV32_16(Q15_ONE,st->nb_adapt));
746 M = st->nbands;
748 if (st->echo_state)
750 speex_echo_get_residual(st->echo_state, st->residual_echo, N);
753 if (!(st->residual_echo[0] >=0 && st->residual_echo[0]<N*1e9f))
756 st->residual_echo[i] = 0;
760 st->echo_noise[i] = MAX32(MULT16_32_Q15(QCONST16(.6f,15),st->echo_noise[i]), st->residual_echo[i]);
761 filterbank_compute_bank32(st->bank, st->echo_noise, st->echo_noise+N);
764 st->echo_noise[i] = 0;
766 preprocess_analysis(st, x);
768 update_noise_prob(st);
771 /*if (st->nb_adapt<10)
774 st->update_prob[i] = 0;
781 if (!st->update_prob[i] || st->ps[i] < PSHR32(st->noise[i], NOISE_SHIFT))
782 st->noise[i] = MAX32(EXTEND32(0),MULT16_32_Q15(beta_1,st->noise[i]) + MULT16_32_Q15(beta,SHL32(st->ps[i],NOISE_SHIFT)));
784 filterbank_compute_bank32(st->bank, st->noise, st->noise+N);
787 if (st->nb_adapt==1)
789 st->old_ps[i] = ps[i];
797 spx_word32_t tot_noise = ADD32(ADD32(ADD32(EXTEND32(1), PSHR32(st->noise[i],NOISE_SHIFT)) , st->echo_noise[i]) , st->reverb_estimate[i]);
800 st->post[i] = SUB16(DIV32_16_Q8(ps[i],tot_noise), QCONST16(1.f,SNR_SHIFT));
801 st->post[i]=MIN16(st->post[i], QCONST16(100.f,SNR_SHIFT));
804 gamma = QCONST16(.1f,15)+MULT16_16_Q15(QCONST16(.89f,15),SQR16_Q15(DIV32_16_Q15(st->old_ps[i],ADD32(st->old_ps[i],tot_noise))));
807 st->prior[i] = EXTRACT16(PSHR32(ADD32(MULT16_16(gamma,MAX16(0,st->post[i])), MULT16_16(Q15_ONE-gamma,DIV32_16_Q8(st->old_ps[i],tot_noise))), 15));
808 st->prior[i]=MIN16(st->prior[i], QCONST16(100.f,SNR_SHIFT));
811 /*print_vec(st->post, N+M, "");*/
814 st->zeta[0] = PSHR32(ADD32(MULT16_16(QCONST16(.7f,15),st->zeta[0]), MULT16_16(QCONST16(.3f,15),st->prior[0])),15);
816 st->zeta[i] = PSHR32(ADD32(ADD32(ADD32(MULT16_16(QCONST16(.7f,15),st->zeta[i]), MULT16_16(QCONST16(.15f,15),st->prior[i])),
817 MULT16_16(QCONST16(.075f,15),st->prior[i-1])), MULT16_16(QCONST16(.075f,15),st->prior[i+1])),15);
819 st->zeta[i] = PSHR32(ADD32(MULT16_16(QCONST16(.7f,15),st->zeta[i]), MULT16_16(QCONST16(.3f,15),st->prior[i])),15);
824 Zframe = ADD32(Zframe, EXTEND32(st->zeta[i]));
825 Pframe = QCONST16(.1f,15)+MULT16_16_Q15(QCONST16(.899f,15),qcurve(DIV32_16(Zframe,st->nbands)));
827 effective_echo_suppress = EXTRACT16(PSHR32(ADD32(MULT16_16(SUB16(Q15_ONE,Pframe), st->echo_suppress), MULT16_16(Pframe, st->echo_suppress_active)),15));
829 compute_gain_floor(st->noise_suppress, effective_echo_suppress, st->noise+N, st->echo_noise+N, st->gain_floor+N, M);
850 prior_ratio = PDIV32_16(SHL32(EXTEND32(st->prior[i]), 15), ADD16(st->prior[i], SHL32(1,SNR_SHIFT)));
851 theta = MULT16_32_P15(prior_ratio, QCONST32(1.f,EXPIN_SHIFT)+SHL32(EXTEND32(st->post[i]),EXPIN_SHIFT-SNR_SHIFT));
855 st->gain[i] = EXTRACT16(MIN32(Q15_ONE, MULT16_32_Q15(prior_ratio, MM)));
857 st->old_ps[i] = MULT16_32_P15(QCONST16(.2f,15),st->old_ps[i]) + MULT16_32_P15(MULT16_16_P15(QCONST16(.8f,15),SQR16_Q15(st->gain[i])),ps[i]);
859 P1 = QCONST16(.199f,15)+MULT16_16_Q15(QCONST16(.8f,15),qcurve (st->zeta[i]));
863 /*Q8*/tmp = MULT16_16_Q15((SHL32(1,SNR_SHIFT)+st->prior[i]),EXTRACT16(MIN32(Q15ONE,SHR32(spx_exp(-EXTRACT16(theta)),1))));
866 st->gain2[i]=DIV32_16(SHL32(EXTEND32(32767),SNR_SHIFT), ADD16(256,tmp));
868 st->gain2[i]=1/(1.f + (q/(1.f-q))*(1+st->prior[i])*exp(-theta));
872 filterbank_compute_psd16(st->bank,st->gain2+N, st->gain2);
873 filterbank_compute_psd16(st->bank,st->gain+N, st->gain);
878 filterbank_compute_psd16(st->bank,st->gain_floor+N, st->gain_floor);
891 prior_ratio = PDIV32_16(SHL32(EXTEND32(st->prior[i]), 15), ADD16(st->prior[i], SHL32(1,SNR_SHIFT)));
892 theta = MULT16_32_P15(prior_ratio, QCONST32(1.f,EXPIN_SHIFT)+SHL32(EXTEND32(st->post[i]),EXPIN_SHIFT-SNR_SHIFT));
899 p = st->gain2[i];
902 if (MULT16_16_Q15(QCONST16(.333f,15),g) > st->gain[i])
903 g = MULT16_16(3,st->gain[i]);
904 st->gain[i] = g;
907 st->old_ps[i] = MULT16_32_P15(QCONST16(.2f,15),st->old_ps[i]) + MULT16_32_P15(MULT16_16_P15(QCONST16(.8f,15),SQR16_Q15(st->gain[i])),ps[i]);
910 if (st->gain[i] < st->gain_floor[i])
911 st->gain[i] = st->gain_floor[i];
914 /*st->reverb_estimate[i] = st->reverb_decay*st->reverb_estimate[i] + st->reverb_decay*st->reverb_level*st->gain[i]*st->gain[i]*st->ps[i];*/
918 tmp = MULT16_16_P15(p,spx_sqrt(SHL32(EXTEND32(st->gain[i]),15))) + MULT16_16_P15(SUB16(Q15_ONE,p),spx_sqrt(SHL32(EXTEND32(st->gain_floor[i]),15)));
919 st->gain2[i]=SQR16_Q15(tmp);
922 /*st->gain2[i] = pow(st->gain[i], p) * pow(st->gain_floor[i],1.f-p);*/
928 spx_word16_t p = st->gain2[i];
929 st->gain[i] = MAX16(st->gain[i], st->gain_floor[i]);
930 tmp = MULT16_16_P15(p,spx_sqrt(SHL32(EXTEND32(st->gain[i]),15))) + MULT16_16_P15(SUB16(Q15_ONE,p),spx_sqrt(SHL32(EXTEND32(st->gain_floor[i]),15)));
931 st->gain2[i]=SQR16_Q15(tmp);
933 filterbank_compute_psd16(st->bank,st->gain2+N, st->gain2);
937 if (!st->denoise_enabled)
940 st->gain2[i]=Q15_ONE;
946 st->ft[2*i-1] = MULT16_16_P15(st->gain2[i],st->ft[2*i-1]);
947 st->ft[2*i] = MULT16_16_P15(st->gain2[i],st->ft[2*i]);
949 st->ft[0] = MULT16_16_P15(st->gain2[0],st->ft[0]);
950 st->ft[2*N-1] = MULT16_16_P15(st->gain2[N-1],st->ft[2*N-1]);
954 if (st->agc_enabled)
955 speex_compute_agc(st, Pframe, st->ft);
959 spx_ifft(st->fft_lookup, st->ft, st->frame);
962 st->frame[i] = PSHR16(st->frame[i], st->frame_shift);
966 if (st->agc_enabled)
970 if (fabs(st->frame[i])>max_sample)
971 max_sample = fabs(st->frame[i]);
976 st->frame[i] *= damp;
983 st->frame[i] = MULT16_16_Q15(st->frame[i], st->window[i]);
987 x[i] = st->outbuf[i] + st->frame[i];
989 x[N3+i] = st->frame[N3+i];
993 st->outbuf[i] = st->frame[st->frame_size+i];
996 st->speech_prob = Pframe;
997 if (st->vad_enabled)
999 if (st->speech_prob > st->speech_prob_start || (st->was_speech && st->speech_prob > st->speech_prob_continue))
1001 st->was_speech=1;
1005 st->was_speech=0;
1013 EXPORT void speex_preprocess_estimate_update(SpeexPreprocessState *st, spx_int16_t *x)
1016 int N = st->ps_size;
1017 int N3 = 2*N - st->frame_size;
1019 spx_word32_t *ps=st->ps;
1021 M = st->nbands;
1022 st->min_count++;
1024 preprocess_analysis(st, x);
1026 update_noise_prob(st);
1030 if (!st->update_prob[i] || st->ps[i] < PSHR32(st->noise[i],NOISE_SHIFT))
1032 st->noise[i] = MULT16_32_Q15(QCONST16(.95f,15),st->noise[i]) + MULT16_32_Q15(QCONST16(.05f,15),SHL32(st->ps[i],NOISE_SHIFT));
1037 st->outbuf[i] = MULT16_16_Q15(x[st->frame_size-N3+i],st->window[st->frame_size+i]);
1041 st->old_ps[i] = ps[i];
1044 st->reverb_estimate[i] = MULT16_32_Q15(st->reverb_decay, st->reverb_estimate[i]);
1051 SpeexPreprocessState *st;
1052 st=(SpeexPreprocessState*)state;
1056 st->denoise_enabled = (*(spx_int32_t*)ptr);
1059 (*(spx_int32_t*)ptr) = st->denoise_enabled;
1063 st->agc_enabled = (*(spx_int32_t*)ptr);
1066 (*(spx_int32_t*)ptr) = st->agc_enabled;
1070 st->agc_level = (*(float*)ptr);
1071 if (st->agc_level<1)
1072 st->agc_level=1;
1073 if (st->agc_level>32768)
1074 st->agc_level=32768;
1077 (*(float*)ptr) = st->agc_level;
1081 st->max_increase_step = exp(0.11513f * (*(spx_int32_t*)ptr)*st->frame_size / st->sampling_rate);
1084 (*(spx_int32_t*)ptr) = floor(.5+8.6858*log(st->max_increase_step)*st->sampling_rate/st->frame_size);
1087 st->max_decrease_step = exp(0.11513f * (*(spx_int32_t*)ptr)*st->frame_size / st->sampling_rate);
1090 (*(spx_int32_t*)ptr) = floor(.5+8.6858*log(st->max_decrease_step)*st->sampling_rate/st->frame_size);
1093 st->max_gain = exp(0.11513f * (*(spx_int32_t*)ptr));
1096 (*(spx_int32_t*)ptr) = floor(.5+8.6858*log(st->max_gain));
1102 st->vad_enabled = (*(spx_int32_t*)ptr);
1105 (*(spx_int32_t*)ptr) = st->vad_enabled;
1109 st->dereverb_enabled = (*(spx_int32_t*)ptr);
1110 for (i=0;i<st->ps_size;i++)
1111 st->reverb_estimate[i]=0;
1114 (*(spx_int32_t*)ptr) = st->dereverb_enabled;
1119 /*st->reverb_level = (*(float*)ptr);*/
1123 /*(*(float*)ptr) = st->reverb_level;*/
1128 /*st->reverb_decay = (*(float*)ptr);*/
1132 /*(*(float*)ptr) = st->reverb_decay;*/
1137 st->speech_prob_start = DIV32_16(MULT16_16(Q15ONE,*(spx_int32_t*)ptr), 100);
1140 (*(spx_int32_t*)ptr) = MULT16_16_Q15(st->speech_prob_start, 100);
1145 st->speech_prob_continue = DIV32_16(MULT16_16(Q15ONE,*(spx_int32_t*)ptr), 100);
1148 (*(spx_int32_t*)ptr) = MULT16_16_Q15(st->speech_prob_continue, 100);
1152 st->noise_suppress = -ABS(*(spx_int32_t*)ptr);
1155 (*(spx_int32_t*)ptr) = st->noise_suppress;
1158 st->echo_suppress = -ABS(*(spx_int32_t*)ptr);
1161 (*(spx_int32_t*)ptr) = st->echo_suppress;
1164 st->echo_suppress_active = -ABS(*(spx_int32_t*)ptr);
1167 (*(spx_int32_t*)ptr) = st->echo_suppress_active;
1170 st->echo_state = (SpeexEchoState*)ptr;
1173 (*(SpeexEchoState**)ptr) = (SpeexEchoState*)st->echo_state;
1177 (*(spx_int32_t*)ptr) = pow(st->loudness, 1.0/LOUDNESS_EXP);
1180 (*(spx_int32_t*)ptr) = floor(.5+8.6858*log(st->agc_gain));
1185 (*(spx_int32_t*)ptr) = st->ps_size;
1188 for(i=0;i<st->ps_size;i++)
1189 ((spx_int32_t *)ptr)[i] = (spx_int32_t) st->ps[i];
1192 for(i=0;i<st->ps_size;i++)
1193 ((spx_int32_t *)ptr)[i] = (spx_int32_t) PSHR32(st->noise[i], NOISE_SHIFT);
1196 (*(spx_int32_t*)ptr) = MULT16_16_Q15(st->speech_prob, 100);
1200 st->agc_level = (*(spx_int32_t*)ptr);
1201 if (st->agc_level<1)
1202 st->agc_level=1;
1203 if (st->agc_level>32768)
1204 st->agc_level=32768;
1207 (*(spx_int32_t*)ptr) = st->agc_level;