1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-24 16:38:07 +02:00

Bug 2517 - Mix Stereo To Mono incorrectly changes sample rate to Project Rate without resampling - it should resample to the project rate

This commit is contained in:
Leland Lucius 2021-01-23 01:45:32 -06:00
parent 7427653ef6
commit e9d4a8e538

View File

@ -93,7 +93,24 @@ bool EffectStereoToMono::Process()
if (channels.size() > 1) if (channels.size() > 1)
{ {
auto right = *channels.rbegin(); auto right = *channels.rbegin();
if (left->GetRate() == right->GetRate()) auto leftRate = left->GetRate();
auto rightRate = right->GetRate();
if (leftRate != rightRate)
{
if (leftRate != mProjectRate)
{
mProgress->SetMessage(XO("Resampling left channel"));
left->Resample(mProjectRate, mProgress);
leftRate = mProjectRate;
}
if (rightRate != mProjectRate)
{
mProgress->SetMessage(XO("Resampling right channel"));
right->Resample(mProjectRate, mProgress);
rightRate = mProjectRate;
}
}
{ {
auto start = wxMin(left->TimeToLongSamples(left->GetStartTime()), auto start = wxMin(left->TimeToLongSamples(left->GetStartTime()),
right->TimeToLongSamples(right->GetStartTime())); right->TimeToLongSamples(right->GetStartTime()));
@ -111,6 +128,8 @@ bool EffectStereoToMono::Process()
sampleCount curTime = 0; sampleCount curTime = 0;
bool refreshIter = false; bool refreshIter = false;
mProgress->SetMessage(XO("Mixing down to mono"));
trackRange = mOutputTracks->SelectedLeaders< WaveTrack >(); trackRange = mOutputTracks->SelectedLeaders< WaveTrack >();
while (trackRange.first != trackRange.second) while (trackRange.first != trackRange.second)
{ {
@ -120,17 +139,14 @@ bool EffectStereoToMono::Process()
{ {
auto right = *channels.rbegin(); auto right = *channels.rbegin();
if (left->GetRate() == right->GetRate()) bGoodResult = ProcessOne(curTime, totalTime, left, right);
if (!bGoodResult)
{ {
bGoodResult = ProcessOne(curTime, totalTime, left, right); break;
if (!bGoodResult)
{
break;
}
// The right channel has been deleted, so we must restart from the beginning
refreshIter = true;
} }
// The right channel has been deleted, so we must restart from the beginning
refreshIter = true;
} }
if (refreshIter) if (refreshIter)