Clean up. Removed the MultiStretchAudioSource, hopefully it doesn't need to be restored later...

This commit is contained in:
xenakios 2018-01-30 18:56:00 +02:00
parent f414f19e01
commit 42061670a8
3 changed files with 1 additions and 380 deletions

View File

@ -636,296 +636,3 @@ bool StretchAudioSource::hasReachedEnd()
//return m_output_counter>=m_process_fftsize*2; //return m_output_counter>=m_process_fftsize*2;
return m_output_silence_counter>=65536; return m_output_silence_counter>=65536;
} }
std::pair<Range<double>, Range<double>> MultiStretchAudioSource::getFileCachedRangesNormalized()
{
return getActiveStretchSource()->getFileCachedRangesNormalized();
}
void MultiStretchAudioSource::setAudioBufferAsInputSource(AudioBuffer<float>* buf, int sr, int len)
{
m_stretchsources[0]->setAudioBufferAsInputSource(buf, sr, len);
m_stretchsources[1]->setAudioBufferAsInputSource(buf, sr, len);
}
StretchAudioSource * MultiStretchAudioSource::getActiveStretchSource() const
{
return m_stretchsources[0].get();
}
void MultiStretchAudioSource::switchActiveSource()
{
std::swap(m_stretchsources[0], m_stretchsources[1]);
m_is_in_switch = true;
m_xfadegain.reset(m_samplerate, 2.0);
m_xfadegain.setValue(1.0);
}
MultiStretchAudioSource::MultiStretchAudioSource(int initialnumoutchans, AudioFormatManager* afm)
: m_afm(afm)
{
m_stretchsources.resize(2);
m_stretchsources[0] = std::make_shared<StretchAudioSource>(initialnumoutchans,m_afm);
m_stretchsources[1] = std::make_shared<StretchAudioSource>(initialnumoutchans,m_afm);
m_numoutchans = initialnumoutchans;
m_processbuffers[0].setSize(m_numoutchans, 4096);
m_processbuffers[1].setSize(m_numoutchans, 4096);
}
MultiStretchAudioSource::~MultiStretchAudioSource()
{
}
void MultiStretchAudioSource::prepareToPlay(int samplesPerBlockExpected, double sampleRate)
{
m_is_in_switch = false;
m_is_playing = true;
m_blocksize = samplesPerBlockExpected;
m_samplerate = sampleRate;
if (m_processbuffers[0].getNumSamples() < samplesPerBlockExpected)
{
m_processbuffers[0].setSize(m_numoutchans, samplesPerBlockExpected);
m_processbuffers[1].setSize(m_numoutchans, samplesPerBlockExpected);
}
getActiveStretchSource()->prepareToPlay(samplesPerBlockExpected, sampleRate);
}
void MultiStretchAudioSource::releaseResources()
{
m_is_playing = false;
getActiveStretchSource()->releaseResources();
}
void MultiStretchAudioSource::getNextAudioBlock(const AudioSourceChannelInfo & bufferToFill)
{
std::lock_guard<std::mutex> locker(m_mutex);
m_blocksize = bufferToFill.numSamples;
if (m_is_in_switch == false)
{
getActiveStretchSource()->setMainVolume(val_MainVolume.getValue());
getActiveStretchSource()->setLoopXFadeLength(val_XFadeLen.getValue());
getActiveStretchSource()->setFreezing(m_freezing);
getActiveStretchSource()->getNextAudioBlock(bufferToFill);
}
else
{
//if (bufferToFill.numSamples > m_processbuffers[0].getNumSamples())
{
m_processbuffers[0].setSize(m_numoutchans, bufferToFill.numSamples);
m_processbuffers[1].setSize(m_numoutchans, bufferToFill.numSamples);
}
AudioSourceChannelInfo ascinfo1(m_processbuffers[0]);
AudioSourceChannelInfo ascinfo2(m_processbuffers[1]);
m_stretchsources[0]->setMainVolume(val_MainVolume.getValue());
m_stretchsources[1]->setMainVolume(val_MainVolume.getValue());
m_stretchsources[0]->setLoopXFadeLength(val_XFadeLen.getValue());
m_stretchsources[1]->setLoopXFadeLength(val_XFadeLen.getValue());
m_stretchsources[0]->setFreezing(m_freezing);
m_stretchsources[1]->setFreezing(m_freezing);
m_stretchsources[1]->setFFTWindowingType(m_stretchsources[0]->getFFTWindowingType());
m_stretchsources[0]->getNextAudioBlock(ascinfo1);
m_stretchsources[1]->getNextAudioBlock(ascinfo2);
int offset = bufferToFill.startSample;
float** outbufpts = bufferToFill.buffer->getArrayOfWritePointers();
for (int i = 0; i < bufferToFill.numSamples; ++i)
{
double fadegain = m_xfadegain.getNextValue();
for (int j = 0; j < m_numoutchans; ++j)
{
double procsample0 = (1.0-fadegain)*m_processbuffers[0].getSample(j, i);
double procsample1 = (fadegain)*m_processbuffers[1].getSample(j, i);
outbufpts[j][i + offset] = procsample0 + procsample1;
}
}
if (m_xfadegain.isSmoothing() == false)
{
std::swap(m_stretchsources[0], m_stretchsources[1]);
m_xfadegain.setValue(0.0);
m_xfadegain.reset(m_samplerate, m_switchxfadelen);
m_is_in_switch = false;
}
}
}
void MultiStretchAudioSource::setNextReadPosition(int64 newPosition)
{
getActiveStretchSource()->setNextReadPosition(newPosition);
}
int64 MultiStretchAudioSource::getNextReadPosition() const
{
return getActiveStretchSource()->getNextReadPosition();
}
int64 MultiStretchAudioSource::getTotalLength() const
{
return getActiveStretchSource()->getTotalLength();
}
bool MultiStretchAudioSource::isLooping() const
{
return getActiveStretchSource()->isLooping();
}
String MultiStretchAudioSource::setAudioFile(File file)
{
if (m_is_playing == false)
{
return m_stretchsources[0]->setAudioFile(file);
}
else
{
String result = m_stretchsources[1]->setAudioFile(file);
m_stretchsources[1]->setFFTSize(m_stretchsources[0]->getFFTSize());
m_stretchsources[1]->setNumOutChannels(m_stretchsources[0]->getNumOutChannels());
m_stretchsources[1]->setRate(m_stretchsources[0]->getRate());
m_stretchsources[1]->setPlayRange({ 0.0,1.0 }, m_stretchsources[0]->isLoopEnabled());
auto pars = m_stretchsources[0]->getProcessParameters();
m_stretchsources[1]->setProcessParameters(&pars);
m_stretchsources[1]->setSpectrumProcessOrder(m_stretchsources[0]->getSpectrumProcessOrder());
m_stretchsources[1]->prepareToPlay(m_blocksize, m_samplerate);
m_mutex.lock();
m_xfadegain.reset(m_samplerate, m_switchxfadelen);
m_xfadegain.setValue(1.0);
m_is_in_switch = true;
m_mutex.unlock();
return result;
}
}
File MultiStretchAudioSource::getAudioFile()
{
return getActiveStretchSource()->getAudioFile();
}
void MultiStretchAudioSource::setNumOutChannels(int chans)
{
m_numoutchans = chans;
getActiveStretchSource()->setNumOutChannels(chans);
}
double MultiStretchAudioSource::getInfilePositionPercent()
{
return getActiveStretchSource()->getInfilePositionPercent();
}
void MultiStretchAudioSource::setRate(double rate)
{
getActiveStretchSource()->setRate(rate);
}
double MultiStretchAudioSource::getRate()
{
return getActiveStretchSource()->getRate();
}
void MultiStretchAudioSource::setProcessParameters(ProcessParameters * pars)
{
getActiveStretchSource()->setProcessParameters(pars);
}
void MultiStretchAudioSource::setFFTWindowingType(int windowtype)
{
getActiveStretchSource()->setFFTWindowingType(windowtype);
}
void MultiStretchAudioSource::setFFTSize(int size)
{
if (size == getActiveStretchSource()->getFFTSize())
return;
if (m_is_playing == false)
{
getActiveStretchSource()->setFFTSize(size);
}
else
{
double curpos = m_stretchsources[0]->getInfilePositionPercent();
m_stretchsources[1]->setFFTSize(size);
m_stretchsources[1]->setNumOutChannels(m_stretchsources[0]->getNumOutChannels());
if (m_stretchsources[0]->getAudioFile()!=File())
m_stretchsources[1]->setAudioFile(m_stretchsources[0]->getAudioFile());
m_stretchsources[1]->setRate(m_stretchsources[0]->getRate());
m_stretchsources[1]->setPlayRange(m_stretchsources[0]->getPlayRange(), m_stretchsources[0]->isLoopEnabled());
m_stretchsources[1]->seekPercent(curpos);
auto pars = m_stretchsources[0]->getProcessParameters();
m_stretchsources[1]->setProcessParameters(&pars);
m_stretchsources[1]->setSpectrumProcessOrder(m_stretchsources[0]->getSpectrumProcessOrder());
m_stretchsources[1]->prepareToPlay(m_blocksize, m_samplerate);
m_mutex.lock();
m_xfadegain.reset(m_samplerate, m_switchxfadelen);
m_xfadegain.setValue(1.0);
m_is_in_switch = true;
m_mutex.unlock();
}
}
int MultiStretchAudioSource::getFFTSize()
{
return getActiveStretchSource()->getFFTSize();
}
void MultiStretchAudioSource::seekPercent(double pos)
{
getActiveStretchSource()->seekPercent(pos);
}
double MultiStretchAudioSource::getInfilePositionSeconds()
{
return getActiveStretchSource()->getInfilePositionSeconds();
}
double MultiStretchAudioSource::getInfileLengthSeconds()
{
return getActiveStretchSource()->getInfileLengthSeconds();
}
double MultiStretchAudioSource::getOutputDurationSecondsForRange(Range<double> range, int fftsize)
{
return getActiveStretchSource()->getOutputDurationSecondsForRange(range, fftsize);
}
void MultiStretchAudioSource::setOnsetDetection(double x)
{
getActiveStretchSource()->setOnsetDetection(x);
}
void MultiStretchAudioSource::setPlayRange(Range<double> playrange, bool isloop)
{
getActiveStretchSource()->setPlayRange(playrange, isloop);
}
bool MultiStretchAudioSource::isLoopingEnabled()
{
return getActiveStretchSource()->isLoopingEnabled();
}
void MultiStretchAudioSource::setLoopingEnabled(bool b)
{
getActiveStretchSource()->setLoopingEnabled(b);
}
bool MultiStretchAudioSource::hasReachedEnd()
{
return getActiveStretchSource()->hasReachedEnd();
}
bool MultiStretchAudioSource::isResampling()
{
return getActiveStretchSource()->isResampling();
}
std::vector<SpectrumProcess> MultiStretchAudioSource::getSpectrumProcessOrder()
{
return getActiveStretchSource()->getSpectrumProcessOrder();
}
void MultiStretchAudioSource::setSpectrumProcessOrder(std::vector<SpectrumProcess> order)
{
getActiveStretchSource()->setSpectrumProcessOrder(order);
}

View File

@ -154,76 +154,3 @@ private:
} m_xfadetask; } m_xfadetask;
int m_pause_fade_counter = 0; int m_pause_fade_counter = 0;
}; };
class MultiStretchAudioSource final : public PositionableAudioSource
{
public:
MultiStretchAudioSource() {}
MultiStretchAudioSource(int initialnumoutchans, AudioFormatManager* afm);
~MultiStretchAudioSource();
void prepareToPlay(int samplesPerBlockExpected, double sampleRate) override;
void releaseResources() override;
void getNextAudioBlock(const AudioSourceChannelInfo & bufferToFill) override;
void setNextReadPosition(int64 newPosition) override;
int64 getNextReadPosition() const override;
int64 getTotalLength() const override;
bool isLooping() const override;
String setAudioFile(File file);
File getAudioFile();
void setNumOutChannels(int chans);
double getInfilePositionPercent();
void setRate(double rate);
double getRate();
void setProcessParameters(ProcessParameters* pars);
void setFFTSize(int size);
int getFFTSize();
void seekPercent(double pos);
double getInfilePositionSeconds();
double getInfileLengthSeconds();
double getOutputDurationSecondsForRange(Range<double> range, int fftsize);
void setOnsetDetection(double x);
void setPlayRange(Range<double> playrange, bool isloop);
bool isLoopingEnabled();
void setLoopingEnabled(bool b);
bool hasReachedEnd();
bool isResampling();
std::vector<SpectrumProcess> getSpectrumProcessOrder();
void setSpectrumProcessOrder(std::vector<SpectrumProcess> order);
void setFFTWindowingType(int windowtype);
std::pair<Range<double>, Range<double>> getFileCachedRangesNormalized();
void setFreezing(bool b) { m_freezing = b; }
bool isFreezing() { return m_freezing; }
Value val_MainVolume;
Value val_XFadeLen;
//ValueTree getStateTree();
//void setStateTree(ValueTree state);
void setAudioBufferAsInputSource(AudioBuffer<float>* buf, int sr, int len);
private:
std::vector<std::shared_ptr<StretchAudioSource>> m_stretchsources;
bool m_is_in_switch{ false };
bool m_is_playing = false;
bool m_freezing = false;
LinearSmoothedValue<double> m_xfadegain;
StretchAudioSource* getActiveStretchSource() const;
void switchActiveSource();
int m_blocksize = 0;
double m_samplerate = 44100.0;
int m_numoutchans = 2;
AudioBuffer<float> m_processbuffers[2];
std::mutex m_mutex;
double m_switchxfadelen = 1.0;
AudioFormatManager* m_afm = nullptr;
};

View File

@ -115,19 +115,6 @@ PaulstretchpluginAudioProcessor::PaulstretchpluginAudioProcessor()
addParameter(new AudioParameterFloat("spread0", "Frequency spread", 0.0f, 1.0f, 0.0f)); // 8 addParameter(new AudioParameterFloat("spread0", "Frequency spread", 0.0f, 1.0f, 0.0f)); // 8
addParameter(new AudioParameterFloat("compress0", "Compress", 0.0f, 1.0f, 0.0f)); // 9 addParameter(new AudioParameterFloat("compress0", "Compress", 0.0f, 1.0f, 0.0f)); // 9
addParameter(new AudioParameterFloat("loopxfadelen0", "Loop xfade length", 0.0f, 1.0f, 0.01f)); // 10 addParameter(new AudioParameterFloat("loopxfadelen0", "Loop xfade length", 0.0f, 1.0f, 0.01f)); // 10
auto numhar_convertFrom0To1Func = [](float rangemin, float rangemax, float value)
{
return jmap<float>(value, 0.0f, 1.0f, 101.0f, 1.0f);
};
auto numhar_convertTo0To1Func = [](float rangemin, float rangemax, float value)
{
return jmap<float>(value, 101.0f, 1.0f, 0.0f, 1.0f);
};
/*
addParameter(new AudioParameterFloat("numharmonics0", "Num harmonics",
NormalisableRange<float>(1.0f, 101.0f,
numhar_convertFrom0To1Func, numhar_convertTo0To1Func), 101.0f)); // 11
*/
addParameter(new AudioParameterInt("numharmonics0", "Num harmonics", 1, 100, 10)); // 11 addParameter(new AudioParameterInt("numharmonics0", "Num harmonics", 1, 100, 10)); // 11
addParameter(new AudioParameterFloat("harmonicsfreq0", "Harmonics base freq", addParameter(new AudioParameterFloat("harmonicsfreq0", "Harmonics base freq",
NormalisableRange<float>(1.0f, 5000.0f, 1.00f, 0.5), 128.0f)); // 12 NormalisableRange<float>(1.0f, 5000.0f, 1.00f, 0.5), 128.0f)); // 12