Rewrite many iterations over tracks and channels in src/effects
This commit is contained in:
parent
b94e8fec96
commit
aee4005044
|
@ -389,19 +389,15 @@ bool EffectAutoDuck::Process()
|
|||
if (!cancel)
|
||||
{
|
||||
CopyInputTracks(); // Set up mOutputTracks.
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
Track *iterTrack = iter.First();
|
||||
|
||||
int trackNum = 0;
|
||||
|
||||
while (iterTrack)
|
||||
for( auto iterTrack : mOutputTracks->Selected< WaveTrack >() )
|
||||
{
|
||||
WaveTrack* t = (WaveTrack*)iterTrack;
|
||||
|
||||
for (size_t i = 0; i < regions.size(); i++)
|
||||
{
|
||||
const AutoDuckRegion& region = regions[i];
|
||||
if (ApplyDuckFade(trackNum, t, region.t0, region.t1))
|
||||
if (ApplyDuckFade(trackNum, iterTrack, region.t0, region.t1))
|
||||
{
|
||||
cancel = true;
|
||||
break;
|
||||
|
@ -411,7 +407,6 @@ bool EffectAutoDuck::Process()
|
|||
if (cancel)
|
||||
break;
|
||||
|
||||
iterTrack = iter.Next();
|
||||
trackNum++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -172,10 +172,8 @@ bool EffectClickRemoval::Process()
|
|||
bool bGoodResult = true;
|
||||
mbDidSomething = false;
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
int count = 0;
|
||||
while (track) {
|
||||
for( auto track : mOutputTracks->Selected< WaveTrack >() ) {
|
||||
double trackStart = track->GetStartTime();
|
||||
double trackEnd = track->GetEndTime();
|
||||
double t0 = mT0 < trackStart? trackStart: mT0;
|
||||
|
@ -193,7 +191,6 @@ bool EffectClickRemoval::Process()
|
|||
}
|
||||
}
|
||||
|
||||
track = (WaveTrack *) iter.Next();
|
||||
count++;
|
||||
}
|
||||
if (bGoodResult && !mbDidSomething) // Processing successful, but ineffective.
|
||||
|
|
|
@ -43,24 +43,26 @@
|
|||
bool ContrastDialog::GetDB(float &dB)
|
||||
{
|
||||
float rms = float(0.0);
|
||||
int numberSelecteTracks = 0;
|
||||
|
||||
// For stereo tracks: sqrt((mean(L)+mean(R))/2)
|
||||
bool isStereo = false;
|
||||
double meanSq = 0.0;
|
||||
|
||||
AudacityProject *p = GetActiveProject();
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, p->GetTracks());
|
||||
WaveTrack *t = (WaveTrack *) iter.First();
|
||||
while (t) {
|
||||
numberSelecteTracks++;
|
||||
if (numberSelecteTracks > 1 && !isStereo) {
|
||||
AudacityMessageDialog m(NULL, _("You can only measure one track at a time."), _("Error"), wxOK);
|
||||
m.ShowModal();
|
||||
return false;
|
||||
}
|
||||
isStereo = t->GetLinked();
|
||||
auto range =
|
||||
p->GetTracks()->SelectedLeaders< const WaveTrack >();
|
||||
auto numberSelectedTracks = range.size();
|
||||
if (numberSelectedTracks > 1) {
|
||||
AudacityMessageDialog m(NULL, _("You can only measure one track at a time."), _("Error"), wxOK);
|
||||
m.ShowModal();
|
||||
return false;
|
||||
}
|
||||
if(numberSelectedTracks == 0) {
|
||||
wxMessageDialog m(NULL, _("Please select an audio track."), _("Error"), wxOK);
|
||||
m.ShowModal();
|
||||
return false;
|
||||
}
|
||||
|
||||
for ( auto t : TrackList::Channels( *range.begin() ) ) {
|
||||
wxASSERT(mT0 <= mT1);
|
||||
|
||||
// Ignore whitespace beyond ends of track.
|
||||
|
@ -87,19 +89,13 @@ bool ContrastDialog::GetDB(float &dB)
|
|||
}
|
||||
|
||||
// Don't throw in this analysis dialog
|
||||
rms = ((WaveTrack *)t)->GetRMS(mT0, mT1, false);
|
||||
rms = t->GetRMS(mT0, mT1, false);
|
||||
meanSq += rms * rms;
|
||||
t = (WaveTrack *) iter.Next();
|
||||
}
|
||||
// TODO: This works for stereo, provided the audio clips are in both channels.
|
||||
// We should really count gaps between clips as silence.
|
||||
rms = (meanSq > 0.0)? sqrt(meanSq/(double)numberSelecteTracks) : 0.0;
|
||||
rms = (meanSq > 0.0)? sqrt(meanSq/(double)numberSelectedTracks) : 0.0;
|
||||
|
||||
if(numberSelecteTracks == 0) {
|
||||
AudacityMessageDialog m(NULL, _("Please select an audio track."), _("Error"), wxOK);
|
||||
m.ShowModal();
|
||||
return false;
|
||||
}
|
||||
// Gives warning C4056, Overflow in floating-point constant arithmetic
|
||||
// -INFINITY is intentional here.
|
||||
// Looks like we are stuck with this warning, as
|
||||
|
@ -344,9 +340,8 @@ void ContrastDialog::OnClose(wxCommandEvent & WXUNUSED(event))
|
|||
void ContrastDialog::OnGetForeground(wxCommandEvent & /*event*/)
|
||||
{
|
||||
AudacityProject *p = GetActiveProject();
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, p->GetTracks());
|
||||
|
||||
for (Track *t = iter.First(); t; t = iter.Next()) {
|
||||
for ( auto t : p->GetTracks()->Selected< const WaveTrack >() ) {
|
||||
mForegroundStartT->SetValue(p->mViewInfo.selectedRegion.t0());
|
||||
mForegroundEndT->SetValue(p->mViewInfo.selectedRegion.t1());
|
||||
}
|
||||
|
@ -360,9 +355,8 @@ void ContrastDialog::OnGetForeground(wxCommandEvent & /*event*/)
|
|||
void ContrastDialog::OnGetBackground(wxCommandEvent & /*event*/)
|
||||
{
|
||||
AudacityProject *p = GetActiveProject();
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, p->GetTracks());
|
||||
|
||||
for (Track *t = iter.First(); t; t = iter.Next()) {
|
||||
for ( auto t : p->GetTracks()->Selected< const WaveTrack >() ) {
|
||||
mBackgroundStartT->SetValue(p->mViewInfo.selectedRegion.t0());
|
||||
mBackgroundEndT->SetValue(p->mViewInfo.selectedRegion.t1());
|
||||
}
|
||||
|
|
|
@ -2262,25 +2262,8 @@ void Effect::ReplaceProcessedTracks(const bool bGoodResult)
|
|||
|
||||
void Effect::CountWaveTracks()
|
||||
{
|
||||
mNumTracks = 0;
|
||||
mNumGroups = 0;
|
||||
|
||||
TrackListOfKindIterator iter(Track::Wave, mTracks);
|
||||
Track *t = iter.First();
|
||||
|
||||
while(t) {
|
||||
if (!t->GetSelected()) {
|
||||
t = iter.Next();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (t->GetKind() == Track::Wave) {
|
||||
mNumTracks++;
|
||||
if (!t->GetLinked())
|
||||
mNumGroups++;
|
||||
}
|
||||
t = iter.Next();
|
||||
}
|
||||
mNumTracks = mTracks->Selected< const WaveTrack >().size();
|
||||
mNumGroups = mTracks->SelectedLeaders< const WaveTrack >().size();
|
||||
}
|
||||
|
||||
double Effect::CalcPreviewInputLength(double previewLength)
|
||||
|
@ -2574,17 +2557,13 @@ void Effect::Preview(bool dryOnly)
|
|||
}
|
||||
}
|
||||
else {
|
||||
TrackListOfKindIterator iter(Track::Wave, saveTracks);
|
||||
WaveTrack *src = (WaveTrack *) iter.First();
|
||||
while (src)
|
||||
{
|
||||
for (auto src : saveTracks->Any< const WaveTrack >()) {
|
||||
if (src->GetSelected() || mPreviewWithNotSelected) {
|
||||
auto dest = src->Copy(mT0, t1);
|
||||
dest->SetSelected(src->GetSelected());
|
||||
static_cast<WaveTrack*>(dest.get())->SetDisplay(WaveTrack::NoDisplay);
|
||||
mTracks->Add(std::move(dest));
|
||||
}
|
||||
src = (WaveTrack *) iter.Next();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -471,23 +471,20 @@ bool EffectEqualization::Init()
|
|||
{
|
||||
int selcount = 0;
|
||||
double rate = 0.0;
|
||||
TrackListIterator iter(GetActiveProject()->GetTracks());
|
||||
Track *t = iter.First();
|
||||
while (t) {
|
||||
if (t->GetSelected() && t->GetKind() == Track::Wave) {
|
||||
WaveTrack *track = (WaveTrack *)t;
|
||||
if (selcount==0) {
|
||||
rate = track->GetRate();
|
||||
|
||||
auto trackRange =
|
||||
GetActiveProject()->GetTracks()->Selected< const WaveTrack >();
|
||||
if (trackRange) {
|
||||
rate = (*(trackRange.first++)) -> GetRate();
|
||||
++selcount;
|
||||
|
||||
for (auto track : trackRange) {
|
||||
if (track->GetRate() != rate) {
|
||||
Effect::MessageBox(_("To apply Equalization, all selected tracks must have the same sample rate."));
|
||||
return(false);
|
||||
}
|
||||
else {
|
||||
if (track->GetRate() != rate) {
|
||||
Effect::MessageBox(_("To apply Equalization, all selected tracks must have the same sample rate."));
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
selcount++;
|
||||
++selcount;
|
||||
}
|
||||
t = iter.Next();
|
||||
}
|
||||
|
||||
mHiFreq = rate / 2.0;
|
||||
|
@ -532,10 +529,8 @@ bool EffectEqualization::Process()
|
|||
this->CopyInputTracks(); // Set up mOutputTracks.
|
||||
bool bGoodResult = true;
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
int count = 0;
|
||||
while (track) {
|
||||
for( auto track : mOutputTracks->Selected< WaveTrack >() ) {
|
||||
double trackStart = track->GetStartTime();
|
||||
double trackEnd = track->GetEndTime();
|
||||
double t0 = mT0 < trackStart? trackStart: mT0;
|
||||
|
@ -553,7 +548,6 @@ bool EffectEqualization::Process()
|
|||
}
|
||||
}
|
||||
|
||||
track = (WaveTrack *) iter.Next();
|
||||
count++;
|
||||
}
|
||||
|
||||
|
|
|
@ -296,10 +296,9 @@ bool EffectEqualization48x::Process(EffectEqualization* effectEqualization)
|
|||
mEffectEqualization->mM=(mEffectEqualization->mM&(~15))+1;
|
||||
AllocateBuffersWorkers(sMathPath&MATH_FUNCTION_THREADED);
|
||||
auto cleanup = finally( [&] { FreeBuffersWorkers(); } );
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mEffectEqualization->mOutputTracks.get());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
int count = 0;
|
||||
while (track) {
|
||||
for( auto track :
|
||||
mEffectEqualization->mOutputTracks->Selected< WaveTrack >() {
|
||||
double trackStart = track->GetStartTime();
|
||||
double trackEnd = track->GetEndTime();
|
||||
double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0;
|
||||
|
@ -313,7 +312,6 @@ bool EffectEqualization48x::Process(EffectEqualization* effectEqualization)
|
|||
if( bBreakLoop )
|
||||
break;
|
||||
}
|
||||
track = (WaveTrack *) iter.Next();
|
||||
count++;
|
||||
}
|
||||
|
||||
|
@ -340,10 +338,7 @@ bool EffectEqualization48x::TrackCompare()
|
|||
|
||||
TrackList SecondOutputTracks;
|
||||
|
||||
//iterate over tracks of type trackType (All types if Track::All)
|
||||
TrackListOfKindIterator aIt(mEffectEqualization->mOutputTracksType, mEffectEqualization->mTracks);
|
||||
|
||||
for (Track *aTrack = aIt.First(); aTrack; aTrack = aIt.Next()) {
|
||||
for (auto aTrack : mEffectEqualization->mTracks->Any< WaveTrack >()) {
|
||||
|
||||
// Include selected tracks, plus sync-lock selected tracks for Track::All.
|
||||
if (aTrack->GetSelected() ||
|
||||
|
@ -357,15 +352,12 @@ bool EffectEqualization48x::TrackCompare()
|
|||
}
|
||||
}
|
||||
|
||||
for(int i=0;i<2;i++) {
|
||||
SelectedTrackListOfKindIterator iter
|
||||
(Track::Wave, i
|
||||
? mEffectEqualization->mOutputTracks.get()
|
||||
: &SecondOutputTracks);
|
||||
for(int i = 0; i < 2; i++) {
|
||||
i?sMathPath=sMathPath:sMathPath=0;
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
int count = 0;
|
||||
while (track) {
|
||||
for( auto track :
|
||||
( i ? mEffectEqualization->mOutputTracks.get()
|
||||
: &SecondOutputTracks ) -> Selected< WaveTrack >() {
|
||||
double trackStart = track->GetStartTime();
|
||||
double trackEnd = track->GetEndTime();
|
||||
double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0;
|
||||
|
@ -379,16 +371,14 @@ bool EffectEqualization48x::TrackCompare()
|
|||
if( bBreakLoop )
|
||||
break;
|
||||
}
|
||||
track = (WaveTrack *) iter.Next();
|
||||
count++;
|
||||
}
|
||||
}
|
||||
SelectedTrackListOfKindIterator
|
||||
iter(Track::Wave, mEffectEqualization->mOutputTracks.get());
|
||||
SelectedTrackListOfKindIterator iter2(Track::Wave, &SecondOutputTracks);
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
WaveTrack *track2 = (WaveTrack *) iter2.First();
|
||||
while (track) {
|
||||
|
||||
auto iter2 = (SecondOutputTracks.Selected< const WaveTrack >()).first;
|
||||
auto track2 = *iter2;
|
||||
for ( auto track :
|
||||
mEffectEqualization->mOutputTracks->Selected< const WaveTrack >() {
|
||||
double trackStart = track->GetStartTime();
|
||||
double trackEnd = track->GetEndTime();
|
||||
double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0;
|
||||
|
@ -400,8 +390,7 @@ bool EffectEqualization48x::TrackCompare()
|
|||
auto len = end - start;
|
||||
DeltaTrack(track, track2, start, len);
|
||||
}
|
||||
track = (WaveTrack *) iter.Next();
|
||||
track2 = (WaveTrack *) iter2.Next();
|
||||
track2 = * ++iter2;
|
||||
}
|
||||
mEffectEqualization->ReplaceProcessedTracks(!bBreakLoop);
|
||||
return bBreakLoop; // return !bBreakLoop ?
|
||||
|
@ -447,12 +436,10 @@ bool EffectEqualization48x::Benchmark(EffectEqualization* effectEqualization)
|
|||
mEffectEqualization->mM=(mEffectEqualization->mM&(~15))+1;
|
||||
AllocateBuffersWorkers(MATH_FUNCTION_THREADED);
|
||||
auto cleanup = finally( [&] { FreeBuffersWorkers(); } );
|
||||
SelectedTrackListOfKindIterator
|
||||
iter(Track::Wave, mEffectEqualization->mOutputTracks.get());
|
||||
long times[] = { 0,0,0,0,0 };
|
||||
wxStopWatch timer;
|
||||
mBenching=true;
|
||||
for(int i=0;i<5 && !bBreakLoop;i++) {
|
||||
mBenching = true;
|
||||
for(int i = 0; i < 5 && !bBreakLoop; i++) {
|
||||
int localMathPath;
|
||||
switch(i) {
|
||||
case 0: localMathPath=MATH_FUNCTION_SSE|MATH_FUNCTION_THREADED;
|
||||
|
@ -471,11 +458,11 @@ bool EffectEqualization48x::Benchmark(EffectEqualization* effectEqualization)
|
|||
break;
|
||||
default: localMathPath=-1;
|
||||
}
|
||||
if(localMathPath>=0) {
|
||||
if(localMathPath >= 0) {
|
||||
timer.Start();
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
int count = 0;
|
||||
while (track) {
|
||||
for (auto track :
|
||||
mEffectEqualization->mOutputTracks->Selected< WaveTrack >() {
|
||||
double trackStart = track->GetStartTime();
|
||||
double trackEnd = track->GetEndTime();
|
||||
double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0;
|
||||
|
@ -489,7 +476,6 @@ bool EffectEqualization48x::Benchmark(EffectEqualization* effectEqualization)
|
|||
if( bBreakLoop )
|
||||
break;
|
||||
}
|
||||
track = (WaveTrack *) iter.Next();
|
||||
count++;
|
||||
}
|
||||
times[i]=timer.Time();
|
||||
|
|
|
@ -264,7 +264,7 @@ public:
|
|||
|
||||
bool Process(EffectNoiseReduction &effect,
|
||||
Statistics &statistics, TrackFactory &factory,
|
||||
SelectedTrackListOfKindIterator &iter, double mT0, double mT1);
|
||||
TrackList &tracks, double mT0, double mT1);
|
||||
|
||||
private:
|
||||
bool ProcessOne(EffectNoiseReduction &effect,
|
||||
|
@ -606,8 +606,7 @@ bool EffectNoiseReduction::Process()
|
|||
|
||||
this->CopyInputTracks(); // Set up mOutputTracks.
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
auto track = * (mOutputTracks->Selected< const WaveTrack >()).begin();
|
||||
if (!track)
|
||||
return false;
|
||||
|
||||
|
@ -633,7 +632,8 @@ bool EffectNoiseReduction::Process()
|
|||
, mF0, mF1
|
||||
#endif
|
||||
);
|
||||
bool bGoodResult = worker.Process(*this, *mStatistics, *mFactory, iter, mT0, mT1);
|
||||
bool bGoodResult = worker.Process
|
||||
(*this, *mStatistics, *mFactory, *mOutputTracks, mT0, mT1);
|
||||
if (mSettings->mDoProfile) {
|
||||
if (bGoodResult)
|
||||
mSettings->mDoProfile = false; // So that "repeat last effect" will reduce noise
|
||||
|
@ -650,11 +650,10 @@ EffectNoiseReduction::Worker::~Worker()
|
|||
|
||||
bool EffectNoiseReduction::Worker::Process
|
||||
(EffectNoiseReduction &effect, Statistics &statistics, TrackFactory &factory,
|
||||
SelectedTrackListOfKindIterator &iter, double inT0, double inT1)
|
||||
TrackList &tracks, double inT0, double inT1)
|
||||
{
|
||||
int count = 0;
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
while (track) {
|
||||
for ( auto track : tracks.Selected< WaveTrack >() ) {
|
||||
if (track->GetRate() != mSampleRate) {
|
||||
if (mDoProfile)
|
||||
effect.Effect::MessageBox(_("All noise profile data must have the same sample rate."));
|
||||
|
@ -677,7 +676,6 @@ bool EffectNoiseReduction::Worker::Process
|
|||
count, track, start, len))
|
||||
return false;
|
||||
}
|
||||
track = (WaveTrack *) iter.Next();
|
||||
++count;
|
||||
}
|
||||
|
||||
|
|
|
@ -208,10 +208,8 @@ bool EffectNoiseRemoval::Process()
|
|||
this->CopyInputTracks(); // Set up mOutputTracks.
|
||||
bool bGoodResult = true;
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
int count = 0;
|
||||
while (track) {
|
||||
for( auto track : mOutputTracks->Selected< WaveTrack >() ) {
|
||||
double trackStart = track->GetStartTime();
|
||||
double trackEnd = track->GetEndTime();
|
||||
double t0 = mT0 < trackStart? trackStart: mT0;
|
||||
|
@ -227,7 +225,6 @@ bool EffectNoiseRemoval::Process()
|
|||
break;
|
||||
}
|
||||
}
|
||||
track = (WaveTrack *) iter.Next();
|
||||
count++;
|
||||
}
|
||||
|
||||
|
|
|
@ -164,11 +164,9 @@ double EffectPaulstretch::CalcPreviewInputLength(double previewLength)
|
|||
bool EffectPaulstretch::Process()
|
||||
{
|
||||
CopyInputTracks();
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
m_t1=mT1;
|
||||
int count=0;
|
||||
while (track) {
|
||||
for( auto track : mOutputTracks->Selected< WaveTrack >() ) {
|
||||
double trackStart = track->GetStartTime();
|
||||
double trackEnd = track->GetEndTime();
|
||||
double t0 = mT0 < trackStart? trackStart: mT0;
|
||||
|
@ -179,7 +177,6 @@ bool EffectPaulstretch::Process()
|
|||
return false;
|
||||
}
|
||||
|
||||
track = (WaveTrack *) iter.Next();
|
||||
count++;
|
||||
}
|
||||
mT1=m_t1;
|
||||
|
|
|
@ -74,10 +74,8 @@ bool EffectRepair::Process()
|
|||
this->CopyInputTracks(); // Set up mOutputTracks. //v This may be too much copying for EffectRepair.
|
||||
bool bGoodResult = true;
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
int count = 0;
|
||||
while (track) {
|
||||
for( auto track : mOutputTracks->Selected< WaveTrack >() ) {
|
||||
const
|
||||
double trackStart = track->GetStartTime();
|
||||
const double repair_t0 = std::max(mT0, trackStart);
|
||||
|
@ -125,7 +123,6 @@ bool EffectRepair::Process()
|
|||
}
|
||||
}
|
||||
|
||||
track = (WaveTrack *) iter.Next();
|
||||
count++;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,10 +32,8 @@ bool EffectSimpleMono::Process()
|
|||
this->CopyInputTracks(); // Set up mOutputTracks.
|
||||
bool bGoodResult = true;
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
WaveTrack* pOutWaveTrack = (WaveTrack*)(iter.First());
|
||||
mCurTrackNum = 0;
|
||||
while (pOutWaveTrack != NULL)
|
||||
for( auto pOutWaveTrack : mOutputTracks->Selected< WaveTrack >() )
|
||||
{
|
||||
//Get start and end times from track
|
||||
double trackStart = pOutWaveTrack->GetStartTime();
|
||||
|
@ -66,8 +64,6 @@ bool EffectSimpleMono::Process()
|
|||
}
|
||||
}
|
||||
|
||||
//Iterate to the next track
|
||||
pOutWaveTrack = (WaveTrack*)(iter.Next());
|
||||
mCurTrackNum++;
|
||||
}
|
||||
|
||||
|
|
|
@ -75,8 +75,8 @@ bool EffectStereoToMono::Process()
|
|||
this->CopyInputTracks(); // Set up mOutputTracks.
|
||||
bool bGoodResult = true;
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
mLeftTrack = (WaveTrack *)iter.First();
|
||||
auto trackRange = mOutputTracks->Selected< WaveTrack >();
|
||||
mLeftTrack = *trackRange.first;
|
||||
bool refreshIter = false;
|
||||
|
||||
if(mLeftTrack)
|
||||
|
@ -87,13 +87,12 @@ bool EffectStereoToMono::Process()
|
|||
}
|
||||
|
||||
int count = 0;
|
||||
while (mLeftTrack) {
|
||||
if (mLeftTrack->GetKind() == Track::Wave &&
|
||||
mLeftTrack->GetSelected() &&
|
||||
mLeftTrack->GetLinked()) {
|
||||
while ( trackRange.first != trackRange.second ) {
|
||||
mLeftTrack = *trackRange.first;
|
||||
if (mLeftTrack->GetLinked()) {
|
||||
|
||||
// Assume linked track is wave
|
||||
mRightTrack = static_cast<WaveTrack*>(iter.Next());
|
||||
mRightTrack = * ++ trackRange.first;
|
||||
|
||||
if ((mLeftTrack->GetRate() == mRightTrack->GetRate())) {
|
||||
auto leftTrackStart = mLeftTrack->TimeToLongSamples(mLeftTrack->GetStartTime());
|
||||
|
@ -116,12 +115,12 @@ bool EffectStereoToMono::Process()
|
|||
}
|
||||
|
||||
if (refreshIter) {
|
||||
mLeftTrack = (WaveTrack *)iter.First();
|
||||
trackRange = mOutputTracks->Selected< WaveTrack >();
|
||||
refreshIter = false;
|
||||
}
|
||||
else {
|
||||
mLeftTrack = (WaveTrack *)iter.Next();
|
||||
}
|
||||
else
|
||||
++trackRange.first;
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
|
|
|
@ -405,10 +405,10 @@ bool EffectTruncSilence::ProcessAll()
|
|||
auto trackRange0 = inputTracks()->Selected< const WaveTrack >();
|
||||
if (FindSilences(
|
||||
silences, inputTracks(), *trackRange0.begin(), *trackRange0.rbegin())) {
|
||||
TrackListIterator iterOut(mOutputTracks.get());
|
||||
auto trackRange = mOutputTracks->Any();
|
||||
double totalCutLen = 0.0;
|
||||
Track *const first = iterOut.First();
|
||||
if (DoRemoval(silences, 0, 1, first, iterOut.Last(), totalCutLen)) {
|
||||
if (DoRemoval(silences, 0, 1,
|
||||
*trackRange.begin(), *trackRange.rbegin(), totalCutLen)) {
|
||||
mT1 -= totalCutLen;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -47,10 +47,8 @@ bool EffectTwoPassSimpleMono::Process()
|
|||
bool EffectTwoPassSimpleMono::ProcessPass()
|
||||
{
|
||||
//Iterate over each track
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
mCurTrackNum = 0;
|
||||
while (track) {
|
||||
for( auto track : mOutputTracks->Selected< WaveTrack >() ) {
|
||||
//Get start and end times from track
|
||||
double trackStart = track->GetStartTime();
|
||||
double trackEnd = track->GetEndTime();
|
||||
|
@ -85,8 +83,6 @@ bool EffectTwoPassSimpleMono::ProcessPass()
|
|||
return false;
|
||||
}
|
||||
|
||||
//Iterate to the next track
|
||||
track = (WaveTrack *) iter.Next();
|
||||
mCurTrackNum++;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,8 @@ effects from this one class.
|
|||
#include "../../FileNames.h"
|
||||
#include "../../Internat.h"
|
||||
#include "../../LabelTrack.h"
|
||||
#include "../../NoteTrack.h"
|
||||
#include "../../TimeTrack.h"
|
||||
#include "../../prefs/SpectrogramSettings.h"
|
||||
#include "../../Project.h"
|
||||
#include "../../ShuttleGui.h"
|
||||
|
@ -544,8 +546,8 @@ bool NyquistEffect::Init()
|
|||
AudacityProject *project = GetActiveProject();
|
||||
bool bAllowSpectralEditing = true;
|
||||
|
||||
SelectedTrackListOfKindIterator sel(Track::Wave, project->GetTracks());
|
||||
for (WaveTrack *t = (WaveTrack *) sel.First(); t; t = (WaveTrack *) sel.Next()) {
|
||||
for ( auto t :
|
||||
project->GetTracks()->Selected< const WaveTrack >() ) {
|
||||
if (t->GetDisplay() != WaveTrack::Spectrum ||
|
||||
!(t->GetSpectrogramSettings().SpectralSelectionEnabled())) {
|
||||
bAllowSpectralEditing = false;
|
||||
|
@ -622,7 +624,6 @@ bool NyquistEffect::Process()
|
|||
mProgress->Hide();
|
||||
}
|
||||
|
||||
|
||||
mOutputTime = 0;
|
||||
mCount = 0;
|
||||
mProgressIn = 0;
|
||||
|
@ -636,10 +637,8 @@ bool NyquistEffect::Process()
|
|||
|
||||
mTrackIndex = 0;
|
||||
|
||||
mNumSelectedChannels = 0;
|
||||
|
||||
// If in tool mode, then we don't do anything with the track and selection.
|
||||
bool bOnePassTool = (GetType() == EffectTypeTool);
|
||||
const bool bOnePassTool = (GetType() == EffectTypeTool);
|
||||
|
||||
// We must copy all the tracks, because Paste needs label tracks to ensure
|
||||
// correct sync-lock group behavior when the timeline is affected; then we just want
|
||||
|
@ -647,16 +646,7 @@ bool NyquistEffect::Process()
|
|||
if ( !bOnePassTool )
|
||||
CopyInputTracks(true);
|
||||
|
||||
SelectedTrackListOfKindIterator sel(Track::Wave, mOutputTracks.get());
|
||||
for (WaveTrack *t = (WaveTrack *) sel.First(); t; t = (WaveTrack *) sel.Next()) {
|
||||
mNumSelectedChannels++;
|
||||
if (mT1 >= mT0) {
|
||||
if (t->GetLinked()) {
|
||||
mNumSelectedChannels++;
|
||||
sel.Next();
|
||||
}
|
||||
}
|
||||
}
|
||||
mNumSelectedChannels = mOutputTracks->Selected< const WaveTrack >().size();
|
||||
|
||||
mDebugOutput.Clear();
|
||||
if (!mHelpFile.IsEmpty() && !mHelpFileExists) {
|
||||
|
@ -720,8 +710,6 @@ bool NyquistEffect::Process()
|
|||
mProps += wxString::Format(wxT("(putprop '*PROJECT* %d 'PROJECTS)\n"), (int) gAudacityProjects.size());
|
||||
mProps += wxString::Format(wxT("(putprop '*PROJECT* \"%s\" 'NAME)\n"), project->GetName());
|
||||
|
||||
TrackListIterator all(project->GetTracks());
|
||||
Track *t;
|
||||
int numTracks = 0;
|
||||
int numWave = 0;
|
||||
int numLabel = 0;
|
||||
|
@ -729,29 +717,21 @@ bool NyquistEffect::Process()
|
|||
int numTime = 0;
|
||||
wxString waveTrackList = wxT(""); // track positions of selected audio tracks.
|
||||
|
||||
for (t = all.First(); t; t = all.Next())
|
||||
{
|
||||
switch (t->GetKind())
|
||||
{
|
||||
case Track::Wave:
|
||||
auto countRange = project->GetTracks()->Leaders();
|
||||
for (auto t : countRange) {
|
||||
t->TypeSwitch( [&](const WaveTrack *) {
|
||||
numWave++;
|
||||
if (t->GetSelected()) {
|
||||
if (t->GetSelected())
|
||||
waveTrackList += wxString::Format(wxT("%d "), 1 + numTracks);
|
||||
}
|
||||
break;
|
||||
case Track::Label: numLabel++; break;
|
||||
#if defined(USE_MIDI)
|
||||
case Track::Note: numMidi++; break;
|
||||
#endif
|
||||
case Track::Time: numTime++; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
numTracks++;
|
||||
if (t->GetLinked())
|
||||
{
|
||||
all.Next();
|
||||
});
|
||||
numTracks++;
|
||||
}
|
||||
numLabel = countRange.Filter<const LabelTrack>().size();
|
||||
#if defined(USE_MIDI)
|
||||
numMidi = countRange.Filter<const NoteTrack>().size();
|
||||
#endif
|
||||
numTime = countRange.Filter<const TimeTrack>().size();
|
||||
}
|
||||
|
||||
// We use Internat::ToString() rather than "%g" here because we
|
||||
|
@ -789,8 +769,7 @@ bool NyquistEffect::Process()
|
|||
Effect::MessageBox(message, wxOK | wxCENTRE | wxICON_EXCLAMATION, _("Nyquist Error"));
|
||||
}
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
|
||||
mCurTrack[0] = (WaveTrack *) iter.First();
|
||||
auto trackRange = mOutputTracks->Selected< WaveTrack >();
|
||||
|
||||
// Keep track of whether the current track is first selected in its sync-lock group
|
||||
// (we have no idea what the length of the returned audio will be, so we have
|
||||
|
@ -798,19 +777,21 @@ bool NyquistEffect::Process()
|
|||
mFirstInGroup = true;
|
||||
Track *gtLast = NULL;
|
||||
|
||||
while (mCurTrack[0] || bOnePassTool) {
|
||||
for (auto &iter = trackRange.first, &end = trackRange.second;
|
||||
bOnePassTool || iter != end; ++iter) {
|
||||
mCurTrack[0] = *iter;
|
||||
mCurNumChannels = 1;
|
||||
if ((mT1 >= mT0)||bOnePassTool) {
|
||||
if ( (mT1 >= mT0) || bOnePassTool ) {
|
||||
if (bOnePassTool) {
|
||||
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
if (mCurTrack[0]->GetLinked()) {
|
||||
mCurNumChannels = 2;
|
||||
|
||||
mCurTrack[1] = (WaveTrack *)iter.Next();
|
||||
mCurTrack[1] = * ++ iter;
|
||||
if (mCurTrack[1]->GetRate() != mCurTrack[0]->GetRate()) {
|
||||
Effect::MessageBox(_("Sorry, cannot apply effect on stereo tracks where the tracks don't match."),
|
||||
wxOK | wxCENTRE);
|
||||
wxOK | wxCENTRE);
|
||||
success = false;
|
||||
goto finish;
|
||||
}
|
||||
|
@ -840,6 +821,7 @@ bool NyquistEffect::Process()
|
|||
|
||||
mCurLen = std::min(mCurLen, mMaxLen);
|
||||
}
|
||||
|
||||
mProgressIn = 0.0;
|
||||
mProgressOut = 0.0;
|
||||
|
||||
|
@ -914,7 +896,6 @@ bool NyquistEffect::Process()
|
|||
mProgressTot += mProgressIn + mProgressOut;
|
||||
}
|
||||
|
||||
mCurTrack[0] = (WaveTrack *) iter.Next();
|
||||
mCount += mCurNumChannels;
|
||||
}
|
||||
|
||||
|
@ -1112,22 +1093,9 @@ bool NyquistEffect::ProcessOne()
|
|||
//NOTE: Audacity 2.1.3 True if spectral selection is enabled regardless of track view.
|
||||
cmd += wxString::Format(wxT("(putprop '*TRACK* %s 'SPECTRAL-EDIT-ENABLED)\n"), spectralEditp);
|
||||
|
||||
double startTime = 0.0;
|
||||
double endTime = 0.0;
|
||||
|
||||
if (mCurTrack[0]->GetLinked()) {
|
||||
startTime = std::min<double>(mCurTrack[0]->GetStartTime(), mCurTrack[0]->GetLink()->GetStartTime());
|
||||
}
|
||||
else {
|
||||
startTime = mCurTrack[0]->GetStartTime();
|
||||
}
|
||||
|
||||
if (mCurTrack[0]->GetLinked()) {
|
||||
endTime = std::max<double>(mCurTrack[0]->GetEndTime(), mCurTrack[0]->GetLink()->GetEndTime());
|
||||
}
|
||||
else {
|
||||
endTime = mCurTrack[0]->GetEndTime();
|
||||
}
|
||||
auto channels = TrackList::Channels( mCurTrack[0] );
|
||||
double startTime = channels.min( &Track::GetStartTime );
|
||||
double endTime = channels.max( &Track::GetEndTime );
|
||||
|
||||
cmd += wxString::Format(wxT("(putprop '*TRACK* (float %s) 'START-TIME)\n"),
|
||||
Internat::ToString(startTime));
|
||||
|
@ -1415,16 +1383,7 @@ bool NyquistEffect::ProcessOne()
|
|||
mProjectChanged = true;
|
||||
unsigned int numLabels = nyx_get_num_labels();
|
||||
unsigned int l;
|
||||
LabelTrack *ltrack = NULL;
|
||||
|
||||
TrackListIterator iter(mOutputTracks.get());
|
||||
for (Track *t = iter.First(); t; t = iter.Next()) {
|
||||
if (t->GetKind() == Track::Label) {
|
||||
ltrack = (LabelTrack *)t;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
auto ltrack = * mOutputTracks->Any< LabelTrack >().begin();
|
||||
if (!ltrack) {
|
||||
ltrack = static_cast<LabelTrack*>(AddToOutputTracks(mFactory->NewLabelTrack()));
|
||||
}
|
||||
|
@ -1675,12 +1634,10 @@ double NyquistEffect::GetCtrlValue(const wxString &s)
|
|||
* be determined.
|
||||
*
|
||||
AudacityProject *project = GetActiveProject();
|
||||
double rate = INT_MAX;
|
||||
if (project && s.IsSameAs(wxT("half-srate"), false)) {
|
||||
SelectedTrackListOfKindIterator sel(Track::Wave, project->GetTracks());
|
||||
for (WaveTrack *t = (WaveTrack *) sel.First(); t; t = (WaveTrack *) sel.Next()) {
|
||||
rate = std::min(t->GetRate(), rate);
|
||||
}
|
||||
auto rate =
|
||||
project->GetTracks()->Selected< const WaveTrack >()
|
||||
.min( &WaveTrack::GetRate );
|
||||
return (rate / 2.0);
|
||||
}
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue