Dnoise specific flags:
(no flag) input soundfile to be denoised
-i fname input reference noise soundfile
-o fname output soundfile
-N fnum # of bandpass filters (default: 1024)
-w fovlp filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M
-M awlen analysis window length (default: N-1 unless -w is specified)
-L swlen synthesis window length (default: M)
-D dfac decimation factor (default: M/8)
-b btim begin time in noise reference soundfile (default: 0)
-B smpst starting sample in noise reference soundfile (default: 0)
-e etim end time in noise reference soundfile (default: end of file)
-E smpend final sample in noise reference soundfile (default: end of file)
-t thr threshold above noise reference in dB (default: 30)
-S gfact sharpness of noise-gate turnoff, range: 1 to 5 (default: 1)
-n numfrm number of FFT frames to average over (default: 5)
-m mingain minimum gain of noise-gate when off in dB (default: -40)
Soundfile format options:
-A AIFF format output
-W WAV format output
-J IRCAM format output
-h skip soundfile header (not valid for AIFF/WAV output)
-8 8-bit unsigned char sound samples
-c 8-bit signed_char sound samples
-a alaw sound samples
-u ulaw sound samples
-s short_int sound samples
-l long_int sound samples
-f float sound samples. Floats also supported for WAV files. (New in Csound 3.47.)
Additional options:
-R verbose - print status info
-H [N] print a heartbeat character at each soundfile write.
-- fname output to log file fname
-V verbose - print status info
Note | |
---|---|
DNOISE also looks at the environment variable SFOUTYP to determine soundfile output format. The -i flag is used for a reference noise file (normally created from a short section of the denoised file, where only noise is audible). The input soundfile to be denoised can be given anywhere on the command line, without a flag. |
This is a noise reduction scheme using frequency-domain noise-gating. This should work best in the case of high signal-to-noise with hiss-type noise.
The algorithm is that suggested by Moorer & Berger in “Linear-Phase Bandsplitting: Theory and Applications” presented at the 76th Convention 1984 October 8-11 New York of the Audio Engineering Society (preprint #2132) except that it uses the Weighted Overlap-Add formulation for short-time Fourier analysis-synthesis in place of the recursive formulation suggested by Moorer & Berger. The gain in each frequency bin is computed independently according to
gain = g0 + (1-g0) * [avg / (avg + th*th*nref)] ˆ sh
where avg and nref are the mean squared signal and noise respectively for the bin in question. (This is slightly different than in Moorer & Berger.)
The critical parameters th and g0 are specified in dB and internally converted to decimal values. The nref values are computed at the start of the program on the basis of a noise_soundfile (specified in the command line) which contains noise without signal.
The avg values are computed over a rectangular window of m FFT frames looking both ahead and behind the current time. This corresponds to a temporal extent of m*D/R (which is typically (m*N/8)/R). The default settings of N, M, and D should be appropriate for most uses. A higher sample rate than 16 Khz might indicate a higher N.
Here is an example of the dnoise utility. Play dnoise.csd, MathewsNoise.wav and MathewsN.wav
Example 1358. Example of the dnoise utility.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac -m0 ;;;realtime audio out, with limiter protection ; For Non-realtime ouput leave only the line below: ; -o dnoise.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 ; by Menno Knevel 2022 ; analyze sound file and output result, and be verbose ires1 system_i 1,{{ dnoise -V -W -i MathewsNoise.wav -o outfile01.wav MathewsN.wav }} ; default settings (1024 bandoass filters) ires2 system_i 1,{{ dnoise -V -W -N8 -i MathewsNoise.wav -o outfile02.wav MathewsN.wav }} ; LoFi, only 8 bandpass filters ires3 system_i 1,{{ dnoise -V -W -N4096 -i MathewsNoise.wav -o outfile03.wav MathewsN.wav }} ; 4096 bandpass filters used instr 1 ; untreated signal asig diskin2 "MathewsN.wav", 1 ; sample = 17.6 secs prints "\n---***YOU NOW HEAR THE UNTREATED SOUND SAMPLE***---\n" outs asig, asig endin instr 2 prints "\n---***YOU NOW HEAR THE DENOISED FILE WITH DEFAULT SETTINGS:***---\n" adnoise diskin2 p4, 1 outs adnoise, adnoise endin instr 3 prints "\n---***YOU NOW HEAR THE LoFi FILE:***---\n" adnoise diskin2 p4, 1 outs adnoise, adnoise endin instr 4 prints "\n---***YOU NOW HEAR THE DENOISED FILE WITH MANY BANDS, CREATING SOME ECHOES:***---\n" adnoise diskin2 p4, 1 outs adnoise, adnoise endin </CsInstruments> <CsScore> i1 1 17.6 ; untreated signal i2 20 17.6 "outfile01.wav" ; default settings i3 40 17.6 "outfile02.wav" ; LoFi i4 60 17.6 "outfile03.wav" ; echo-y e </CsScore> </CsoundSynthesizer>