| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -127,7 +127,7 @@ void PaulstretchpluginAudioProcessor::prepareToPlay(double sampleRate, int sampl | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				if (m_ready_to_play == false) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					m_control->setFFTSize(0.2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					m_control->setFFTSize(0.7); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					m_control->update_player_stretch(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					m_control->update_process_parameters(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					 | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -242,15 +242,47 @@ AudioProcessorEditor* PaulstretchpluginAudioProcessor::createEditor() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			//============================================================================== | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void PaulstretchpluginAudioProcessor::getStateInformation (MemoryBlock& destData) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // You should use this method to store your parameters in the memory block. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // You could do that either as raw data, or use the XML or ValueTree classes | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // as intermediaries to make it easy to save and load complex data. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ValueTree paramtree("paulstretch3pluginstate"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				for (int i=0;i<getNumParameters();++i) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					auto par = getFloatParameter(i); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					paramtree.setProperty(par->paramID, (double)*par, nullptr); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				if (m_current_file != File()) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					paramtree.setProperty("importedfile", m_current_file.getFullPathName(), nullptr); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				MemoryOutputStream stream(destData,true); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				paramtree.writeToStream(stream); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void PaulstretchpluginAudioProcessor::setStateInformation (const void* data, int sizeInBytes) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // You should use this method to restore your parameters from this memory block, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    // whose contents will have been created by the getStateInformation() call. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				ValueTree tree = ValueTree::readFromData(data, sizeInBytes); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				if (tree.isValid()) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					for (int i = 0; i<getNumParameters(); ++i) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						auto par = getFloatParameter(i); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						double parval = tree.getProperty(par->paramID, (double)*par); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						*par = parval; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					String fn = tree.getProperty("importedfile"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					if (fn.isEmpty() == false) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						m_using_memory_buffer = false; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						File f(fn); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						setAudioFile(f); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						Timer::callAfterDelay(500, [this,f]()  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							callGUI([f](PaulstretchpluginAudioProcessorEditor* ed) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
								ed->setAudioFile(f); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
							}, false); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						}); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
						 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void PaulstretchpluginAudioProcessor::setRecordingEnabled(bool b) | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -259,6 +291,8 @@ void PaulstretchpluginAudioProcessor::setRecordingEnabled(bool b) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				int lenbufframes = getSampleRate()*m_max_reclen; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				if (b == true) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					m_using_memory_buffer = true; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					m_current_file = File(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					m_recbuffer.setSize(2, m_max_reclen*getSampleRate()+4096); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					m_recbuffer.clear(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					m_rec_pos = 0; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -292,6 +326,7 @@ String PaulstretchpluginAudioProcessor::setAudioFile(File f) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
					 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				}); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				m_current_file = f; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				m_using_memory_buffer = false; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
				return String(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |