<html><head><meta name="qrichtext" content="1" /></head><body style="font-size:12pt;font-family:Arial">
<p>Hi all,</p>
<p>i use speex preprocessor features in this way:</p>
<p></p>
<p>===================================</p>
<p>#define NN 160 /* 20msec di audio */</p>
<p>...</p>
<p>    int         tbc=0,c,d,ret;</p>
<p>    spx_int16_t TEMP_Buffer[NN];</p>
<p>    char DLECODE;</p>
<p>    /* Inizializza il preprocessore Speex se non inizializzato */</p>
<p>    if(Modem-&gt;speex_pp_state == NULL) {</p>
<p>        Modem-&gt;speex_pp_state = speex_preprocess_state_init(NN,AUDIO_SAMPLERATE);</p>
<p>    }</p>
<p>    /* Modifica i parametri di Speex */</p>
<p>    c = Modem-&gt;denoise;</p>
<p>    speex_preprocess_ctl(Modem-&gt;speex_pp_state, SPEEX_PREPROCESS_SET_DENOISE, &amp;c);</p>
<p>    c = Modem-&gt;agc;</p>
<p>    speex_preprocess_ctl(Modem-&gt;speex_pp_state, SPEEX_PREPROCESS_SET_AGC, &amp;c);</p>
<p>    if(Modem-&gt;agc) {</p>
<p>        float t;</p>
<p>        t = Modem-&gt;agc_level * 3276;</p>
<p>        speex_preprocess_ctl(Modem-&gt;speex_pp_state, SPEEX_PREPROCESS_SET_AGC_LEVEL, &amp;t);</p>
<p>    }</p>
<p>    c = Modem-&gt;vox;</p>
<p>    speex_preprocess_ctl(Modem-&gt;speex_pp_state, SPEEX_PREPROCESS_SET_VAD, &amp;c); </p>
<p>    /* vai */</p>
<p>    for(c=0;c&lt;Modem-&gt;buffer_size;c++) {</p>
<p>        if((Modem-&gt;buffer[c] == 0x10)&amp;&amp;(Modem-&gt;buffer[c+1] == 0x10)) { /* DLE */</p>
<p>            c+=2;</p>
<p>            DLECODE=Modem-&gt;buffer[c];</p>
<p>                LOG_Write(LOG_DEBUG,&quot;[%s:%d] &lt;DLE&gt; %c on Line %d\n&quot;,__FILE__,__LINE__,DLECODE,Modem-&gt;id);</p>
<p>        } else {</p>
<p>            /* I dati audio vengono convertiti da 8 bit unsigned a 16 bit signed */</p>
<p>            TEMP_Buffer[tbc] = (spx_int16_t)((int)Modem-&gt;buffer[c] &lt;&lt; 8) - 32640; </p>
<p>            if((Modem-&gt;agc == 0)&amp;&amp;(Modem-&gt;agc_level != 5)) { /* Se AGC disabilitato, usa l'agc_level come GAIN (5 == 0) */</p>
<p>                if(Modem-&gt;agc_level &lt; 5) { /* Attenua */</p>
<p>                    TEMP_Buffer[tbc] = TEMP_Buffer[tbc] / ( 5 - Modem-&gt;agc_level);</p>
<p>                } else {</p>
<p>                    TEMP_Buffer[tbc] = TEMP_Buffer[tbc] * ((Modem-&gt;agc_level - 5) + 1);                </p>
<p>                }                    </p>
<p>            }            </p>
<p>            tbc++;</p>
<p>            if((tbc &gt; NN)||(c == Modem-&gt;buffer_size)) {</p>
<p>                    ret = speex_preprocess(Modem-&gt;speex_pp_state, TEMP_Buffer, NULL); </p>
<p>                if(ret &gt; 0) {</p>
<p>                    Modem-&gt;trigger++;</p>
<p>                } else if(Modem-&gt;trigger &gt; 0) {</p>
<p>                    Modem-&gt;trigger--;</p>
<p>                }</p>
<p>                if(Modem-&gt;is_onair) {</p>
<p>                    Modem-&gt;trigger = Modem-&gt;trigger_high;</p>
<p>                    /* Se siamo ON AIR, colleziona i dati audio VALIDI in un buffer separato */</p>
<p>                    for(d=0;d&lt;tbc;d++) {</p>
<p>                        Modem-&gt;audiobuffer[Modem-&gt;audio_count] = TEMP_Buffer[d];</p>
<p>                        Modem-&gt;audio_count++; </p>
<p>                    } </p>
<p>                }</p>
<p>                tbc = 0;</p>
<p>                bzero(&amp;TEMP_Buffer,NN);</p>
<p>            } </p>
<p>===============================================</p>
<p></p>
<p>As you can image i use speex to clean and elaborate audio from a voice modem. All work correctly BUT i've a ugly &quot;noise&quot; in the output sound data. There's some hints that i've missed ?</p>
<p></p>
<p>Thanks ! Oz</p>
<p></p>
<p>-- </p>
<p>----</p>
<p>O-Zone ! No (C) 2005</p>
<p>WEB @ http://www.zerozone.it</p>
<p>HOBBY @ http://peggy.altervista.org</p>
<p>Call me with FWD: 692329</p>
<p></p>
</body></html>