|
- /*
- Copyright (C) 2009 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- as published by the Free Software Foundation.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License (version 2) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
- #include <math.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include "ProcessedStretch.h"
-
- ProcessedStretch::ProcessedStretch(REALTYPE rap_,int in_bufsize_,FFTWindow w,bool bypass_,REALTYPE samplerate_,int stereo_mode_)
- : Stretch(rap_,in_bufsize_,w,bypass_,samplerate_,stereo_mode_)
- {
-
-
- };
-
- ProcessedStretch::~ProcessedStretch()
- {
- };
-
- void ProcessedStretch::set_parameters(ProcessParameters *ppar)
- {
- pars=*ppar;
- //update_free_filter();
- }
-
- void ProcessedStretch::setFreeFilterEnvelope(shared_envelope env)
- {
- m_free_filter_envelope = env;
- }
-
- void ProcessedStretch::setBufferSize(int sz)
- {
- jassert(sz > 0);
- Stretch::setBufferSize(sz);
- //if (nfreq != sz)
- {
- nfreq = bufsize;
- m_infreq = floatvector(nfreq);
- m_sumfreq = floatvector(nfreq);
- m_tmpfreq1 = floatvector(nfreq);
- m_tmpfreq2 = floatvector(nfreq);
- m_free_filter_freqs = floatvector(nfreq);
- fill_container(m_free_filter_freqs, 1.0f);
- }
- }
-
- void ProcessedStretch::copy(REALTYPE* freq1, REALTYPE* freq2)
- {
- for (int i = 0; i<nfreq; i++) freq2[i] = freq1[i];
- };
-
- void ProcessedStretch::add(REALTYPE *freq2,REALTYPE *freq1,REALTYPE a){
- for (int i=0;i<nfreq;i++) freq2[i]+=freq1[i]*a;
- };
-
- void ProcessedStretch::mul(REALTYPE *freq1,REALTYPE a){
- for (int i=0;i<nfreq;i++) freq1[i]*=a;
- };
-
- void ProcessedStretch::zero(REALTYPE *freq1){
- for (int i=0;i<nfreq;i++) freq1[i]=0.0;
- };
-
- REALTYPE ProcessedStretch::get_stretch_multiplier(REALTYPE pos_percents){
- REALTYPE result=1.0;
- /*
- if (pars.stretch_multiplier.get_enabled()){
- result*=pars.stretch_multiplier.get_value(pos_percents);
- };
- */
- ///REALTYPE transient=pars.get_transient(pos_percents);
- ///printf("\n%g\n",transient);
- ///REALTYPE threshold=0.05;
- ///REALTYPE power=1000.0;
- ///transient-=threshold;
- ///if (transient>0){
- /// transient*=power*(1.0+power);
- /// result/=(1.0+transient);
- ///};
- ///printf("tr=%g\n",result);
- return result;
- };
-
- void ProcessedStretch::process_spectrum(REALTYPE *freq)
- {
- for (auto& e : m_spectrum_processes)
- {
- spectrum_copy(nfreq, freq, m_infreq.data());
- if (e.m_index == SPT_Harmonics && *e.m_enabled == true)
- spectrum_do_harmonics(pars, m_tmpfreq1, nfreq, samplerate, m_infreq.data(), freq);
- if (e.m_index == SPT_TonalVsNoise && *e.m_enabled == true)
- spectrum_do_tonal_vs_noise(pars,nfreq,samplerate,m_tmpfreq1, m_infreq.data(), freq);
- if (e.m_index == SPT_FreqShift && *e.m_enabled == true)
- spectrum_do_freq_shift(pars,nfreq,samplerate,m_infreq.data(), freq);
- if (e.m_index == SPT_PitchShift && *e.m_enabled == true)
- spectrum_do_pitch_shift(pars,nfreq,m_infreq.data(), freq, pow(2.0f, pars.pitch_shift.cents / 1200.0f));
- if (e.m_index == SPT_RatioMix && *e.m_enabled == true)
- spectrum_do_ratiomix(pars,nfreq,samplerate, m_sumfreq, m_tmpfreq1, m_infreq.data(), freq);
- if (e.m_index == SPT_Spread && *e.m_enabled == true)
- spectrum_spread(nfreq,samplerate,m_tmpfreq1,m_infreq.data(), freq, pars.spread.bandwidth);
- if (e.m_index == SPT_Filter && *e.m_enabled == true)
- spectrum_do_filter(pars,nfreq,samplerate,m_infreq.data(), freq);
- if (e.m_index == SPT_Compressor && *e.m_enabled == true)
- spectrum_do_compressor(pars,nfreq, m_infreq.data(), freq);
- if (e.m_index == SPT_FreeFilter && *e.m_enabled == true)
- spectrum_do_free_filter(m_free_filter_envelope, nfreq, samplerate, m_infreq.data(), freq);
- }
- };
-
- //void ProcessedStretch::process_output(REALTYPE *smps,int nsmps){
- //};
-
-
-
- void ProcessedStretch::update_free_filter()
- {
- /*
- pars.free_filter.update_curve();
- if (pars.free_filter.get_enabled()) {
- for (int i=0;i<nfreq;i++){
- REALTYPE freq=(REALTYPE)i/(REALTYPE) nfreq*samplerate*0.5f;
- free_filter_freqs[i]=pars.free_filter.get_value(freq);
- };
- }else{
- for (int i=0;i<nfreq;i++){
- free_filter_freqs[i]=1.0f;
- };
- };
- */
- };
|