mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-16 08:37:42 +02:00
Effect::inputTracks() now gives only const access
This commit is contained in:
parent
1be3187b99
commit
2e11844f6a
@ -180,11 +180,9 @@ bool EffectAmplify::Init()
|
||||
{
|
||||
mPeak = 0.0;
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, inputTracks());
|
||||
|
||||
for (Track *t = iter.First(); t; t = iter.Next())
|
||||
for (auto t : inputTracks()->Selected< const WaveTrack >())
|
||||
{
|
||||
auto pair = ((WaveTrack *)t)->GetMinMax(mT0, mT1); // may throw
|
||||
auto pair = t->GetMinMax(mT0, mT1); // may throw
|
||||
const float min = pair.first, max = pair.second;
|
||||
float newpeak = (fabs(min) > fabs(max) ? fabs(min) : fabs(max));
|
||||
|
||||
|
@ -209,13 +209,10 @@ bool EffectAutoDuck::Init()
|
||||
{
|
||||
mControlTrack = NULL;
|
||||
|
||||
TrackListIterator iter(inputTracks());
|
||||
Track *t = iter.First();
|
||||
|
||||
bool lastWasSelectedWaveTrack = false;
|
||||
const WaveTrack *controlTrackCandidate = NULL;
|
||||
|
||||
while(t)
|
||||
for (auto t : inputTracks()->Any())
|
||||
{
|
||||
if (lastWasSelectedWaveTrack && !t->GetSelected()) {
|
||||
// This could be the control track, so remember it
|
||||
|
@ -409,8 +409,7 @@ void EffectChangePitch::DeduceFrequencies()
|
||||
{
|
||||
// As a neat trick, attempt to get the frequency of the note at the
|
||||
// beginning of the selection.
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, inputTracks());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
auto track = *( inputTracks()->Selected< const WaveTrack >() ).first;
|
||||
if (track) {
|
||||
double rate = track->GetRate();
|
||||
|
||||
|
@ -362,14 +362,9 @@ bool EffectCompressor::InitPass1()
|
||||
DisableSecondPass();
|
||||
|
||||
// Find the maximum block length required for any track
|
||||
size_t maxlen = 0;
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, inputTracks());
|
||||
WaveTrack *track = (WaveTrack *) iter.First();
|
||||
while (track) {
|
||||
maxlen = std::max(maxlen, track->GetMaxBlockSize());
|
||||
//Iterate to the next track
|
||||
track = (WaveTrack *) iter.Next();
|
||||
}
|
||||
size_t maxlen = inputTracks()->Selected< const WaveTrack >().max(
|
||||
&WaveTrack::GetMaxBlockSize
|
||||
);
|
||||
mFollow1.reset();
|
||||
mFollow2.reset();
|
||||
// Allocate buffers for the envelope
|
||||
|
@ -459,7 +459,7 @@ protected:
|
||||
double mSampleRate;
|
||||
SelectedRegion *mpSelectedRegion{};
|
||||
TrackFactory *mFactory;
|
||||
TrackList *inputTracks() const { return mTracks; }
|
||||
const TrackList *inputTracks() const { return mTracks; }
|
||||
std::shared_ptr<TrackList> mOutputTracks; // used only if CopyInputTracks() is called.
|
||||
double mT0;
|
||||
double mT1;
|
||||
|
@ -588,8 +588,7 @@ void EffectEqualization::PopulateOrExchange(ShuttleGui & S)
|
||||
|
||||
LoadCurves();
|
||||
|
||||
TrackListOfKindIterator iter(Track::Wave, inputTracks());
|
||||
WaveTrack *t = (WaveTrack *) iter.First();
|
||||
const auto t = *inputTracks()->Any< const WaveTrack >().first;
|
||||
mHiFreq = (t ? t->GetRate() : GetActiveProject()->GetRate()) / 2.0;
|
||||
mLoFreq = loFreqI;
|
||||
|
||||
|
@ -108,26 +108,20 @@ bool EffectFindClipping::Process()
|
||||
Maybe<ModifiedAnalysisTrack> modifiedTrack;
|
||||
const wxString name{ _("Clipping") };
|
||||
|
||||
LabelTrack *lt = NULL;
|
||||
TrackListOfKindIterator iter(Track::Label, inputTracks());
|
||||
for (Track *t = iter.First(); t; t = iter.Next()) {
|
||||
if (t->GetName() == name) {
|
||||
lt = (LabelTrack *)t;
|
||||
break;
|
||||
}
|
||||
}
|
||||
auto clt = *inputTracks()->Any< const LabelTrack >().find_if(
|
||||
[&]( const Track *track ){ return track->GetName() == name; } );
|
||||
|
||||
if (!lt)
|
||||
LabelTrack *lt{};
|
||||
if (!clt)
|
||||
addedTrack = (AddAnalysisTrack(name)), lt = addedTrack->get();
|
||||
else
|
||||
modifiedTrack.create(ModifyAnalysisTrack(lt, name)), lt = modifiedTrack->get();
|
||||
modifiedTrack.create(ModifyAnalysisTrack(clt, name)),
|
||||
lt = modifiedTrack->get();
|
||||
|
||||
int count = 0;
|
||||
|
||||
// JC: Only process selected tracks.
|
||||
SelectedTrackListOfKindIterator waves(Track::Wave, inputTracks());
|
||||
WaveTrack *t = (WaveTrack *) waves.First();
|
||||
while (t) {
|
||||
for (auto t : inputTracks()->Selected< const WaveTrack >()) {
|
||||
double trackStart = t->GetStartTime();
|
||||
double trackEnd = t->GetEndTime();
|
||||
double t0 = mT0 < trackStart ? trackStart : mT0;
|
||||
@ -144,7 +138,6 @@ bool EffectFindClipping::Process()
|
||||
}
|
||||
|
||||
count++;
|
||||
t = (WaveTrack *) waves.Next();
|
||||
}
|
||||
|
||||
// No cancellation, so commit the addition of the track.
|
||||
|
@ -336,30 +336,26 @@ bool EffectScienFilter::Init()
|
||||
int selcount = 0;
|
||||
double rate = 0.0;
|
||||
|
||||
TrackListOfKindIterator iter(Track::Wave, inputTracks());
|
||||
WaveTrack *t = (WaveTrack *) iter.First();
|
||||
auto trackRange = inputTracks()->Selected< const WaveTrack >();
|
||||
auto t = *trackRange.begin();
|
||||
|
||||
mNyquist = (t ? t->GetRate() : GetActiveProject()->GetRate()) / 2.0;
|
||||
|
||||
while (t)
|
||||
for (auto t : trackRange)
|
||||
{
|
||||
if (t->GetSelected())
|
||||
if (selcount == 0)
|
||||
{
|
||||
if (selcount == 0)
|
||||
{
|
||||
rate = t->GetRate();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (t->GetRate() != rate)
|
||||
{
|
||||
Effect::MessageBox(_("To apply a filter, all selected tracks must have the same sample rate."));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
selcount++;
|
||||
rate = t->GetRate();
|
||||
}
|
||||
t = (WaveTrack *) iter.Next();
|
||||
else
|
||||
{
|
||||
if (t->GetRate() != rate)
|
||||
{
|
||||
Effect::MessageBox(_("To apply a filter, all selected tracks must have the same sample rate."));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
selcount++;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -243,12 +243,9 @@ double EffectTruncSilence::CalcPreviewInputLength(double /* previewLength */)
|
||||
// Start with the whole selection silent
|
||||
silences.push_back(Region(mT0, mT1));
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, inputTracks());
|
||||
int whichTrack = 0;
|
||||
|
||||
for (Track *t = iter.First(); t; t = iter.Next()) {
|
||||
WaveTrack *const wt = static_cast<WaveTrack *>(t);
|
||||
|
||||
for (auto wt : inputTracks()->Selected< const WaveTrack >()) {
|
||||
RegionList trackSilences;
|
||||
|
||||
auto index = wt->TimeToLongSamples(mT0);
|
||||
@ -334,17 +331,17 @@ bool EffectTruncSilence::ProcessIndependently()
|
||||
|
||||
// Check if it's permissible
|
||||
{
|
||||
for (auto track : inputTracks()->SelectedLeaders< WaveTrack >() ) {
|
||||
for (auto track : inputTracks()->SelectedLeaders< const WaveTrack >() ) {
|
||||
if (syncLock) {
|
||||
Track *const link = track->GetLink();
|
||||
SyncLockedTracksIterator syncIter(inputTracks());
|
||||
for (Track *track2 = syncIter.StartWith(track); track2; track2 = syncIter.Next()) {
|
||||
if (track2->GetKind() == Track::Wave &&
|
||||
!(track2 == track || track2 == link) &&
|
||||
track2->GetSelected()) {
|
||||
::Effect::MessageBox(_("When truncating independently, there may only be one selected audio track in each Sync-Locked Track Group."));
|
||||
return false;
|
||||
}
|
||||
auto channels = TrackList::Channels(track);
|
||||
auto otherTracks =
|
||||
TrackList::SyncLockGroup(track).Filter<const WaveTrack>()
|
||||
+ &Track::IsSelected
|
||||
- [&](const Track *pTrack){
|
||||
return channels.contains(pTrack); };
|
||||
if (otherTracks) {
|
||||
::Effect::MessageBox(_("When truncating independently, there may only be one selected audio track in each Sync-Locked Track Group."));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -405,8 +402,9 @@ bool EffectTruncSilence::ProcessAll()
|
||||
// This list should always be kept in order.
|
||||
RegionList silences;
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, inputTracks());
|
||||
if (FindSilences(silences, inputTracks(), iter.First(), iter.Last())) {
|
||||
auto trackRange0 = inputTracks()->Selected< const WaveTrack >();
|
||||
if (FindSilences(
|
||||
silences, inputTracks(), *trackRange0.begin(), *trackRange0.rbegin())) {
|
||||
TrackListIterator iterOut(mOutputTracks.get());
|
||||
double totalCutLen = 0.0;
|
||||
Track *const first = iterOut.First();
|
||||
@ -420,20 +418,18 @@ bool EffectTruncSilence::ProcessAll()
|
||||
}
|
||||
|
||||
bool EffectTruncSilence::FindSilences
|
||||
(RegionList &silences, TrackList *list, Track *firstTrack, Track *lastTrack)
|
||||
(RegionList &silences, const TrackList *list,
|
||||
const Track *firstTrack, const Track *lastTrack)
|
||||
{
|
||||
// Start with the whole selection silent
|
||||
silences.push_back(Region(mT0, mT1));
|
||||
|
||||
// Remove non-silent regions in each track
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, list);
|
||||
int whichTrack = 0;
|
||||
bool lastSeen = false;
|
||||
for (Track *t = iter.StartWith(firstTrack); !lastSeen && t; t = iter.Next())
|
||||
for (auto wt :
|
||||
list->Selected< const WaveTrack >()
|
||||
.StartingWith( firstTrack ).EndingAfter( lastTrack ) )
|
||||
{
|
||||
lastSeen = (t == lastTrack);
|
||||
WaveTrack *const wt = static_cast<WaveTrack *>(t);
|
||||
|
||||
// Smallest silent region to detect in frames
|
||||
auto minSilenceFrames =
|
||||
sampleCount(std::max(mInitialAllowedSilence, DEF_MinTruncMs) * wt->GetRate());
|
||||
|
@ -90,7 +90,8 @@ private:
|
||||
bool ProcessIndependently();
|
||||
bool ProcessAll();
|
||||
bool FindSilences
|
||||
(RegionList &silences, TrackList *list, Track *firstTrack, Track *lastTrack);
|
||||
(RegionList &silences, const TrackList *list,
|
||||
const Track *firstTrack, const Track *lastTrack);
|
||||
bool DoRemoval
|
||||
(const RegionList &silences, unsigned iGroup, unsigned nGroups, Track *firstTrack, Track *lastTrack,
|
||||
double &totalCutLen);
|
||||
|
@ -297,12 +297,9 @@ bool VampEffect::SetAutomationParameters(CommandParameters & parms)
|
||||
|
||||
bool VampEffect::Init()
|
||||
{
|
||||
TrackListOfKindIterator iter(Track::Wave, inputTracks());
|
||||
WaveTrack *left = (WaveTrack *)iter.First();
|
||||
|
||||
mRate = 0.0;
|
||||
|
||||
while (left)
|
||||
for (auto left : inputTracks()->Leaders< const WaveTrack >() )
|
||||
{
|
||||
if (mRate == 0.0)
|
||||
{
|
||||
@ -311,16 +308,16 @@ bool VampEffect::Init()
|
||||
|
||||
if (left->GetLinked())
|
||||
{
|
||||
WaveTrack *right = (WaveTrack *)iter.Next();
|
||||
auto right = static_cast<const WaveTrack*>( left->GetLink() );
|
||||
|
||||
// PRL: Track rate might not match individual clip rates.
|
||||
// So is this check not adequate?
|
||||
if (left->GetRate() != right->GetRate())
|
||||
{
|
||||
Effect::MessageBox(_("Sorry, Vamp Plug-ins cannot be run on stereo tracks where the individual channels of the track do not match."));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
left = (WaveTrack *)iter.Next();
|
||||
}
|
||||
|
||||
if (mRate <= 0.0)
|
||||
@ -348,12 +345,8 @@ bool VampEffect::Process()
|
||||
return false;
|
||||
}
|
||||
|
||||
TrackListOfKindIterator iter(Track::Wave, inputTracks());
|
||||
|
||||
int count = 0;
|
||||
|
||||
WaveTrack *left = (WaveTrack *)iter.First();
|
||||
|
||||
bool multiple = false;
|
||||
unsigned prevTrackChannels = 0;
|
||||
|
||||
@ -368,18 +361,18 @@ bool VampEffect::Process()
|
||||
|
||||
std::vector<std::shared_ptr<Effect::AddedAnalysisTrack>> addedTracks;
|
||||
|
||||
while (left)
|
||||
for (auto left : inputTracks()->Leaders< const WaveTrack >() )
|
||||
{
|
||||
sampleCount lstart, rstart = 0;
|
||||
sampleCount len;
|
||||
GetSamples(left, &lstart, &len);
|
||||
|
||||
WaveTrack *right = NULL;
|
||||
unsigned channels = 1;
|
||||
|
||||
const WaveTrack *right{};
|
||||
if (left->GetLinked())
|
||||
{
|
||||
right = (WaveTrack *)iter.Next();
|
||||
right = static_cast< const WaveTrack* >( left->GetLink() );
|
||||
channels = 2;
|
||||
GetSamples(right, &rstart, &len);
|
||||
}
|
||||
@ -519,8 +512,6 @@ bool VampEffect::Process()
|
||||
AddFeatures(ltrack, features);
|
||||
|
||||
prevTrackChannels = channels;
|
||||
|
||||
left = (WaveTrack *)iter.Next();
|
||||
}
|
||||
|
||||
// All completed without cancellation, so commit the addition of tracks now
|
||||
|
Loading…
x
Reference in New Issue
Block a user