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