Do not apply FX mixer effects twice when playing frozen pattern
We must not process the FX mixer if we notice that currently a pattern is frozen. Furthermore renamed some state-reading messages of the pattern class. Closes #3316495.
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
* FxMixer.cpp - effect mixer for LMMS
|
||||
*
|
||||
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2008-2011 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -119,16 +119,15 @@ void FxMixer::processChannel( fx_ch_t _ch, sampleFrame * _buf )
|
||||
_buf = m_fxChannels[_ch]->m_buffer;
|
||||
}
|
||||
const fpp_t f = engine::getMixer()->framesPerPeriod();
|
||||
m_fxChannels[_ch]->m_fxChain.startRunning();
|
||||
m_fxChannels[_ch]->m_stillRunning =
|
||||
m_fxChannels[_ch]->m_fxChain.processAudioBuffer(
|
||||
_buf, f );
|
||||
m_fxChannels[_ch]->m_peakLeft =
|
||||
engine::getMixer()->peakValueLeft( _buf, f ) *
|
||||
m_fxChannels[_ch]->m_volumeModel.value();
|
||||
m_fxChannels[_ch]->m_peakRight =
|
||||
engine::getMixer()->peakValueRight( _buf, f ) *
|
||||
m_fxChannels[_ch]->m_volumeModel.value();
|
||||
if( !engine::getSong()->isFreezingPattern() )
|
||||
{
|
||||
m_fxChannels[_ch]->m_fxChain.startRunning();
|
||||
m_fxChannels[_ch]->m_stillRunning = m_fxChannels[_ch]->m_fxChain.processAudioBuffer( _buf, f );
|
||||
m_fxChannels[_ch]->m_peakLeft = engine::getMixer()->peakValueLeft( _buf, f ) *
|
||||
m_fxChannels[_ch]->m_volumeModel.value();
|
||||
m_fxChannels[_ch]->m_peakRight = engine::getMixer()->peakValueRight( _buf, f ) *
|
||||
m_fxChannels[_ch]->m_volumeModel.value();
|
||||
}
|
||||
m_fxChannels[_ch]->m_used = true;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -343,7 +343,7 @@ void song::processNextBuffer()
|
||||
bool check_loop = tl != NULL && m_exporting == false &&
|
||||
tl->loopPointsEnabled() &&
|
||||
!( m_playMode == Mode_PlayPattern &&
|
||||
m_patternToPlay->freezing() == true );
|
||||
m_patternToPlay->isFreezing() == true );
|
||||
if( check_loop )
|
||||
{
|
||||
if( m_playPos[m_playMode] < tl->loopBegin() ||
|
||||
@@ -467,11 +467,22 @@ void song::processNextBuffer()
|
||||
|
||||
|
||||
|
||||
bool song::isFreezingPattern() const
|
||||
{
|
||||
return isPlaying() &&
|
||||
m_playMode == Mode_PlayPattern &&
|
||||
m_patternToPlay != NULL &&
|
||||
m_patternToPlay->isFreezing();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool song::realTimeTask() const
|
||||
{
|
||||
return !( m_exporting == true || ( m_playMode == Mode_PlayPattern &&
|
||||
m_patternToPlay != NULL &&
|
||||
m_patternToPlay->freezing() == true ) );
|
||||
m_patternToPlay->isFreezing() == true ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -613,7 +613,7 @@ bool InstrumentTrack::play( const midiTime & _start,
|
||||
{
|
||||
cur_start -= p->startPosition();
|
||||
}
|
||||
if( p->frozen() && !engine::getSong()->isExporting() )
|
||||
if( p->isFrozen() && !engine::getSong()->isExporting() )
|
||||
{
|
||||
if( cur_start > 0 )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user