TrackFactory functions return std::unique_ptr, although some callers...
... release() them for now.
This commit is contained in:
parent
f42a953752
commit
5ef4dd46a5
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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 ®ion, 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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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!*/
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
10
src/Track.h
10
src/Track.h
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
);
|
||||
|
|
|
@ -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()));
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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.
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -53,7 +53,7 @@ private:
|
|||
sampleCount mEnd;
|
||||
WaveTrack *mLeftTrack;
|
||||
WaveTrack *mRightTrack;
|
||||
WaveTrack *mOutTrack;
|
||||
std::unique_ptr<WaveTrack> mOutTrack;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -224,7 +224,7 @@ private:
|
|||
sampleCount mCurBufferStart[2];
|
||||
sampleCount mCurBufferLen[2];
|
||||
|
||||
WaveTrack *mOutputTrack[2];
|
||||
std::unique_ptr<WaveTrack> mOutputTrack[2];
|
||||
|
||||
wxArrayString mCategories;
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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(""));
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
Loading…
Reference in New Issue