[Speex-dev] Noise :-(
Jean-Marc Valin
Jean-Marc.Valin at USherbrooke.ca
Thu Sep 22 04:56:54 PDT 2005
Hi Michele,
Please ask a more specific question. I don't think anyone here will go
through a piece of code with Italian comments where half the stuff is
missing anyway (in other files). BTW, you can start from
libspeex/testdenoise.c
Jean-Marc
Le jeudi 22 septembre 2005 à 09:58 +0200, Michele "O-Zone" Pinassi a
écrit :
> Hi all,
>
> i use speex preprocessor features in this way:
>
> ===================================
>
> #define NN 160 /* 20msec di audio */
>
> ...
>
> int tbc=0,c,d,ret;
>
> spx_int16_t TEMP_Buffer[NN];
>
> char DLECODE;
>
> /* Inizializza il preprocessore Speex se non inizializzato */
>
> if(Modem->speex_pp_state == NULL) {
>
> Modem->speex_pp_state =
> speex_preprocess_state_init(NN,AUDIO_SAMPLERATE);
>
> }
>
> /* Modifica i parametri di Speex */
>
> c = Modem->denoise;
>
> speex_preprocess_ctl(Modem->speex_pp_state,
> SPEEX_PREPROCESS_SET_DENOISE, &c);
>
> c = Modem->agc;
>
> speex_preprocess_ctl(Modem->speex_pp_state, SPEEX_PREPROCESS_SET_AGC,
> &c);
>
> if(Modem->agc) {
>
> float t;
>
> t = Modem->agc_level * 3276;
>
> speex_preprocess_ctl(Modem->speex_pp_state,
> SPEEX_PREPROCESS_SET_AGC_LEVEL, &t);
>
> }
>
> c = Modem->vox;
>
> speex_preprocess_ctl(Modem->speex_pp_state, SPEEX_PREPROCESS_SET_VAD,
> &c);
>
> /* vai */
>
> for(c=0;c<Modem->buffer_size;c++) {
>
> if((Modem->buffer[c] == 0x10)&&(Modem->buffer[c+1] == 0x10)) { /* DLE
> */
>
> c+=2;
>
> DLECODE=Modem->buffer[c];
>
> LOG_Write(LOG_DEBUG,"[%s:%d] <DLE> %c on Line %d
> \n",__FILE__,__LINE__,DLECODE,Modem->id);
>
> } else {
>
> /* I dati audio vengono convertiti da 8 bit unsigned a 16 bit signed
> */
>
> TEMP_Buffer[tbc] = (spx_int16_t)((int)Modem->buffer[c] << 8) - 32640;
>
> if((Modem->agc == 0)&&(Modem->agc_level != 5)) { /* Se AGC
> disabilitato, usa l'agc_level come GAIN (5 == 0) */
>
> if(Modem->agc_level < 5) { /* Attenua */
>
> TEMP_Buffer[tbc] = TEMP_Buffer[tbc] / ( 5 - Modem->agc_level);
>
> } else {
>
> TEMP_Buffer[tbc] = TEMP_Buffer[tbc] * ((Modem->agc_level - 5) + 1);
>
> }
>
> }
>
> tbc++;
>
> if((tbc > NN)||(c == Modem->buffer_size)) {
>
> ret = speex_preprocess(Modem->speex_pp_state, TEMP_Buffer, NULL);
>
> if(ret > 0) {
>
> Modem->trigger++;
>
> } else if(Modem->trigger > 0) {
>
> Modem->trigger--;
>
> }
>
> if(Modem->is_onair) {
>
> Modem->trigger = Modem->trigger_high;
>
> /* Se siamo ON AIR, colleziona i dati audio VALIDI in un buffer
> separato */
>
> for(d=0;d<tbc;d++) {
>
> Modem->audiobuffer[Modem->audio_count] = TEMP_Buffer[d];
>
> Modem->audio_count++;
>
> }
>
> }
>
> tbc = 0;
>
> bzero(&TEMP_Buffer,NN);
>
> }
>
> ===============================================
>
> As you can image i use speex to clean and elaborate audio from a voice
> modem. All work correctly BUT i've a ugly "noise" in the output sound
> data. There's some hints that i've missed ?
>
> Thanks ! Oz
>
> --
>
> ----
>
> O-Zone ! No (C) 2005
>
> WEB @ http://www.zerozone.it
>
> HOBBY @ http://peggy.altervista.org
>
> Call me with FWD: 692329
>
> _______________________________________________
> Speex-dev mailing list
> Speex-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/speex-dev
--
Jean-Marc Valin <Jean-Marc.Valin at USherbrooke.ca>
Université de Sherbrooke
More information about the Speex-dev
mailing list