MixAndRender returns unique_ptr results (in a std::pair)
This commit is contained in:
parent
3015a9c8d9
commit
c4fc7e2bf0
|
@ -5607,14 +5607,15 @@ bool AudacityProject::DoEditMetadata
|
|||
|
||||
void AudacityProject::HandleMixAndRender(bool toNewTrack)
|
||||
{
|
||||
WaveTrack *newLeft = NULL;
|
||||
WaveTrack *newRight = NULL;
|
||||
|
||||
wxGetApp().SetMissingAliasedFileWarningShouldShow(true);
|
||||
|
||||
if (::MixAndRender(mTracks, mTrackFactory, mRate, mDefaultFormat, 0.0, 0.0,
|
||||
&newLeft, &newRight)) {
|
||||
auto results =
|
||||
::MixAndRender(mTracks, mTrackFactory, mRate, mDefaultFormat, 0.0, 0.0);
|
||||
auto &uNewLeft = results.first, &uNewRight = results.second;
|
||||
const auto newLeft = uNewLeft.get();
|
||||
const auto newRight = uNewRight.get();
|
||||
|
||||
if (newLeft) {
|
||||
// Remove originals, get stats on what tracks were mixed
|
||||
|
||||
TrackListIterator iter(mTracks);
|
||||
|
@ -5644,9 +5645,9 @@ void AudacityProject::HandleMixAndRender(bool toNewTrack)
|
|||
|
||||
// Add NEW tracks
|
||||
|
||||
mTracks->Add(newLeft);
|
||||
mTracks->Add(uNewLeft.release());
|
||||
if (newRight)
|
||||
mTracks->Add(newRight);
|
||||
mTracks->Add(uNewRight.release());
|
||||
|
||||
// If we're just rendering (not mixing), keep the track name the same
|
||||
if (selectedCount==1) {
|
||||
|
|
28
src/Mix.cpp
28
src/Mix.cpp
|
@ -43,10 +43,10 @@
|
|||
#include "float_cast.h"
|
||||
|
||||
//TODO-MB: wouldn't it make more sense to DELETE the time track after 'mix and render'?
|
||||
bool MixAndRender(TrackList *tracks, TrackFactory *trackFactory,
|
||||
std::pair<WaveTrack::Holder, WaveTrack::Holder>
|
||||
MixAndRender(TrackList *tracks, TrackFactory *trackFactory,
|
||||
double rate, sampleFormat format,
|
||||
double startTime, double endTime,
|
||||
WaveTrack **newLeft, WaveTrack **newRight)
|
||||
double startTime, double endTime)
|
||||
{
|
||||
// This function was formerly known as "Quick Mix".
|
||||
Track *t;
|
||||
|
@ -121,18 +121,18 @@ 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).release();
|
||||
auto mixLeft = trackFactory->NewWaveTrack(format, rate);
|
||||
if (oneinput)
|
||||
mixLeft->SetName(usefulIter.First()->GetName()); /* set name of output track to be the same as the sole input track */
|
||||
else
|
||||
mixLeft->SetName(_("Mix"));
|
||||
mixLeft->SetOffset(mixStartTime);
|
||||
WaveTrack *mixRight = 0;
|
||||
decltype(mixLeft) mixRight{};
|
||||
if (mono) {
|
||||
mixLeft->SetChannel(Track::MonoChannel);
|
||||
}
|
||||
else {
|
||||
mixRight = trackFactory->NewWaveTrack(format, rate).release();
|
||||
mixRight = trackFactory->NewWaveTrack(format, rate);
|
||||
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!*/
|
||||
|
@ -197,14 +197,13 @@ bool MixAndRender(TrackList *tracks, TrackFactory *trackFactory,
|
|||
mixRight->Flush();
|
||||
if (updateResult == eProgressCancelled || updateResult == eProgressFailed)
|
||||
{
|
||||
delete mixLeft;
|
||||
if (!mono)
|
||||
delete mixRight;
|
||||
} else {
|
||||
*newLeft = mixLeft;
|
||||
if (!mono)
|
||||
*newRight = mixRight;
|
||||
|
||||
return{};
|
||||
}
|
||||
else {
|
||||
return std::make_pair(
|
||||
std::move(mixLeft),
|
||||
std::move(mixRight)
|
||||
);
|
||||
#if 0
|
||||
int elapsedMS = wxGetElapsedTime();
|
||||
double elapsedTime = elapsedMS * 0.001;
|
||||
|
@ -218,7 +217,6 @@ bool MixAndRender(TrackList *tracks, TrackFactory *trackFactory,
|
|||
printf("Max number of tracks to mix in real time: %f\n", maxTracks);
|
||||
#endif
|
||||
}
|
||||
return (updateResult == eProgressSuccess || updateResult == eProgressStopped);
|
||||
}
|
||||
|
||||
Mixer::WarpOptions::WarpOptions(double min, double max)
|
||||
|
|
10
src/Mix.h
10
src/Mix.h
|
@ -12,6 +12,8 @@
|
|||
#ifndef __AUDACITY_MIX__
|
||||
#define __AUDACITY_MIX__
|
||||
|
||||
#include "MemoryX.h"
|
||||
#include <utility>
|
||||
#include <wx/string.h>
|
||||
|
||||
#include "SampleFormat.h"
|
||||
|
@ -36,10 +38,12 @@ class WaveTrackConstArray;
|
|||
* no explicit time range to process, and the whole occupied length of the
|
||||
* input tracks is processed.
|
||||
*/
|
||||
bool MixAndRender(TrackList * tracks, TrackFactory *factory,
|
||||
std::pair<
|
||||
std::unique_ptr<WaveTrack>,
|
||||
std::unique_ptr<WaveTrack>
|
||||
> MixAndRender(TrackList * tracks, TrackFactory *factory,
|
||||
double rate, sampleFormat format,
|
||||
double startTime, double endTime,
|
||||
WaveTrack **newLeft, WaveTrack **newRight);
|
||||
double startTime, double endTime);
|
||||
|
||||
void MixBuffers(int numChannels, int *channelFlags, float *gains,
|
||||
samplePtr src,
|
||||
|
|
|
@ -2551,8 +2551,6 @@ void Effect::Preview(bool dryOnly)
|
|||
return;
|
||||
|
||||
bool success = true;
|
||||
WaveTrack *mixLeft = NULL;
|
||||
WaveTrack *mixRight = NULL;
|
||||
double oldT0 = mT0;
|
||||
double oldT1 = mT1;
|
||||
// Most effects should stop at t1.
|
||||
|
@ -2568,9 +2566,10 @@ void Effect::Preview(bool dryOnly)
|
|||
// Linear Effect preview optimised by pre-mixing to one track.
|
||||
// Generators need to generate per track.
|
||||
if (mIsLinearEffect && !isGenerator) {
|
||||
success = ::MixAndRender(saveTracks, mFactory, rate, floatSample, mT0, t1,
|
||||
&mixLeft, &mixRight);
|
||||
if (!success) {
|
||||
auto results = ::MixAndRender(saveTracks, mFactory, rate, floatSample, mT0, t1);
|
||||
auto &mixLeft = results.first;
|
||||
auto &mixRight = results.second;
|
||||
if (!mixLeft) {
|
||||
delete mTracks;
|
||||
mTracks = saveTracks;
|
||||
return;
|
||||
|
@ -2580,12 +2579,12 @@ void Effect::Preview(bool dryOnly)
|
|||
mixLeft->InsertSilence(0.0, mT0);
|
||||
mixLeft->SetSelected(true);
|
||||
mixLeft->SetDisplay(WaveTrack::NoDisplay);
|
||||
mTracks->Add(mixLeft);
|
||||
mTracks->Add(mixLeft.release());
|
||||
if (mixRight) {
|
||||
mixRight->Offset(-mixRight->GetStartTime());
|
||||
mixRight->InsertSilence(0.0, mT0);
|
||||
mixRight->SetSelected(true);
|
||||
mTracks->Add(mixRight);
|
||||
mTracks->Add(mixRight.release());
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
Loading…
Reference in New Issue