|
- /*
- Copyright (C) 2011 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
- */
-
-
- #pragma once
-
- #include "FreeEdit.h"
- #include "Stretch.h"
-
- struct ProcessParameters
- {
- ProcessParameters()
- {
- pitch_shift.enabled=false;
- pitch_shift.cents=0;
-
- octave.enabled=false;
- octave.om2=octave.om1=octave.o1=octave.o15=octave.o2=0.0f;
- octave.o0=1.0f;
-
- freq_shift.enabled=false;
- freq_shift.Hz=0;
-
- compressor.enabled=false;
- compressor.power=0.0f;
-
- filter.enabled=false;
- filter.stop=false;
- filter.low=0.0f;
- filter.high=22000.0f;
- filter.hdamp=0.0f;
-
- harmonics.enabled=false;
- harmonics.freq=440.0f;
- harmonics.bandwidth=25.0f;
- harmonics.nharmonics=10;
- harmonics.gauss=false;
-
- spread.enabled=false;
- spread.bandwidth=0.3f;
-
- tonal_vs_noise.enabled=false;
- tonal_vs_noise.preserve=0.5f;
- tonal_vs_noise.bandwidth=0.9f;
- };
- ~ProcessParameters(){
- };
-
-
- struct{
- bool enabled;
- int cents;
- }pitch_shift;
-
- struct{
- bool enabled;
- REALTYPE om2,om1,o0,o1,o15,o2;
- }octave;
-
- struct{
- bool enabled;
- int Hz;
- }freq_shift;
-
- struct{
- bool enabled;
- REALTYPE power;
- }compressor;
-
- struct{
- bool enabled;
- REALTYPE low,high;
- REALTYPE hdamp;
- bool stop;
- }filter;
-
- struct{
- bool enabled;
- REALTYPE freq;
- REALTYPE bandwidth;
- int nharmonics;
- bool gauss;
- }harmonics;
-
- struct{
- bool enabled;
- REALTYPE bandwidth;
- }spread;
-
- struct{
- bool enabled;
- REALTYPE preserve;
- REALTYPE bandwidth;
- }tonal_vs_noise;
-
- //FreeEdit free_filter;
- //FreeEdit stretch_multiplier;
- /*
- auto getMembers() const
- {
- return std::make_tuple(pitch_shift.enabled,
- pitch_shift.cents,
- octave.enabled,
- octave.o0,
- octave.o1,
- octave.o15,
- octave.o2,
- octave.om1,
- octave.om2,
- spread.enabled,
- spread.bandwidth,
- tonal_vs_noise.enabled,
- tonal_vs_noise.bandwidth,
- tonal_vs_noise.preserve,
- freq_shift.enabled,
- freq_shift.Hz,
- compressor.enabled,
- compressor.power,
- harmonics.bandwidth,
- harmonics.enabled,
- harmonics.freq,
- harmonics.gauss,
- harmonics.nharmonics,
- filter.enabled,
- filter.hdamp,
- filter.high,
- filter.low,
- filter.stop);
- }
- bool operator == (const ProcessParameters& other) const
- {
- return getMembers() == other.getMembers();
- }
- */
- bool operator == (const ProcessParameters& other) const noexcept
- {
- return pitch_shift.enabled == other.pitch_shift.enabled &&
- pitch_shift.cents == other.pitch_shift.cents &&
- octave.enabled == other.octave.enabled &&
- octave.o0 == other.octave.o0 &&
- octave.o1 == other.octave.o1 &&
- octave.o15 == other.octave.o15 &&
- octave.o2 == other.octave.o2 &&
- octave.om1 == other.octave.om1 &&
- octave.om2 == other.octave.om2 &&
- spread.enabled == other.spread.enabled &&
- spread.bandwidth == other.spread.bandwidth &&
- tonal_vs_noise.enabled == other.tonal_vs_noise.enabled &&
- tonal_vs_noise.bandwidth == other.tonal_vs_noise.bandwidth &&
- tonal_vs_noise.preserve == other.tonal_vs_noise.preserve &&
- freq_shift.enabled == other.freq_shift.enabled &&
- freq_shift.Hz == other.freq_shift.Hz &&
- compressor.enabled == other.compressor.enabled &&
- compressor.power == other.compressor.power &&
- harmonics.bandwidth == other.harmonics.bandwidth &&
- harmonics.enabled == other.harmonics.enabled &&
- harmonics.freq == other.harmonics.freq &&
- harmonics.gauss == other.harmonics.gauss &&
- harmonics.nharmonics == other.harmonics.nharmonics &&
- filter.enabled == other.filter.enabled &&
- filter.hdamp == other.filter.hdamp &&
- filter.high == other.filter.high &&
- filter.low == other.filter.low &&
- filter.stop == other.filter.stop;
- }
- };
-
- class SpectrumProcess
- {
- public:
- SpectrumProcess() {}
- SpectrumProcess(String name, int index) :
- m_name(name), m_index(index) {}
- String m_name;
- int m_index = -1;
- private:
- };
-
- std::vector<SpectrumProcess> make_spectrum_processes();
-
- class ProcessedStretch final : public Stretch
- {
- public:
-
- //stereo_mode: 0=mono,1=left,2=right
- ProcessedStretch(REALTYPE rap_,int in_bufsize_,FFTWindow w=W_HAMMING,bool bypass_=false,REALTYPE samplerate_=44100.0f,int stereo_mode=0);
- ~ProcessedStretch();
- void set_parameters(ProcessParameters *ppar);
- std::vector<int> m_spectrum_processes;
- void setBufferSize(int sz) override;
- private:
- REALTYPE get_stretch_multiplier(REALTYPE pos_percents) override;
- // void process_output(REALTYPE *smps,int nsmps);
- void process_spectrum(REALTYPE *freq) override;
- void do_harmonics(REALTYPE *freq1,REALTYPE *freq2);
- void do_pitch_shift(REALTYPE *freq1,REALTYPE *freq2,REALTYPE rap);
- void do_freq_shift(REALTYPE *freq1,REALTYPE *freq2);
- void do_octave(REALTYPE *freq1,REALTYPE *freq2);
- void do_filter(REALTYPE *freq1,REALTYPE *freq2);
- void do_free_filter(REALTYPE *freq1,REALTYPE *freq2);
- void do_compressor(REALTYPE *freq1,REALTYPE *freq2);
- void do_spread(REALTYPE *freq1,REALTYPE *freq2);
- void do_tonal_vs_noise(REALTYPE *freq1,REALTYPE *freq2);
-
- //void copy(const realvector& freq1,realvector& freq2);
- void copy(REALTYPE* freq1, REALTYPE* freq2);
- void add(REALTYPE *freq2,REALTYPE *freq1,REALTYPE a=1.0);
- void mul(REALTYPE *freq1,REALTYPE a);
- void zero(REALTYPE *freq1);
- void spread(REALTYPE *freq1,REALTYPE *freq2,REALTYPE spread_bandwidth);
-
- void update_free_filter();
- int nfreq=0;
-
- std::vector<REALTYPE> free_filter_freqs;
- ProcessParameters pars;
-
- std::vector<REALTYPE> infreq,sumfreq,tmpfreq1,tmpfreq2;
-
- //REALTYPE *fbfreq;
- };
|