1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-30 15:39:27 +02:00

Make exporting of Soloed Tracks WY(S/H)IWYG

Now the export (should) exactly match the (selected) non greyed out tracks.
i.e. what you see and hear is what you export - no matter which mode of
mute/solo you choose.

This is now applied not just to export but also to export multiple.
This commit is contained in:
James Crook 2019-09-08 14:22:40 +01:00
parent ef8e1ed6ef
commit cabe925ab7
3 changed files with 27 additions and 8 deletions

View File

@ -737,6 +737,8 @@ public:
bool GetMute () const { return mMute; }
bool GetSolo () const { return mSolo; }
bool GetNotMute () const { return !mMute; }
bool GetNotSolo () const { return !mSolo; }
void SetMute (bool m);
void SetSolo (bool s);

View File

@ -250,9 +250,12 @@ std::unique_ptr<Mixer> ExportPlugin::CreateMixer(const TrackList &tracks,
bool highQuality, MixerSpec *mixerSpec)
{
WaveTrackConstArray inputTracks;
bool anySolo = !(( tracks.Any<const WaveTrack>() + &WaveTrack::GetSolo ).empty());
auto range = tracks.Any< const WaveTrack >()
+ (selectionOnly ? &Track::IsSelected : &Track::Any )
- &WaveTrack::GetMute;
- ( anySolo ? &WaveTrack::GetNotSolo : &WaveTrack::GetMute);
for (auto pTrack: range)
inputTracks.push_back(
pTrack->SharedPointer< const WaveTrack >() );
@ -503,10 +506,12 @@ bool Exporter::ExamineTracks()
auto &tracks = TrackList::Get( *mProject );
bool anySolo = !(( tracks.Any<const WaveTrack>() + &WaveTrack::GetSolo ).empty());
for (auto tr :
tracks.Any< const WaveTrack >()
+ ( mSelectedOnly ? &Track::IsSelected : &Track::Any )
- &WaveTrack::GetMute
- ( anySolo ? &WaveTrack::GetNotSolo : &WaveTrack::GetMute)
) {
mNumSelected++;
@ -1364,8 +1369,8 @@ ExportMixerDialog::ExportMixerDialog( const TrackList *tracks, bool selectedOnly
for (auto t :
tracks->Any< const WaveTrack >()
+ (anySolo ? &WaveTrack::GetSolo : ( selectedOnly ? &Track::IsSelected : &Track::Any ) )
- &WaveTrack::GetMute
+ ( selectedOnly ? &Track::IsSelected : &Track::Any )
- ( anySolo ? &WaveTrack::GetNotSolo : &WaveTrack::GetMute)
) {
numTracks++;
const wxString sTrackName = (t->GetName()).Left(20);

View File

@ -168,8 +168,11 @@ ExportMultiple::~ExportMultiple()
void ExportMultiple::CountTracksAndLabels()
{
bool anySolo = !(( mTracks->Any<const WaveTrack>() + &WaveTrack::GetSolo ).empty());
mNumWaveTracks =
(mTracks->Leaders< const WaveTrack >() - &WaveTrack::GetMute).size();
(mTracks->Leaders< const WaveTrack >() -
(anySolo ? &WaveTrack::GetNotSolo : &WaveTrack::GetMute)).size();
// only the first label track
mLabels = *mTracks->Any< const LabelTrack >().begin();
@ -654,9 +657,12 @@ static unsigned GetNumExportChannels( const TrackList &tracks )
//int numMono = 0;
/* track iteration kit */
bool anySolo = !(( tracks.Any<const WaveTrack>() + &WaveTrack::GetSolo ).empty());
// Want only unmuted wave tracks.
for (auto tr :
tracks.Any< const WaveTrack >() - &WaveTrack::GetMute
tracks.Any< const WaveTrack >() -
(anySolo ? &WaveTrack::GetNotSolo : &WaveTrack::GetMute)
) {
// Found a left channel
if (tr->GetChannel() == Track::LeftChannel) {
@ -860,8 +866,11 @@ ProgressResult ExportMultiple::ExportMultipleByTrack(bool byName,
for (auto tr : mTracks->Selected<WaveTrack>())
tr->SetSelected(false);
bool anySolo = !(( mTracks->Any<const WaveTrack>() + &WaveTrack::GetSolo ).empty());
/* Examine all tracks in turn, collecting export information */
for (auto tr : mTracks->Leaders<WaveTrack>() - &WaveTrack::GetMute) {
for (auto tr : mTracks->Leaders<WaveTrack>() -
(anySolo ? &WaveTrack::GetNotSolo : &WaveTrack::GetMute)) {
// Get the times for the track
auto channels = TrackList::Channels(tr);
@ -940,7 +949,10 @@ ProgressResult ExportMultiple::ExportMultipleByTrack(bool byName,
int count = 0; // count the number of sucessful runs
ExportKit activeSetting; // pointer to the settings in use for this export
std::unique_ptr<ProgressDialog> pDialog;
for (auto tr : mTracks->Leaders<WaveTrack>() - &WaveTrack::GetMute) {
for (auto tr : mTracks->Leaders<WaveTrack>() -
(anySolo ? &WaveTrack::GetNotSolo : &WaveTrack::GetMute)) {
wxLogDebug( "Get setting %i", count );
/* get the settings to use for the export from the array */
activeSetting = exportSettings[count];