Added pause playback feature with fades for smoothing
This commit is contained in:
		@@ -164,6 +164,11 @@ void StretchAudioSource::setLoopXFadeLength(double lenseconds)
 | 
			
		||||
void StretchAudioSource::getNextAudioBlock(const AudioSourceChannelInfo & bufferToFill)
 | 
			
		||||
{
 | 
			
		||||
	ScopedLock locker(m_cs);
 | 
			
		||||
	if (m_pause_state == 2)
 | 
			
		||||
	{
 | 
			
		||||
		bufferToFill.buffer->clear(bufferToFill.startSample,bufferToFill.numSamples);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	if (m_stretchoutringbuf.available() > 0)
 | 
			
		||||
		m_output_has_begun = true;
 | 
			
		||||
	bool freezing = m_freezing;
 | 
			
		||||
@@ -341,8 +346,17 @@ void StretchAudioSource::getNextAudioBlock(const AudioSourceChannelInfo & buffer
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
	//if (m_inputfile->hasEnded())
 | 
			
		||||
		m_output_counter += bufferToFill.numSamples;
 | 
			
		||||
	if (m_pause_state == 1)
 | 
			
		||||
	{
 | 
			
		||||
		bufferToFill.buffer->applyGainRamp(bufferToFill.startSample, bufferToFill.numSamples, 1.0f, 0.0f);
 | 
			
		||||
		m_pause_state = 2;
 | 
			
		||||
	}
 | 
			
		||||
	if (m_pause_state == 3)
 | 
			
		||||
	{
 | 
			
		||||
		bufferToFill.buffer->applyGainRamp(bufferToFill.startSample, bufferToFill.numSamples, 0.0f, 1.0f);
 | 
			
		||||
		m_pause_state = 0;
 | 
			
		||||
	}
 | 
			
		||||
	m_output_counter += bufferToFill.numSamples;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StretchAudioSource::setNextReadPosition(int64 /*newPosition*/)
 | 
			
		||||
@@ -538,6 +552,30 @@ void StretchAudioSource::setFFTSize(int size)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StretchAudioSource::setPaused(bool b)
 | 
			
		||||
{
 | 
			
		||||
	if (b == true && m_pause_state>0)
 | 
			
		||||
		return;
 | 
			
		||||
	if (b == false && m_pause_state == 0)
 | 
			
		||||
		return;
 | 
			
		||||
	ScopedLock locker(m_cs);
 | 
			
		||||
	if (b == true && m_pause_state == 0)
 | 
			
		||||
	{
 | 
			
		||||
		m_pause_state = 1;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	if (b == false && m_pause_state == 2)
 | 
			
		||||
	{
 | 
			
		||||
		m_pause_state = 3;
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool StretchAudioSource::isPaused() const
 | 
			
		||||
{
 | 
			
		||||
	return m_pause_state > 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StretchAudioSource::seekPercent(double pos)
 | 
			
		||||
{
 | 
			
		||||
	ScopedLock locker(m_cs);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user