| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -189,7 +189,8 @@ bool PaulstretchpluginAudioProcessor::isMidiEffect() const
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				double PaulstretchpluginAudioProcessor::getTailLengthSeconds() const
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    return (double)m_bufamounts[m_prebuffer_amount]/getSampleRate();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					return 0.0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					//return (double)m_bufamounts[m_prebuffer_amount]/getSampleRate();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				int PaulstretchpluginAudioProcessor::getNumPrograms()
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -248,12 +249,19 @@ void PaulstretchpluginAudioProcessor::startplay(Range<double> playrange, int num
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_stretch_source->setProcessParameters(&m_ppar);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_last_outpos_pos = 0.0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_last_in_pos = playrange.getStart()*m_stretch_source->getInfileLengthSeconds();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_buffering_source->prepareToPlay(maxBlockSize, getSampleRate());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_buffering_source->prepareToPlay(maxBlockSize, getSampleRateChecked());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				double PaulstretchpluginAudioProcessor::getSampleRateChecked()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (m_cur_sr < 1.0)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return 44100.0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					return m_cur_sr;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void PaulstretchpluginAudioProcessor::prepareToPlay(double sampleRate, int samplesPerBlock)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					ScopedLock locker(m_cs);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_cur_sr = sampleRate;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_curmaxblocksize = samplesPerBlock;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int numoutchans = *m_outchansparam;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (numoutchans != m_cur_num_out_chans)
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -262,9 +270,9 @@ void PaulstretchpluginAudioProcessor::prepareToPlay(double sampleRate, int sampl
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						int len = jlimit(100,m_recbuffer.getNumSamples(), m_rec_pos);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						m_stretch_source->setAudioBufferAsInputSource(&m_recbuffer, 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							getSampleRate(), 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							getSampleRateChecked(), 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							len);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						callGUI(this,[this,len](auto ed) { ed->setAudioBuffer(&m_recbuffer, getSampleRate(), len); },false);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						callGUI(this,[this,len](auto ed) { ed->setAudioBuffer(&m_recbuffer, getSampleRateChecked(), len); },false);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (m_ready_to_play == false)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					{
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -332,6 +340,9 @@ void PaulstretchpluginAudioProcessor::processBlock (AudioSampleBuffer& buffer, M
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					ScopedLock locker(m_cs);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					ScopedNoDenormals noDenormals;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					double srtemp = getSampleRate();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (srtemp != m_cur_sr)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						m_cur_sr = srtemp;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    const int totalNumInputChannels  = getTotalNumInputChannels();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    const int totalNumOutputChannels = getTotalNumOutputChannels();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -476,17 +487,17 @@ void PaulstretchpluginAudioProcessor::setStateInformation (const void* data, int
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void PaulstretchpluginAudioProcessor::setRecordingEnabled(bool b)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					ScopedLock locker(m_cs);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int lenbufframes = getSampleRate()*m_max_reclen;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int lenbufframes = getSampleRateChecked()*m_max_reclen;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (b == true)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						m_using_memory_buffer = true;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						m_current_file = File();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						m_recbuffer.setSize(2, m_max_reclen*getSampleRate()+4096,false,false,true);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						m_recbuffer.setSize(2, m_max_reclen*getSampleRateChecked()+4096,false,false,true);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						m_recbuffer.clear();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						m_rec_pos = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						callGUI(this,[this,lenbufframes](PaulstretchpluginAudioProcessorEditor* ed)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ed->beginAddingAudioBlocks(2, getSampleRate(), lenbufframes);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ed->beginAddingAudioBlocks(2, getSampleRateChecked(), lenbufframes);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						},false);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						m_is_recording = true;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@@ -583,7 +594,7 @@ void PaulstretchpluginAudioProcessor::timerCallback(int id)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void PaulstretchpluginAudioProcessor::finishRecording(int lenrecording)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_is_recording = false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_stretch_source->setAudioBufferAsInputSource(&m_recbuffer, getSampleRate(), lenrecording);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_stretch_source->setAudioBufferAsInputSource(&m_recbuffer, getSampleRateChecked(), lenrecording);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					m_stretch_source->setPlayRange({ *getFloatParameter(cpi_soundstart),*getFloatParameter(cpi_soundend) }, true);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					auto ed = dynamic_cast<PaulstretchpluginAudioProcessorEditor*>(getActiveEditor());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (ed)
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				 
 |