|
|
@@ -465,34 +465,16 @@ void PaulstretchpluginAudioProcessor::updateStretchParametersFromPluginParameter |
|
|
|
String PaulstretchpluginAudioProcessor::offlineRender(File outputfile) |
|
|
|
{ |
|
|
|
File outputfiletouse = outputfile.getNonexistentSibling(); |
|
|
|
int numoutchans = *getIntParameter(cpi_num_outchans); |
|
|
|
auto ss = std::make_shared<StretchAudioSource>(numoutchans,m_afm,m_sm_enab_pars); |
|
|
|
shared_envelope free_env = m_free_filter_envelope->duplicate(); |
|
|
|
ss->setFreeFilterEnvelope(free_env); |
|
|
|
ValueTree state = getStateTree(false, false); |
|
|
|
auto processor = std::make_shared<PaulstretchpluginAudioProcessor>(); |
|
|
|
processor->setStateFromTree(state); |
|
|
|
int blocksize = 2048; |
|
|
|
|
|
|
|
ss->setAudioFile(m_current_file); |
|
|
|
ProcessParameters renderpars; |
|
|
|
updateStretchParametersFromPluginParameters(renderpars); |
|
|
|
ss->setProcessParameters(&renderpars); |
|
|
|
double t0 = *getFloatParameter(cpi_soundstart); |
|
|
|
double t1 = *getFloatParameter(cpi_soundend); |
|
|
|
int numoutchans = *processor->getIntParameter(cpi_num_outchans); |
|
|
|
processor->prepareToPlay(44100.0, blocksize); |
|
|
|
double t0 = *processor->getFloatParameter(cpi_soundstart); |
|
|
|
double t1 = *processor->getFloatParameter(cpi_soundend); |
|
|
|
sanitizeTimeRange(t0, t1); |
|
|
|
ss->setRate(*getFloatParameter(cpi_stretchamount)); |
|
|
|
ss->setPlayRange({ t0,t1 }); |
|
|
|
ss->setLoopingEnabled(true); |
|
|
|
ss->setNumOutChannels(numoutchans); |
|
|
|
ss->setFFTWindowingType(1); |
|
|
|
//ss->setPreviewDry(true); |
|
|
|
ss->setOnsetDetection(*getFloatParameter(cpi_onsetdetection)); |
|
|
|
ss->setLoopXFadeLength(*getFloatParameter(cpi_loopxfadelen)); |
|
|
|
ss->setFreezing(getParameter(cpi_freeze)); |
|
|
|
ss->setPaused(getParameter(cpi_pause_enabled)); |
|
|
|
ss->setSpectrumProcessOrder(m_stretch_source->getSpectrumProcessOrder()); |
|
|
|
ss->setFFTSize(m_fft_size_to_use); |
|
|
|
ss->setMainVolume(*getFloatParameter(cpi_main_volume)); |
|
|
|
double outsr = getSampleRateChecked(); |
|
|
|
ss->prepareToPlay(blocksize, outsr); |
|
|
|
double outsr = processor->getSampleRateChecked(); |
|
|
|
WavAudioFormat wavformat; |
|
|
|
FileOutputStream* outstream = outputfiletouse.createOutputStream(); |
|
|
|
if (outstream == nullptr) |
|
|
@@ -503,9 +485,10 @@ String PaulstretchpluginAudioProcessor::offlineRender(File outputfile) |
|
|
|
delete outstream; |
|
|
|
return "Could not create WAV writer"; |
|
|
|
} |
|
|
|
auto rendertask = [ss,writer,blocksize,numoutchans, outsr, this]() |
|
|
|
auto rendertask = [processor,writer,blocksize,numoutchans, outsr, this]() |
|
|
|
{ |
|
|
|
AudioBuffer<float> renderbuffer(numoutchans, blocksize); |
|
|
|
MidiBuffer dummymidi; |
|
|
|
int64_t outlen = 10 * outsr; |
|
|
|
int64_t outcounter = 0; |
|
|
|
AudioSourceChannelInfo asci(renderbuffer); |
|
|
@@ -515,7 +498,7 @@ String PaulstretchpluginAudioProcessor::offlineRender(File outputfile) |
|
|
|
{ |
|
|
|
if (m_offline_render_cancel_requested == true) |
|
|
|
break; |
|
|
|
ss->getNextAudioBlock(asci); |
|
|
|
processor->processBlock(renderbuffer, dummymidi); |
|
|
|
writer->writeFromAudioSampleBuffer(renderbuffer, 0, blocksize); |
|
|
|
outcounter += blocksize; |
|
|
|
m_offline_render_state = 100.0 / outlen * outcounter; |
|
|
|