diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2017-09-14 23:01:11 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2017-09-14 23:01:11 +0300 |
commit | fa3d9817127a18a0c18e431be402eec85c4d8e6f (patch) | |
tree | a7b25d68245e2820ac384740d02f3c129f536116 | |
parent | c0a49cea32898c4805a7a94c96905f494a2aa03f (diff) |
features #12
-rw-r--r-- | src/denoise.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/denoise.c b/src/denoise.c index cb545b6..03422d3 100644 --- a/src/denoise.c +++ b/src/denoise.c @@ -567,7 +567,7 @@ int main(int argc, char **argv) { noise_gain = pow(10., (-30+(rand()%50))/20.); if (rand()%10==0) noise_gain = 0; noise_gain *= speech_gain; - if (rand()%10==0) speech_gain = 0; + if (rand()%4==0) speech_gain = 0; gain_change_count = 0; rand_resp(a_noise, b_noise); rand_resp(a_sig, b_sig); @@ -579,21 +579,30 @@ int main(int argc, char **argv) { } } } - fread(tmp, sizeof(short), FRAME_SIZE, f1); - if (feof(f1)) break; - for (i=0;i<FRAME_SIZE;i++) x[i] = speech_gain*tmp[i]; - fread(tmp, sizeof(short), FRAME_SIZE, f2); - if (feof(f2)) break; - for (i=0;i<FRAME_SIZE;i++) n[i] = noise_gain*tmp[i]; + if (speech_gain != 0) { + fread(tmp, sizeof(short), FRAME_SIZE, f1); + if (feof(f1)) break; + for (i=0;i<FRAME_SIZE;i++) x[i] = speech_gain*tmp[i]; + for (i=0;i<FRAME_SIZE;i++) E += tmp[i]*(float)tmp[i]; + } else { + for (i=0;i<FRAME_SIZE;i++) x[i] = 0; + E = 0; + } + if (noise_gain!=0) { + fread(tmp, sizeof(short), FRAME_SIZE, f2); + if (feof(f2)) break; + for (i=0;i<FRAME_SIZE;i++) n[i] = noise_gain*tmp[i]; + } else { + for (i=0;i<FRAME_SIZE;i++) n[i] = 0; + } biquad(x, mem_hp_x, x, b_hp, a_hp, FRAME_SIZE); biquad(x, mem_resp_x, x, b_sig, a_sig, FRAME_SIZE); biquad(n, mem_hp_n, n, b_hp, a_hp, FRAME_SIZE); biquad(n, mem_resp_n, n, b_noise, a_noise, FRAME_SIZE); for (i=0;i<FRAME_SIZE;i++) xn[i] = x[i] + n[i]; - for (i=0;i<FRAME_SIZE;i++) E += x[i]*(float)x[i]; - if (E > 1e9f*speech_gain*speech_gain) { + if (E > 1e9f) { vad_cnt=0; - } else if (E > 1e8f*speech_gain*speech_gain) { + } else if (E > 1e8f) { vad_cnt -= 5; if (vad_cnt < 0) vad_cnt = 0; } else { @@ -611,9 +620,10 @@ int main(int argc, char **argv) { pitch_filter(X, P, Ex, Ep, Exp, g); //printf("%f %d\n", noisy->last_gain, noisy->last_period); for (i=0;i<NB_BANDS;i++) { - g[i] = sqrt((Ey[i]+1e-2)/(Ex[i]+1e-2)); + g[i] = sqrt((Ey[i]+1e-3)/(Ex[i]+1e-3)); if (g[i] > 1) g[i] = 1; if (silence || i > band_lp) g[i] = -1; + if (Ey[i] < 3e-3 && Ex[i] < 3e-3) g[i] = -1; } count++; #if 0 |