Rage Sound is complicated.
This commit is contained in:
@@ -18,8 +18,8 @@ RageSoundReader_Merge::RageSoundReader_Merge()
|
|||||||
|
|
||||||
RageSoundReader_Merge::~RageSoundReader_Merge()
|
RageSoundReader_Merge::~RageSoundReader_Merge()
|
||||||
{
|
{
|
||||||
FOREACH( RageSoundReader *, m_aSounds, it )
|
for (RageSoundReader *it : m_aSounds)
|
||||||
delete *it;
|
delete it;
|
||||||
}
|
}
|
||||||
|
|
||||||
RageSoundReader_Merge::RageSoundReader_Merge( const RageSoundReader_Merge &cpy ):
|
RageSoundReader_Merge::RageSoundReader_Merge( const RageSoundReader_Merge &cpy ):
|
||||||
@@ -59,8 +59,8 @@ void RageSoundReader_Merge::Finish( int iPreferredSampleRate )
|
|||||||
/* Figure out how many channels we have. All sounds must either have 1 or 2 channels,
|
/* Figure out how many channels we have. All sounds must either have 1 or 2 channels,
|
||||||
* which will be converted as needed, or have the same number of channels. */
|
* which will be converted as needed, or have the same number of channels. */
|
||||||
m_iChannels = 1;
|
m_iChannels = 1;
|
||||||
FOREACH( RageSoundReader *, m_aSounds, it )
|
for (RageSoundReader *it : m_aSounds)
|
||||||
m_iChannels = max( m_iChannels, (*it)->GetNumChannels() );
|
m_iChannels = max( m_iChannels, it->GetNumChannels() );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We might get different sample rates from our sources. If they're all the same
|
* We might get different sample rates from our sources. If they're all the same
|
||||||
@@ -71,22 +71,20 @@ void RageSoundReader_Merge::Finish( int iPreferredSampleRate )
|
|||||||
m_iSampleRate = GetSampleRateInternal();
|
m_iSampleRate = GetSampleRateInternal();
|
||||||
if( m_iSampleRate == -1 )
|
if( m_iSampleRate == -1 )
|
||||||
{
|
{
|
||||||
FOREACH( RageSoundReader *, m_aSounds, it )
|
for (RageSoundReader *it : m_aSounds)
|
||||||
{
|
{
|
||||||
RageSoundReader *&pSound = (*it);
|
RageSoundReader_Resample_Good *pResample = new RageSoundReader_Resample_Good( it, iPreferredSampleRate );
|
||||||
|
it = pResample;
|
||||||
RageSoundReader_Resample_Good *pResample = new RageSoundReader_Resample_Good( pSound, iPreferredSampleRate );
|
|
||||||
pSound = pResample;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_iSampleRate = iPreferredSampleRate;
|
m_iSampleRate = iPreferredSampleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we have two channels, and any sounds have only one, convert them by adding a Pan filter. */
|
/* If we have two channels, and any sounds have only one, convert them by adding a Pan filter. */
|
||||||
FOREACH( RageSoundReader *, m_aSounds, it )
|
for (RageSoundReader *it : m_aSounds)
|
||||||
{
|
{
|
||||||
if( (*it)->GetNumChannels() != this->GetNumChannels() )
|
if( it->GetNumChannels() != this->GetNumChannels() )
|
||||||
(*it) = new RageSoundReader_Pan( (*it) );
|
it = new RageSoundReader_Pan( it );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we have more than two channels, then all sounds must have the same number of
|
/* If we have more than two channels, then all sounds must have the same number of
|
||||||
@@ -94,18 +92,18 @@ void RageSoundReader_Merge::Finish( int iPreferredSampleRate )
|
|||||||
if( m_iChannels > 2 )
|
if( m_iChannels > 2 )
|
||||||
{
|
{
|
||||||
vector<RageSoundReader *> aSounds;
|
vector<RageSoundReader *> aSounds;
|
||||||
FOREACH( RageSoundReader *, m_aSounds, it )
|
for (RageSoundReader *it : m_aSounds)
|
||||||
{
|
{
|
||||||
if( (*it)->GetNumChannels() != m_iChannels )
|
if( it->GetNumChannels() != m_iChannels )
|
||||||
{
|
{
|
||||||
LOG->Warn( "Discarded sound with %i channels, not %i",
|
LOG->Warn( "Discarded sound with %i channels, not %i",
|
||||||
(*it)->GetNumChannels(), m_iChannels );
|
it->GetNumChannels(), m_iChannels );
|
||||||
delete (*it);
|
delete it;
|
||||||
(*it) = NULL;
|
it = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
aSounds.push_back( *it );
|
aSounds.push_back( it );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_aSounds = aSounds;
|
m_aSounds = aSounds;
|
||||||
|
|||||||
Reference in New Issue
Block a user