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:
parent
7427653ef6
commit
e9d4a8e538
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user