| @@ -465,34 +465,16 @@ void PaulstretchpluginAudioProcessor::updateStretchParametersFromPluginParameter | |||||
| String PaulstretchpluginAudioProcessor::offlineRender(File outputfile) | String PaulstretchpluginAudioProcessor::offlineRender(File outputfile) | ||||
| { | { | ||||
| File outputfiletouse = outputfile.getNonexistentSibling(); | 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; | 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); | 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; | WavAudioFormat wavformat; | ||||
| FileOutputStream* outstream = outputfiletouse.createOutputStream(); | FileOutputStream* outstream = outputfiletouse.createOutputStream(); | ||||
| if (outstream == nullptr) | if (outstream == nullptr) | ||||
| @@ -503,9 +485,10 @@ String PaulstretchpluginAudioProcessor::offlineRender(File outputfile) | |||||
| delete outstream; | delete outstream; | ||||
| return "Could not create WAV writer"; | 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); | AudioBuffer<float> renderbuffer(numoutchans, blocksize); | ||||
| MidiBuffer dummymidi; | |||||
| int64_t outlen = 10 * outsr; | int64_t outlen = 10 * outsr; | ||||
| int64_t outcounter = 0; | int64_t outcounter = 0; | ||||
| AudioSourceChannelInfo asci(renderbuffer); | AudioSourceChannelInfo asci(renderbuffer); | ||||
| @@ -515,7 +498,7 @@ String PaulstretchpluginAudioProcessor::offlineRender(File outputfile) | |||||
| { | { | ||||
| if (m_offline_render_cancel_requested == true) | if (m_offline_render_cancel_requested == true) | ||||
| break; | break; | ||||
| ss->getNextAudioBlock(asci); | |||||
| processor->processBlock(renderbuffer, dummymidi); | |||||
| writer->writeFromAudioSampleBuffer(renderbuffer, 0, blocksize); | writer->writeFromAudioSampleBuffer(renderbuffer, 0, blocksize); | ||||
| outcounter += blocksize; | outcounter += blocksize; | ||||
| m_offline_render_state = 100.0 / outlen * outcounter; | m_offline_render_state = 100.0 / outlen * outcounter; | ||||