TrackFactory functions return std::unique_ptr, although some callers...

... release() them for now.
This commit is contained in:
Paul Licameli 2016-03-02 14:59:31 -05:00
parent f42a953752
commit 5ef4dd46a5
31 changed files with 91 additions and 135 deletions

View File

@ -344,7 +344,7 @@ void BenchmarkDialog::OnRun( wxCommandEvent & WXUNUSED(event))
ZoomInfo zoomInfo(0.0, ZoomInfo::GetDefaultZoom());
DirManager *d = new DirManager();
WaveTrack *const t = TrackFactory{ d, &zoomInfo }.NewWaveTrack(int16Sample);
const auto t = TrackFactory{ d, &zoomInfo }.NewWaveTrack(int16Sample);
Track *tmp = NULL;
t->SetRate(1);
@ -533,8 +533,6 @@ void BenchmarkDialog::OnRun( wxCommandEvent & WXUNUSED(event))
if (tmp)
delete tmp;
delete t;
delete[]small1;
delete[]small2;
delete[]block;

View File

@ -319,7 +319,7 @@ bool LabelDialog::TransferDataFromWindow()
wxString name = mTrackNames[tndx + 1].AfterFirst(wxT('-')).Mid(1);
// Create the NEW track and add to track list
LabelTrack *newTrack = mFactory.NewLabelTrack();
LabelTrack *newTrack = mFactory.NewLabelTrack().release();
newTrack->SetName(name);
mTracks->Add(newTrack);
tndx++;
@ -564,14 +564,13 @@ void LabelDialog::OnImport(wxCommandEvent & WXUNUSED(event))
else {
// Create a temporary label track and load the labels
// into it
LabelTrack *lt = mFactory.NewLabelTrack();
auto lt = mFactory.NewLabelTrack();
lt->Import(f);
// Add the labesls to our collection
AddLabels(lt);
AddLabels(lt.get());
// Done with the temporary track
delete lt;
}
// Repopulate the grid
@ -632,7 +631,7 @@ void LabelDialog::OnExport(wxCommandEvent & WXUNUSED(event))
}
// Transfer our collection to a temporary label track
LabelTrack *lt = mFactory.NewLabelTrack();
auto lt = mFactory.NewLabelTrack();
int i;
for (i = 0; i < cnt; i++) {
@ -643,7 +642,6 @@ void LabelDialog::OnExport(wxCommandEvent & WXUNUSED(event))
// Export them and clean
lt->Export(f);
delete lt;
#ifdef __WXMAC__
f.Write(wxTextFileType_Mac);

View File

@ -88,9 +88,9 @@ int LabelTrack::mTextHeight;
int LabelTrack::mFontHeight=-1;
LabelTrack *TrackFactory::NewLabelTrack()
LabelTrack::Holder TrackFactory::NewLabelTrack()
{
return new LabelTrack(mDirManager);
return std::make_unique<LabelTrack>(mDirManager);
}
LabelTrack::LabelTrack(DirManager * projDirManager):

View File

@ -3358,7 +3358,7 @@ bool AudacityProject::OnEffect(const PluginID & ID, int flags)
// No tracks were selected...
if (type == EffectTypeGenerate) {
// Create a NEW track for the generated audio...
newTrack = mTrackFactory->NewWaveTrack();
newTrack = mTrackFactory->NewWaveTrack().release();
mTracks->Add(newTrack);
newTrack->SetSelected(true);
}
@ -4152,17 +4152,14 @@ void AudacityProject::OnPaste()
((WaveTrack *)n)->ClearAndPaste(t0, t1, (WaveTrack *)c, true, true);
}
else {
WaveTrack *tmp;
tmp = mTrackFactory->NewWaveTrack( ((WaveTrack*)n)->GetSampleFormat(), ((WaveTrack*)n)->GetRate());
auto tmp = mTrackFactory->NewWaveTrack( ((WaveTrack*)n)->GetSampleFormat(), ((WaveTrack*)n)->GetRate());
bool bResult = tmp->InsertSilence(0.0, msClipT1 - msClipT0); // MJS: Is this correct?
wxASSERT(bResult); // TO DO: Actually handle this.
wxUnusedVar(bResult);
tmp->Flush();
bPastedSomething |=
((WaveTrack *)n)->ClearAndPaste(t0, t1, tmp, true, true);
delete tmp;
((WaveTrack *)n)->ClearAndPaste(t0, t1, tmp.get(), true, true);
}
}
else if (n->GetKind() == Track::Label && n->GetSelected())
@ -4267,19 +4264,19 @@ bool AudacityProject::HandlePasteNothingSelected()
case Track::Wave:
{
WaveTrack *w = (WaveTrack *)pClip;
pNewTrack = mTrackFactory->NewWaveTrack(w->GetSampleFormat(), w->GetRate());
pNewTrack = mTrackFactory->NewWaveTrack(w->GetSampleFormat(), w->GetRate()).release();
}
break;
#ifdef USE_MIDI
case Track::Note:
pNewTrack = mTrackFactory->NewNoteTrack();
pNewTrack = mTrackFactory->NewNoteTrack().release();
break;
#endif // USE_MIDI
case Track::Label:
pNewTrack = mTrackFactory->NewLabelTrack();
pNewTrack = mTrackFactory->NewLabelTrack().release();
break;
case Track::Time:
pNewTrack = mTrackFactory->NewTimeTrack();
pNewTrack = mTrackFactory->NewTimeTrack().release();
break;
default:
pClip = iterClip.Next();
@ -4358,7 +4355,7 @@ void AudacityProject::OnPasteNewLabel()
// If no match found, add one
if (!t) {
t = GetTrackFactory()->NewLabelTrack();
t = GetTrackFactory()->NewLabelTrack().release();
mTracks->Add(t);
}
@ -5495,7 +5492,7 @@ void AudacityProject::OnImportLabels()
return;
}
LabelTrack *newTrack = GetTrackFactory()->NewLabelTrack();
LabelTrack *newTrack = GetTrackFactory()->NewLabelTrack().release();
wxString sTrackName;
wxFileName::SplitPath(fileName, NULL, NULL, &sTrackName, NULL);
newTrack->SetName(sTrackName);
@ -5538,7 +5535,7 @@ void AudacityProject::OnImportMIDI()
void AudacityProject::DoImportMIDI(const wxString &fileName)
{
NoteTrack *newTrack = GetTrackFactory()->NewNoteTrack();
NoteTrack *newTrack = GetTrackFactory()->NewNoteTrack().release();
if (::ImportMIDI(fileName, newTrack)) {
@ -6253,7 +6250,7 @@ void AudacityProject::OnScoreAlign()
void AudacityProject::OnNewWaveTrack()
{
WaveTrack *t = mTrackFactory->NewWaveTrack(mDefaultFormat, mRate);
WaveTrack *t = mTrackFactory->NewWaveTrack(mDefaultFormat, mRate).release();
SelectNone();
mTracks->Add(t);
@ -6267,7 +6264,7 @@ void AudacityProject::OnNewWaveTrack()
void AudacityProject::OnNewStereoTrack()
{
WaveTrack *t = mTrackFactory->NewWaveTrack(mDefaultFormat, mRate);
WaveTrack *t = mTrackFactory->NewWaveTrack(mDefaultFormat, mRate).release();
t->SetChannel(Track::LeftChannel);
SelectNone();
@ -6275,7 +6272,7 @@ void AudacityProject::OnNewStereoTrack()
t->SetSelected(true);
t->SetLinked (true);
t = mTrackFactory->NewWaveTrack(mDefaultFormat, mRate);
t = mTrackFactory->NewWaveTrack(mDefaultFormat, mRate).release();
t->SetChannel(Track::RightChannel);
mTracks->Add(t);
@ -6289,7 +6286,7 @@ void AudacityProject::OnNewStereoTrack()
void AudacityProject::OnNewLabelTrack()
{
LabelTrack *t = GetTrackFactory()->NewLabelTrack();
LabelTrack *t = GetTrackFactory()->NewLabelTrack().release();
SelectNone();
@ -6309,7 +6306,7 @@ void AudacityProject::OnNewTimeTrack()
return;
}
TimeTrack *t = mTrackFactory->NewTimeTrack();
TimeTrack *t = mTrackFactory->NewTimeTrack().release();
SelectNone();
@ -6385,7 +6382,7 @@ int AudacityProject::DoAddLabel(const SelectedRegion &region, bool preserveFocus
// If none found, start a NEW label track and use it
if (!lt) {
lt = GetTrackFactory()->NewLabelTrack();
lt = GetTrackFactory()->NewLabelTrack().release();
mTracks->Add(lt);
}

View File

@ -121,7 +121,7 @@ bool MixAndRender(TrackList *tracks, TrackFactory *trackFactory,
oneinput = true;
// only one input track (either 1 mono or one linked stereo pair)
WaveTrack *mixLeft = trackFactory->NewWaveTrack(format, rate);
WaveTrack *mixLeft = trackFactory->NewWaveTrack(format, rate).release();
if (oneinput)
mixLeft->SetName(usefulIter.First()->GetName()); /* set name of output track to be the same as the sole input track */
else
@ -132,7 +132,7 @@ bool MixAndRender(TrackList *tracks, TrackFactory *trackFactory,
mixLeft->SetChannel(Track::MonoChannel);
}
else {
mixRight = trackFactory->NewWaveTrack(format, rate);
mixRight = trackFactory->NewWaveTrack(format, rate).release();
if (oneinput) {
if (usefulIter.First()->GetLink() != NULL) // we have linked track
mixLeft->SetName(usefulIter.First()->GetLink()->GetName()); /* set name to match input track's right channel!*/

View File

@ -98,9 +98,9 @@ SONFNS(AutoSave)
NoteTrack *TrackFactory::NewNoteTrack()
NoteTrack::Holder TrackFactory::NewNoteTrack()
{
return new NoteTrack(mDirManager);
return std::make_unique<NoteTrack>(mDirManager);
}
NoteTrack::NoteTrack(DirManager * projDirManager):

View File

@ -3147,27 +3147,27 @@ XMLTagHandler *AudacityProject::HandleXMLChild(const wxChar *tag)
}
if (!wxStrcmp(tag, wxT("wavetrack"))) {
WaveTrack *newTrack = mTrackFactory->NewWaveTrack();
WaveTrack *newTrack = mTrackFactory->NewWaveTrack().release();
mTracks->Add(newTrack);
return newTrack;
}
#ifdef USE_MIDI
if (!wxStrcmp(tag, wxT("notetrack"))) {
NoteTrack *newTrack = mTrackFactory->NewNoteTrack();
NoteTrack *newTrack = mTrackFactory->NewNoteTrack().release();
mTracks->Add(newTrack);
return newTrack;
}
#endif // USE_MIDI
if (!wxStrcmp(tag, wxT("labeltrack"))) {
LabelTrack *newTrack = mTrackFactory->NewLabelTrack();
LabelTrack *newTrack = mTrackFactory->NewLabelTrack().release();
mTracks->Add(newTrack);
return newTrack;
}
if (!wxStrcmp(tag, wxT("timetrack"))) {
TimeTrack *newTrack = mTrackFactory->NewTimeTrack();
TimeTrack *newTrack = mTrackFactory->NewTimeTrack().release();
mTracks->Add(newTrack);
return newTrack;
}
@ -3593,7 +3593,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
{
numWaveTracks++;
pWaveTrack = (WaveTrack*)pTrack;
pSavedTrack = mTrackFactory->DuplicateWaveTrack(*pWaveTrack);
pSavedTrack = mTrackFactory->DuplicateWaveTrack(*pWaveTrack).release();
pSavedTrackList.Add(pSavedTrack);
}

View File

@ -29,9 +29,9 @@
#define TIMETRACK_MIN 0.01
#define TIMETRACK_MAX 10.0
TimeTrack *TrackFactory::NewTimeTrack()
std::unique_ptr<TimeTrack> TrackFactory::NewTimeTrack()
{
return new TimeTrack(mDirManager, mZoomInfo);
return std::make_unique<TimeTrack>(mDirManager, mZoomInfo);
}
TimeTrack::TimeTrack(DirManager *projDirManager, const ZoomInfo *zoomInfo):

View File

@ -520,13 +520,13 @@ class AUDACITY_DLL_API TrackFactory
public:
// These methods are defined in WaveTrack.cpp, NoteTrack.cpp,
// LabelTrack.cpp, and TimeTrack.cpp respectively
WaveTrack* DuplicateWaveTrack(WaveTrack &orig);
WaveTrack *NewWaveTrack(sampleFormat format = (sampleFormat)0,
std::unique_ptr<WaveTrack> DuplicateWaveTrack(WaveTrack &orig);
std::unique_ptr<WaveTrack> NewWaveTrack(sampleFormat format = (sampleFormat)0,
double rate = 0);
LabelTrack *NewLabelTrack();
TimeTrack *NewTimeTrack();
std::unique_ptr<LabelTrack> NewLabelTrack();
std::unique_ptr<TimeTrack> NewTimeTrack();
#if defined(USE_MIDI)
NoteTrack *NewNoteTrack();
std::unique_ptr<NoteTrack> NewNoteTrack();
#endif
};

View File

@ -63,15 +63,17 @@ using std::max;
bool WaveTrack::mMonoAsVirtualStereo;
#endif
WaveTrack* TrackFactory::DuplicateWaveTrack(WaveTrack &orig)
WaveTrack::Holder TrackFactory::DuplicateWaveTrack(WaveTrack &orig)
{
return (WaveTrack*)(orig.Duplicate().release());
return std::unique_ptr<WaveTrack>
{ static_cast<WaveTrack*>(orig.Duplicate().release()) };
}
WaveTrack *TrackFactory::NewWaveTrack(sampleFormat format, double rate)
WaveTrack::Holder TrackFactory::NewWaveTrack(sampleFormat format, double rate)
{
return new WaveTrack(mDirManager, format, rate);
return std::unique_ptr<WaveTrack>
{ safenew WaveTrack(mDirManager, format, rate) };
}
WaveTrack::WaveTrack(DirManager *projDirManager, sampleFormat format, double rate) :
@ -1166,16 +1168,15 @@ bool WaveTrack::SyncLockAdjust(double oldT1, double newT1)
if (!p) return false;
TrackFactory *f = p->GetTrackFactory();
if (!f) return false;
WaveTrack *tmp = f->NewWaveTrack(GetSampleFormat(), GetRate());
auto tmp = f->NewWaveTrack(GetSampleFormat(), GetRate());
bool bResult = tmp->InsertSilence(0.0, newT1 - oldT1);
wxASSERT(bResult); // TO DO: Actually handle this.
wxUnusedVar(bResult);
tmp->Flush();
bResult = Paste(oldT1, tmp);
bResult = Paste(oldT1, tmp.get());
wxASSERT(bResult); // TO DO: Actually handle this.
wxUnusedVar(bResult);
delete tmp;
}
}
else if (newT1 < oldT1) {

View File

@ -475,7 +475,7 @@ bool EffectChangeSpeed::ProcessOne(WaveTrack * track,
// initialization, per examples of Mixer::Mixer and
// EffectSoundTouch::ProcessOne
WaveTrack * outputTrack = mFactory->NewWaveTrack(track->GetSampleFormat(),
auto outputTrack = mFactory->NewWaveTrack(track->GetSampleFormat(),
track->GetRate());
//Get the length of the selection (as double). len is
@ -552,15 +552,12 @@ bool EffectChangeSpeed::ProcessOne(WaveTrack * track,
if (bResult)
{
SetTimeWarper(new LinearTimeWarper(mCurT0, mCurT0, mCurT1, mCurT0 + newLength));
bResult = track->ClearAndPaste(mCurT0, mCurT1, outputTrack, true, false, GetTimeWarper());
bResult = track->ClearAndPaste(mCurT0, mCurT1, outputTrack.get(), true, false, GetTimeWarper());
}
if (newLength > mMaxNewLength)
mMaxNewLength = newLength;
// Delete the outputTrack now that its data is inserted in place
delete outputTrack;
return bResult;
}

View File

@ -1592,8 +1592,7 @@ bool Effect::ProcessTrack(int count,
int chans = wxMin(mNumAudioOut, mNumChannels);
WaveTrack *genLeft = NULL;
WaveTrack *genRight = NULL;
std::unique_ptr<WaveTrack> genLeft, genRight;
sampleCount genLength = 0;
bool isGenerator = GetType() == EffectTypeGenerate;
bool isProcessor = GetType() == EffectTypeProcess;
@ -1719,16 +1718,6 @@ bool Effect::ProcessTrack(int count,
}
catch(...)
{
if (genLeft)
{
delete genLeft;
}
if (genRight)
{
delete genRight;
}
return false;
}
wxASSERT(processed == curBlockSize);
@ -1886,14 +1875,12 @@ bool Effect::ProcessTrack(int count,
// Transfer the data from the temporary tracks to the actual ones
genLeft->Flush();
// mT1 gives us the NEW selection. We want to replace up to GetSel1().
left->ClearAndPaste(mT0, p->GetSel1(), genLeft, true, true, &warper);
delete genLeft;
left->ClearAndPaste(mT0, p->GetSel1(), genLeft.get(), true, true, &warper);
if (genRight)
{
genRight->Flush();
right->ClearAndPaste(mT0, mT1, genRight, true, true, &warper);
delete genRight;
right->ClearAndPaste(mT0, mT1, genRight.get(), true, true, &warper);
}
}
@ -2135,7 +2122,7 @@ void Effect::AddToOutputTracks(Track *t)
Effect::AddedAnalysisTrack::AddedAnalysisTrack(Effect *pEffect, const wxString &name)
: mpEffect(pEffect)
{
std::unique_ptr < LabelTrack > pTrack{ pEffect->mFactory->NewLabelTrack() };
LabelTrack::Holder pTrack{ pEffect->mFactory->NewLabelTrack() };
mpTrack = pTrack.get();
if (!name.empty())
pTrack->SetName(name);

View File

@ -1076,7 +1076,7 @@ bool EffectEqualization::ProcessOne(int count, WaveTrack * t,
{
// create a NEW WaveTrack to hold all of the output, including 'tails' each end
AudacityProject *p = GetActiveProject();
WaveTrack *output = p->GetTrackFactory()->NewWaveTrack(floatSample, t->GetRate());
auto output = p->GetTrackFactory()->NewWaveTrack(floatSample, t->GetRate());
int L = windowSize - (mM - 1); //Process L samples at a go
sampleCount s = start;
@ -1233,7 +1233,6 @@ bool EffectEqualization::ProcessOne(int count, WaveTrack * t,
delete[] buffer;
delete[] window1;
delete[] window2;
delete output;
return bLoopSuccess;
}

View File

@ -65,7 +65,7 @@ bool Generator::Process()
{
AudacityProject *p = GetActiveProject();
// Create a temporary track
std::unique_ptr<WaveTrack> tmp(
WaveTrack::Holder tmp(
mFactory->NewWaveTrack(track->GetSampleFormat(),
track->GetRate())
);

View File

@ -1291,7 +1291,7 @@ bool EffectNoiseReduction::Worker::ProcessOne
StartNewTrack();
std::unique_ptr<WaveTrack> outputTrack(
WaveTrack::Holder outputTrack(
mDoProfile ? NULL
: factory.NewWaveTrack(track->GetSampleFormat(), track->GetRate()));

View File

@ -288,7 +288,7 @@ bool EffectPaulstretch::ProcessOne(WaveTrack *track,double t0,double t1,int coun
double adjust_amount=(double)len/((double)len-((double)stretch_buf_size*2.0));
amount=1.0+(amount-1.0)*adjust_amount;
WaveTrack * outputTrack = mFactory->NewWaveTrack(track->GetSampleFormat(),track->GetRate());
auto outputTrack = mFactory->NewWaveTrack(track->GetSampleFormat(),track->GetRate());
PaulStretch stretch(amount,stretch_buf_size,track->GetRate());
@ -347,14 +347,13 @@ bool EffectPaulstretch::ProcessOne(WaveTrack *track,double t0,double t1,int coun
outputTrack->Flush();
track->Clear(t0,t1);
bool success = track->Paste(t0,outputTrack);
bool success = track->Paste(t0, outputTrack.get());
if (!cancelled && success){
m_t1 = mT0 + outputTrack->GetEndTime();
}
delete []buffer0;
delete outputTrack;
return !cancelled;
};

View File

@ -52,8 +52,6 @@ public:
if(leftBuffer) free(leftBuffer);
if(rightBuffer) free(rightBuffer);
if(SBSMSBuf) free(SBSMSBuf);
if(outputLeftTrack) delete outputLeftTrack;
if(outputRightTrack) delete outputRightTrack;
if(quality) delete quality;
if(sbsms) delete sbsms;
if(iface) delete iface;
@ -79,8 +77,8 @@ public:
// Not required by callbacks, but makes for easier cleanup
Resampler *resampler;
SBSMSQuality *quality;
WaveTrack *outputLeftTrack;
WaveTrack *outputRightTrack;
std::unique_ptr<WaveTrack> outputLeftTrack;
std::unique_ptr<WaveTrack> outputRightTrack;
};
class SBSMSEffectInterface final : public SBSMSInterfaceSliding {
@ -413,7 +411,7 @@ bool EffectSBSMS::Process()
rb.outputRightTrack->Flush();
bool bResult =
leftTrack->ClearAndPaste(mCurT0, mCurT1, rb.outputLeftTrack,
leftTrack->ClearAndPaste(mCurT0, mCurT1, rb.outputLeftTrack.get(),
true, false, GetTimeWarper());
wxASSERT(bResult); // TO DO: Actually handle this.
wxUnusedVar(bResult);
@ -421,7 +419,7 @@ bool EffectSBSMS::Process()
if(rightTrack)
{
bResult =
rightTrack->ClearAndPaste(mCurT0, mCurT1, rb.outputRightTrack,
rightTrack->ClearAndPaste(mCurT0, mCurT1, rb.outputRightTrack.get(),
true, false, GetTimeWarper());
wxASSERT(bResult); // TO DO: Actually handle this.
}

View File

@ -176,12 +176,11 @@ bool EffectSoundTouch::Process()
bool EffectSoundTouch::ProcessOne(WaveTrack *track,
sampleCount start, sampleCount end)
{
WaveTrack *outputTrack;
sampleCount s;
mSoundTouch->setSampleRate((unsigned int)(track->GetRate()+0.5));
outputTrack = mFactory->NewWaveTrack(track->GetSampleFormat(), track->GetRate());
auto outputTrack = mFactory->NewWaveTrack(track->GetSampleFormat(), track->GetRate());
//Get the length of the buffer (as double). len is
//used simple to calculate a progress meter, so it is easier
@ -245,14 +244,11 @@ bool EffectSoundTouch::ProcessOne(WaveTrack *track,
// Take the output track and insert it in place of the original
// sample data
track->ClearAndPaste(mCurT0, mCurT1, outputTrack, true, false, GetTimeWarper());
track->ClearAndPaste(mCurT0, mCurT1, outputTrack.get(), true, false, GetTimeWarper());
double newLength = outputTrack->GetEndTime();
m_maxNewLength = wxMax(m_maxNewLength, newLength);
// Delete the outputTrack now that its data is inserted in place
delete outputTrack;
//Return true because the effect processing succeeded.
return true;
}
@ -262,9 +258,9 @@ bool EffectSoundTouch::ProcessStereo(WaveTrack* leftTrack, WaveTrack* rightTrack
{
mSoundTouch->setSampleRate((unsigned int)(leftTrack->GetRate()+0.5));
WaveTrack* outputLeftTrack = mFactory->NewWaveTrack(leftTrack->GetSampleFormat(),
auto outputLeftTrack = mFactory->NewWaveTrack(leftTrack->GetSampleFormat(),
leftTrack->GetRate());
WaveTrack* outputRightTrack = mFactory->NewWaveTrack(rightTrack->GetSampleFormat(),
auto outputRightTrack = mFactory->NewWaveTrack(rightTrack->GetSampleFormat(),
rightTrack->GetRate());
//Get the length of the buffer (as double). len is
@ -310,7 +306,7 @@ bool EffectSoundTouch::ProcessStereo(WaveTrack* leftTrack, WaveTrack* rightTrack
//Get back samples from SoundTouch
unsigned int outputCount = mSoundTouch->numSamples();
if (outputCount > 0)
this->ProcessStereoResults(outputCount, outputLeftTrack, outputRightTrack);
this->ProcessStereoResults(outputCount, outputLeftTrack.get(), outputRightTrack.get());
//Increment sourceSampleCount one blockfull of samples
sourceSampleCount += blockSize;
@ -336,7 +332,7 @@ bool EffectSoundTouch::ProcessStereo(WaveTrack* leftTrack, WaveTrack* rightTrack
unsigned int outputCount = mSoundTouch->numSamples();
if (outputCount > 0)
this->ProcessStereoResults(outputCount, outputLeftTrack, outputRightTrack);
this->ProcessStereoResults(outputCount, outputLeftTrack.get(), outputRightTrack.get());
// Flush the output WaveTracks (since they're buffered, too)
outputLeftTrack->Flush();
@ -349,8 +345,8 @@ bool EffectSoundTouch::ProcessStereo(WaveTrack* leftTrack, WaveTrack* rightTrack
// Take the output tracks and insert in place of the original
// sample data.
leftTrack->ClearAndPaste(mCurT0, mCurT1, outputLeftTrack, true, false, GetTimeWarper());
rightTrack->ClearAndPaste(mCurT0, mCurT1, outputRightTrack, true, false, GetTimeWarper());
leftTrack->ClearAndPaste(mCurT0, mCurT1, outputLeftTrack.get(), true, false, GetTimeWarper());
rightTrack->ClearAndPaste(mCurT0, mCurT1, outputRightTrack.get(), true, false, GetTimeWarper());
// Track the longest result length
double newLength = outputLeftTrack->GetEndTime();
@ -358,10 +354,6 @@ bool EffectSoundTouch::ProcessStereo(WaveTrack* leftTrack, WaveTrack* rightTrack
newLength = outputRightTrack->GetEndTime();
m_maxNewLength = wxMax(m_maxNewLength, newLength);
// Delete the outputTracks now that their data are inserted in place.
delete outputLeftTrack;
delete outputRightTrack;
//Return true because the effect processing succeeded.
return true;
}

View File

@ -124,8 +124,6 @@ bool EffectStereoToMono::Process()
count++;
}
if(mOutTrack)
delete mOutTrack;
this->ReplaceProcessedTracks(bGoodResult);
return bGoodResult;
}
@ -164,7 +162,7 @@ bool EffectStereoToMono::ProcessOne(int count)
double minStart = wxMin(mLeftTrack->GetStartTime(), mRightTrack->GetStartTime());
bResult &= mLeftTrack->Clear(mLeftTrack->GetStartTime(), mLeftTrack->GetEndTime());
bResult &= mOutTrack->Flush();
bResult &= mLeftTrack->Paste(minStart, mOutTrack);
bResult &= mLeftTrack->Paste(minStart, mOutTrack.get());
mLeftTrack->SetLinked(false);
mRightTrack->SetLinked(false);
mLeftTrack->SetChannel(Track::MonoChannel);

View File

@ -53,7 +53,7 @@ private:
sampleCount mEnd;
WaveTrack *mLeftTrack;
WaveTrack *mRightTrack;
WaveTrack *mOutTrack;
std::unique_ptr<WaveTrack> mOutTrack;
};
#endif

View File

@ -1120,7 +1120,7 @@ bool NyquistEffect::ProcessOne()
}
if (!ltrack) {
ltrack = mFactory->NewLabelTrack();
ltrack = mFactory->NewLabelTrack().release();
AddToOutputTracks((Track *)ltrack);
}
@ -1184,8 +1184,7 @@ bool NyquistEffect::ProcessOne()
if (!success) {
for(i = 0; i < outChannels; i++) {
delete mOutputTrack[i];
mOutputTrack[i] = NULL;
mOutputTrack[i].reset();
}
return false;
}
@ -1202,8 +1201,7 @@ bool NyquistEffect::ProcessOne()
wxT("Nyquist"),
wxOK | wxCENTRE, mUIParent);
for (i = 0; i < outChannels; i++) {
delete mOutputTrack[i];
mOutputTrack[i] = NULL;
mOutputTrack[i].reset();
}
return true;
}
@ -1213,10 +1211,10 @@ bool NyquistEffect::ProcessOne()
WaveTrack *out;
if (outChannels == mCurNumChannels) {
out = mOutputTrack[i];
out = mOutputTrack[i].get();
}
else {
out = mOutputTrack[0];
out = mOutputTrack[0].get();
}
if (mMergeClips < 0) {
@ -1246,8 +1244,7 @@ bool NyquistEffect::ProcessOne()
}
for (i = 0; i < outChannels; i++) {
delete mOutputTrack[i];
mOutputTrack[i] = NULL;
mOutputTrack[i].reset();
}
mProjectChanged = true;
return true;

View File

@ -224,7 +224,7 @@ private:
sampleCount mCurBufferStart[2];
sampleCount mCurBufferLen[2];
WaveTrack *mOutputTrack[2];
std::unique_ptr<WaveTrack> mOutputTrack[2];
wxArrayString mCategories;

View File

@ -509,7 +509,7 @@ int FFmpegImportFileHandle::Import(TrackFactory *trackFactory,
int c;
for (c = 0; c < mScs[s]->m_stream->codec->channels; c++)
{
mChannels[s][c] = trackFactory->NewWaveTrack(mScs[s]->m_osamplefmt, mScs[s]->m_stream->codec->sample_rate);
mChannels[s][c] = trackFactory->NewWaveTrack(mScs[s]->m_osamplefmt, mScs[s]->m_stream->codec->sample_rate).release();
if (mScs[s]->m_stream->codec->channels == 2)
{

View File

@ -442,7 +442,7 @@ int FLACImportFileHandle::Import(TrackFactory *trackFactory,
unsigned long c;
for (c = 0; c < mNumChannels; c++) {
mChannels[c] = trackFactory->NewWaveTrack(mFormat, mSampleRate);
mChannels[c] = trackFactory->NewWaveTrack(mFormat, mSampleRate).release();
if (mNumChannels == 2) {
switch (c) {

View File

@ -489,7 +489,7 @@ enum mad_flow output_cb(void *_data,
Read(wxT("/SamplingRate/DefaultProjectSampleFormat"), floatSample);
for(chn = 0; chn < channels; chn++) {
data->channels[chn] = data->trackFactory->NewWaveTrack(format, samplerate);
data->channels[chn] = data->trackFactory->NewWaveTrack(format, samplerate).release();
data->channels[chn]->SetChannel(Track::MonoChannel);
}

View File

@ -261,7 +261,7 @@ int OggImportFileHandle::Import(TrackFactory *trackFactory, Track ***outTracks,
mChannels[i] = new WaveTrack *[vi->channels];
for (c = 0; c < vi->channels; c++) {
mChannels[i][c] = trackFactory->NewWaveTrack(mFormat, vi->rate);
mChannels[i][c] = trackFactory->NewWaveTrack(mFormat, vi->rate).release();
if (vi->channels == 2) {
switch (c) {

View File

@ -342,7 +342,7 @@ int PCMImportFileHandle::Import(TrackFactory *trackFactory,
int c;
for (c = 0; c < mInfo.channels; c++) {
channels[c] = trackFactory->NewWaveTrack(mFormat, mInfo.samplerate);
channels[c] = trackFactory->NewWaveTrack(mFormat, mInfo.samplerate).release();
if (mInfo.channels > 1)
switch (c) {

View File

@ -191,7 +191,7 @@ int ImportRaw(wxWindow *parent, const wxString &fileName,
int c;
for (c = 0; c < numChannels; c++) {
channels[c] = trackFactory->NewWaveTrack(format, rate);
channels[c] = trackFactory->NewWaveTrack(format, rate).release();
if (numChannels > 1)
switch (c) {

View File

@ -882,14 +882,13 @@ void ControlToolBar::OnRecord(wxCommandEvent &evt)
tracksCopy = *trackList;
}
WaveTrack *newTrack = p->GetTrackFactory()->NewWaveTrack();
auto newTrack = p->GetTrackFactory()->NewWaveTrack();
newTrack->InsertSilence(0.0, t0 - t1);
newTrack->Flush();
wt->Clear(t1, t0);
bool bResult = wt->Paste(t1, newTrack);
bool bResult = wt->Paste(t1, newTrack.get());
wxASSERT(bResult); // TO DO: Actually handle this.
wxUnusedVar(bResult);
delete newTrack;
}
newRecordingTracks.push_back(wt);
}
@ -921,7 +920,7 @@ void ControlToolBar::OnRecord(wxCommandEvent &evt)
wxString baseTrackName = recordingNameCustom? defaultRecordingTrackName : defaultTrackName;
for (int c = 0; c < recordingChannels; c++) {
WaveTrack *newTrack = p->GetTrackFactory()->NewWaveTrack();
WaveTrack *newTrack = p->GetTrackFactory()->NewWaveTrack().release();
newTrack->SetOffset(t0);
wxString nameSuffix = wxString(wxT(""));

View File

@ -92,7 +92,6 @@ TranscriptionToolBar::TranscriptionToolBar()
: ToolBar(TranscriptionBarID, _("Transcription"), wxT("Transcription"))
{
mPlaySpeed = 1.0 * 100.0;
mTimeTrack = NULL;
#ifdef EXPERIMENTAL_VOICE_DETECTION
mVk = new VoiceKey();
#endif
@ -103,10 +102,6 @@ TranscriptionToolBar::~TranscriptionToolBar()
#ifdef EXPERIMENTAL_VOICE_DETECTION
delete mVk;
#endif
if (mTimeTrack) {
delete mTimeTrack;
mTimeTrack = NULL;
}
}
void TranscriptionToolBar::Create(wxWindow * parent)
@ -463,7 +458,7 @@ void TranscriptionToolBar::PlayAtSpeed(bool looped, bool cutPreview)
#endif
AudioIOStartStreamOptions options(p->GetDefaultPlayOptions());
options.playLooped = looped;
options.timeTrack = mTimeTrack;
options.timeTrack = mTimeTrack.get();
p->GetControlToolBar()->PlayPlayRegion
(SelectedRegion(playRegionStart, playRegionEnd),
options,

View File

@ -16,6 +16,7 @@
#include "ToolBar.h"
#include "../Experimental.h"
#include "../MemoryX.h"
#include <wx/brush.h>
#include <wx/pen.h>
@ -152,7 +153,7 @@ class TranscriptionToolBar final : public ToolBar {
int mBackgroundWidth;
int mBackgroundHeight;
TimeTrack *mTimeTrack;
std::unique_ptr<TimeTrack> mTimeTrack;
public: