From 5192e3ed1c67aaca76129b862b8b26c7c30954fe Mon Sep 17 00:00:00 2001 From: Nasca Octavian PAUL Date: Sun, 27 Feb 2011 12:56:54 +0200 Subject: [PATCH] Tonal/Noise preserve --- GUI.fl | 38 +++++++++++++++++++++++++++------ ProcessedStretch.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++- ProcessedStretch.h | 13 ++++++++++++ readme.txt | 3 +++ 4 files changed, 97 insertions(+), 7 deletions(-) diff --git a/GUI.fl b/GUI.fl index c303df2..7d833a7 100644 --- a/GUI.fl +++ b/GUI.fl @@ -188,7 +188,7 @@ rendering=false;} {} } { Fl_Window window { label {Paul's Extreme Sound Stretch} open - xywh {54 265 995 550} type Double resizable + xywh {192 131 995 550} type Double resizable code0 {if(strlen(VERSION)<2) {o->color(FL_BLUE); o->label("VERSION NOT SET!!!!!!!!!!!!");};} visible } { Fl_Menu_Bar {} {open @@ -385,7 +385,7 @@ stretch_slider->do_callback();} } } Fl_Group {} { - label Process + label Process open xywh {5 70 985 400} hide } { Fl_Group {} {open @@ -469,19 +469,19 @@ control.update_process_parameters();} } } Fl_Group {} {open - xywh {605 75 120 65} box BORDER_BOX + xywh {750 75 120 65} box BORDER_BOX } { Fl_Check_Button compressor_enabled { label Compress callback {control.ppar.compressor.enabled=o->value(); control.update_process_parameters();} - xywh {610 80 90 15} down_box DOWN_BOX labelfont 1 + xywh {755 80 90 15} down_box DOWN_BOX labelfont 1 } Fl_Slider compressor_power { label Power callback {control.ppar.compressor.power=o->value(); control.update_process_parameters();} - xywh {610 100 110 15} type {Horz Knob} + xywh {755 100 110 15} type {Horz Knob} } } Fl_Slider {} { @@ -489,7 +489,7 @@ control.update_process_parameters();} callback {REALTYPE x=o->value(); x=pow(10.0,pow(x,1.5)-1.0)-0.1; control.set_volume(x);} - xywh {605 155 120 40} type {Horz Knob} labelfont 1 minimum 0.3 maximum 1.6 value 1 + xywh {750 155 120 40} type {Horz Knob} labelfont 1 minimum 0.3 maximum 1.6 value 1 } Fl_Group {} {open xywh {415 75 185 100} box BORDER_BOX @@ -591,6 +591,28 @@ control.update_process_parameters();} class FreeEditControls } {} } + Fl_Group {} {open + xywh {605 75 140 105} box BORDER_BOX + } { + Fl_Check_Button tonal_vs_noise_enabled { + label {Tonal/Noise} + callback {control.ppar.tonal_vs_noise.enabled=o->value(); +control.update_process_parameters();} + xywh {610 80 115 20} down_box DOWN_BOX labelfont 1 + } + Fl_Slider tonal_vs_noise_bandwidth { + label Bandwidth + callback {control.ppar.tonal_vs_noise.bandwidth=o->value(); +control.update_process_parameters();} + xywh {610 141 130 15} type {Horz Knob} minimum 0.75 value 0.9 + } + Fl_Slider tonal_vs_noise_preserve { + label {noise <-->tonal} + callback {control.ppar.tonal_vs_noise.preserve=o->value(); +control.update_process_parameters();} + xywh {610 105 130 15} type {Horz Knob} minimum -1 value 0.5 + } + } } Fl_Group {} { label {Binaural beats} @@ -861,6 +883,10 @@ spread_enabled->value(control.ppar.spread.enabled); spread_bandwidth->value(control.ppar.spread.bandwidth); +tonal_vs_noise_enabled->value(control.ppar.tonal_vs_noise.enabled); +tonal_vs_noise_preserve->value(control.ppar.tonal_vs_noise.preserve); +tonal_vs_noise_bandwidth->value(control.ppar.tonal_vs_noise.bandwidth); + bbpar_mono->value(control.bbpar.mono); bbpar_stereo_mode->value(control.bbpar.stereo_mode); diff --git a/ProcessedStretch.cpp b/ProcessedStretch.cpp index 2addc83..4cb4ae4 100644 --- a/ProcessedStretch.cpp +++ b/ProcessedStretch.cpp @@ -55,6 +55,10 @@ void ProcessParameters::add2XML(XMLwrapper *xml){ xml->addparbool("spread.enabled",spread.enabled); xml->addparreal("spread.bandwidth",spread.bandwidth); + + xml->addparbool("tonal_vs_noise.enabled",tonal_vs_noise.enabled); + xml->addparreal("tonal_vs_noise.bandwidth",tonal_vs_noise.bandwidth); + xml->addparreal("tonal_vs_noise.preserve",tonal_vs_noise.preserve); xml->beginbranch("FREE_FILTER"); free_filter.add2XML(xml); @@ -99,6 +103,11 @@ void ProcessParameters::getfromXML(XMLwrapper *xml){ spread.enabled=xml->getparbool("spread.enabled",spread.enabled); spread.bandwidth=xml->getparreal("spread.bandwidth",spread.bandwidth); + + tonal_vs_noise.enabled=xml->getparbool("tonal_vs_noise.enabled",tonal_vs_noise.enabled); + tonal_vs_noise.preserve=xml->getparreal("tonal_vs_noise.preserve",tonal_vs_noise.bandwidth); + tonal_vs_noise.bandwidth=xml->getparreal("tonal_vs_noise.bandwidth",tonal_vs_noise.bandwidth); + if (xml->enterbranch("FREE_FILTER")){ free_filter.getfromXML(xml); @@ -169,6 +178,11 @@ void ProcessedStretch::process_spectrum(REALTYPE *freq){ do_harmonics(infreq,freq); }; + if (pars.tonal_vs_noise.enabled){ + copy(freq,infreq); + do_tonal_vs_noise(infreq,freq); + }; + if (pars.freq_shift.enabled) { copy(freq,infreq); do_freq_shift(infreq,freq); @@ -365,6 +379,10 @@ void ProcessedStretch::do_free_filter(REALTYPE *freq1,REALTYPE *freq2){ }; void ProcessedStretch::do_spread(REALTYPE *freq1,REALTYPE *freq2){ + spread(freq1,freq2,pars.spread.bandwidth); +}; + +void ProcessedStretch::spread(REALTYPE *freq1,REALTYPE *freq2,REALTYPE spread_bandwidth){ //convert to log spectrum REALTYPE minfreq=20.0; REALTYPE maxfreq=0.5*samplerate; @@ -387,7 +405,7 @@ void ProcessedStretch::do_spread(REALTYPE *freq1,REALTYPE *freq2){ //increase the bandwidth of each harmonic (by smoothing the log spectrum) int n=2; - REALTYPE bandwidth=pars.spread.bandwidth; + REALTYPE bandwidth=spread_bandwidth; REALTYPE a=1.0-pow(2.0,-bandwidth*bandwidth*10.0); a=pow(a,8192.0/nfreq*n); @@ -431,4 +449,34 @@ void ProcessedStretch::do_compressor(REALTYPE *freq1,REALTYPE *freq2){ for (int i=0;i=0.0){ + REALTYPE mul=(pow(10.0,pars.tonal_vs_noise.preserve)-1.0); + for (int i=0;i