Moved dry source playback into its own method. Allow moving waveform time selection without having to press shift

This commit is contained in:
xenakios
2018-02-23 17:43:29 +02:00
parent 531d2e221b
commit 1f24ffb1b6
5 changed files with 31 additions and 19 deletions

View File

@ -182,23 +182,12 @@ bool StretchAudioSource::isPreviewingDry() const
void StretchAudioSource::getNextAudioBlock(const AudioSourceChannelInfo & bufferToFill)
{
ScopedLock locker(m_cs);
double maingain = Decibels::decibelsToGain(m_main_volume);
if (m_preview_dry == true && m_inputfile!=nullptr && m_inputfile->info.nsamples>0)
{
m_inputfile->setXFadeLenSeconds(m_loopxfadelen);
double* rsinbuf = nullptr;
m_resampler->SetRates(m_inputfile->info.samplerate, m_outsr);
int wanted = m_resampler->ResamplePrepare(bufferToFill.numSamples, m_num_outchans, &rsinbuf);
m_inputfile->readNextBlock(m_drypreviewbuf, wanted, m_num_outchans);
for (int i = 0; i < wanted; ++i)
for (int j = 0; j < m_num_outchans; ++j)
rsinbuf[i*m_num_outchans + j] = m_drypreviewbuf.getSample(j, i);
m_resampler->ResampleOut(m_resampler_outbuf.data(), wanted, bufferToFill.numSamples, m_num_outchans);
for (int i = 0; i < m_num_outchans; ++i)
for (int j = 0; j < bufferToFill.numSamples; ++j)
bufferToFill.buffer->setSample(i, j+bufferToFill.startSample, maingain * m_resampler_outbuf[j*m_num_outchans + i]);
playDrySound(bufferToFill);
return;
}
double maingain = Decibels::decibelsToGain(m_main_volume);
if (m_pause_state == 2)
{
bufferToFill.buffer->clear(bufferToFill.startSample,bufferToFill.numSamples);
@ -474,6 +463,23 @@ void StretchAudioSource::initObjects()
int poolsize = m_stretchers[0]->get_max_bufsize();
}
void StretchAudioSource::playDrySound(const AudioSourceChannelInfo & bufferToFill)
{
double maingain = Decibels::decibelsToGain(m_main_volume);
m_inputfile->setXFadeLenSeconds(m_loopxfadelen);
double* rsinbuf = nullptr;
m_resampler->SetRates(m_inputfile->info.samplerate, m_outsr);
int wanted = m_resampler->ResamplePrepare(bufferToFill.numSamples, m_num_outchans, &rsinbuf);
m_inputfile->readNextBlock(m_drypreviewbuf, wanted, m_num_outchans);
for (int i = 0; i < wanted; ++i)
for (int j = 0; j < m_num_outchans; ++j)
rsinbuf[i*m_num_outchans + j] = m_drypreviewbuf.getSample(j, i);
m_resampler->ResampleOut(m_resampler_outbuf.data(), wanted, bufferToFill.numSamples, m_num_outchans);
for (int i = 0; i < m_num_outchans; ++i)
for (int j = 0; j < bufferToFill.numSamples; ++j)
bufferToFill.buffer->setSample(i, j + bufferToFill.startSample, maingain * m_resampler_outbuf[j*m_num_outchans + i]);
}
double StretchAudioSource::getInfilePositionPercent()
{
if (m_inputfile == nullptr || m_inputfile->info.nsamples == 0)