mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-02 16:49:41 +02:00
modified version of Steve's patch for bugs 428 and 430
This commit is contained in:
parent
97677e1d9f
commit
72825001f5
@ -69,7 +69,7 @@ simplifies construction of menu items.
|
||||
#include "MixerBoard.h"
|
||||
#include "Internat.h"
|
||||
#include "FileFormats.h"
|
||||
#include "LoadModules.h"
|
||||
#include "LoadModules.h"
|
||||
#include "Prefs.h"
|
||||
#include "Printing.h"
|
||||
#include "UploadDialog.h"
|
||||
@ -279,12 +279,12 @@ void AudacityProject::CreateMenusAndCommands()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Enable Export commands only when there are tracks
|
||||
// Enable Export audio commands only when there are audio tracks.
|
||||
c->AddItem(wxT("Export"), _("&Export..."), FN(OnExport), wxT("Ctrl+Shift+E"),
|
||||
AudioIONotBusyFlag | WaveTracksExistFlag,
|
||||
AudioIONotBusyFlag | WaveTracksExistFlag);
|
||||
|
||||
// Enable Export Selection commands only when there's a selection
|
||||
// Enable Export Selection commands only when there's a selection.
|
||||
c->AddItem(wxT("ExportSel"), _("Expo&rt Selection..."), FN(OnExportSelection),
|
||||
AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag,
|
||||
AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag);
|
||||
@ -296,9 +296,10 @@ void AudacityProject::CreateMenusAndCommands()
|
||||
c->AddItem(wxT("ExportLabels"), _("Export &Labels..."), FN(OnExportLabels),
|
||||
AudioIONotBusyFlag | LabelTracksExistFlag,
|
||||
AudioIONotBusyFlag | LabelTracksExistFlag);
|
||||
// Enable Export audio commands only when there are audio tracks.
|
||||
c->AddItem(wxT("ExportMultiple"), _("Export &Multiple..."), FN(OnExportMultiple), wxT("Ctrl+Shift+L"),
|
||||
AudioIONotBusyFlag | TracksExistFlag,
|
||||
AudioIONotBusyFlag | TracksExistFlag);
|
||||
AudioIONotBusyFlag | WaveTracksExistFlag,
|
||||
AudioIONotBusyFlag | WaveTracksExistFlag);
|
||||
#if defined(USE_MIDI)
|
||||
c->AddItem(wxT("ExportMIDI"), _("Export MIDI..."), FN(OnExportMIDI),
|
||||
AudioIONotBusyFlag | NoteTracksSelectedFlag,
|
||||
@ -311,9 +312,10 @@ void AudacityProject::CreateMenusAndCommands()
|
||||
c->AddItem(wxT("ExportLabels"), _("Export &Labels..."), FN(OnExportLabels),
|
||||
AudioIONotBusyFlag | LabelTracksExistFlag,
|
||||
AudioIONotBusyFlag | LabelTracksExistFlag);
|
||||
// Enable Export audio commands only when there are audio tracks.
|
||||
c->AddItem(wxT("ExportMultiple"), _("Export &Multiple..."), FN(OnExportMultiple), wxT("Ctrl+Shift+L"),
|
||||
AudioIONotBusyFlag | TracksExistFlag,
|
||||
AudioIONotBusyFlag | TracksExistFlag);
|
||||
AudioIONotBusyFlag | WaveTracksExistFlag,
|
||||
AudioIONotBusyFlag | WaveTracksExistFlag);
|
||||
#if defined(USE_MIDI)
|
||||
c->AddItem(wxT("ExportMIDI"), _("Export MIDI..."), FN(OnExportMIDI),
|
||||
AudioIONotBusyFlag | NoteTracksSelectedFlag,
|
||||
@ -755,17 +757,17 @@ void AudacityProject::CreateMenusAndCommands()
|
||||
|
||||
c->BeginMenu(_("&Tracks"));
|
||||
c->SetDefaultFlags(AudioIONotBusyFlag, AudioIONotBusyFlag);
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
c->BeginSubMenu(_("Add &New"));
|
||||
c->BeginSubMenu(_("Add &New"));
|
||||
|
||||
c->AddItem(wxT("NewAudioTrack"), _("&Audio Track"), FN(OnNewWaveTrack), wxT("Ctrl+Shift+N"));
|
||||
c->AddItem(wxT("NewStereoTrack"), _("&Stereo Track"), FN(OnNewStereoTrack));
|
||||
c->AddItem(wxT("NewLabelTrack"), _("&Label Track"), FN(OnNewLabelTrack));
|
||||
c->AddItem(wxT("NewTimeTrack"), _("&Time Track"), FN(OnNewTimeTrack));
|
||||
|
||||
c->EndSubMenu();
|
||||
c->EndSubMenu();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -953,17 +955,17 @@ void AudacityProject::CreateMenusAndCommands()
|
||||
|
||||
c->BeginMenu(_("&Tracks"));
|
||||
c->SetDefaultFlags(AudioIONotBusyFlag, AudioIONotBusyFlag);
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
c->BeginSubMenu(_("Add &New"));
|
||||
c->BeginSubMenu(_("Add &New"));
|
||||
|
||||
c->AddItem(wxT("NewAudioTrack"), _("&Audio Track"), FN(OnNewWaveTrack), wxT("Ctrl+Shift+N"));
|
||||
c->AddItem(wxT("NewStereoTrack"), _("&Stereo Track"), FN(OnNewStereoTrack));
|
||||
c->AddItem(wxT("NewLabelTrack"), _("&Label Track"), FN(OnNewLabelTrack));
|
||||
c->AddItem(wxT("NewTimeTrack"), _("&Time Track"), FN(OnNewTimeTrack));
|
||||
|
||||
c->EndSubMenu();
|
||||
c->EndSubMenu();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -1413,7 +1415,7 @@ void AudacityProject::CreateMenusAndCommands()
|
||||
|
||||
#ifdef CLEANSPEECH
|
||||
if (mCleanSpeechMode) {
|
||||
c->AddItem(wxT("About"), _("&About Audacity CleanSpeech..."), FN(OnAbout));
|
||||
c->AddItem(wxT("About"), _("&About Audacity CleanSpeech..."), FN(OnAbout));
|
||||
}
|
||||
else {
|
||||
c->AddItem(wxT("About"), _("&About Audacity..."), FN(OnAbout));
|
||||
@ -1988,9 +1990,9 @@ void AudacityProject::ModifyToolbarMenus()
|
||||
|
||||
void AudacityProject::UpdateMenus()
|
||||
{
|
||||
//ANSWER-ME: Why UpdateMenus only does active project?
|
||||
//JKC: Is this test fixing a bug when multiple projects are open?
|
||||
//so that menu states work even when different in different projects?
|
||||
//ANSWER-ME: Why UpdateMenus only does active project?
|
||||
//JKC: Is this test fixing a bug when multiple projects are open?
|
||||
//so that menu states work even when different in different projects?
|
||||
if (this != GetActiveProject())
|
||||
return;
|
||||
|
||||
|
@ -1060,10 +1060,9 @@ int TrackList::GetNumExportChannels(bool selectionOnly)
|
||||
|
||||
for (tr = iter.First(this); tr != NULL; tr = iter.Next()) {
|
||||
|
||||
// Only want wave tracks
|
||||
if (tr->GetKind() != Track::Wave) {
|
||||
// Want only unmuted wave tracks.
|
||||
if ((tr->GetKind() != Track::Wave) || tr->GetMute())
|
||||
continue;
|
||||
}
|
||||
|
||||
// do we only want selected ones?
|
||||
if (selectionOnly && !(tr->GetSelected())) {
|
||||
@ -1242,14 +1241,3 @@ double TrackList::GetEndTime() const
|
||||
return max;
|
||||
}
|
||||
|
||||
// Indentation settings for Vim and Emacs and unique identifier for Arch, a
|
||||
// version control system. Please do not modify past this point.
|
||||
//
|
||||
// Local Variables:
|
||||
// c-basic-offset: 3
|
||||
// indent-tabs-mode: nil
|
||||
// End:
|
||||
//
|
||||
// vim: et sts=3 sw=3
|
||||
// arch-tag: 575d97aa-2da9-476d-a39e-2ccad16b7cdd
|
||||
|
||||
|
@ -150,7 +150,7 @@ void ExportMultiple::CountTracksAndLabels()
|
||||
// Count WaveTracks, and for linked pairs, count only the second of the pair.
|
||||
case Track::Wave:
|
||||
{
|
||||
if (pTrack->GetLinked() == false)
|
||||
if (!pTrack->GetMute() && !pTrack->GetLinked()) // Don't count muted tracks.
|
||||
mNumWaveTracks++;
|
||||
break;
|
||||
}
|
||||
@ -175,9 +175,17 @@ int ExportMultiple::ShowModal()
|
||||
::wxMessageBox(_("If you have more than one Audio Track, you can\nexport each track \
|
||||
as a separate audio file.\n\nIf you have a Label Track, you can export a separate\naudio file \
|
||||
for each label in that track. You can have\nmore than one Label Track, but files will only \
|
||||
be\nexported for the uppermost Label Track.\n\nThis Project does not meet the above criteria \
|
||||
for\nexporting multiple files."),
|
||||
_("Can't export multiple files"),
|
||||
be\nexported for the uppermost Label Track.\n\nMuted tracks will not be exported.\n\nThis \
|
||||
Project does not meet the above criteria for\nexporting multiple files."),
|
||||
_("Cannot Export Multiple Files"),
|
||||
wxOK | wxCENTRE, this);
|
||||
return wxID_CANCEL;
|
||||
}
|
||||
|
||||
// Cannot export if all audio tracks are muted.
|
||||
if (mNumWaveTracks == 0) {
|
||||
::wxMessageBox(_("All the audio is muted."),
|
||||
_("Cannot Export Multiple Files"),
|
||||
wxOK | wxCENTRE, this);
|
||||
return wxID_CANCEL;
|
||||
}
|
||||
@ -591,7 +599,7 @@ int ExportMultiple::ExportMultipleByLabel(bool byName,
|
||||
int l = 0; // counter for files done
|
||||
ExportKitArray exportSettings; // dynamic array we will use to store the
|
||||
// settings needed to do the exports with in
|
||||
exportSettings.Alloc(numFiles); // allocated some guessed space to use
|
||||
exportSettings.Alloc(numFiles); // Allocate some guessed space to use.
|
||||
|
||||
// Account for exporting before first label
|
||||
if (mFirst->GetValue()) {
|
||||
@ -599,8 +607,8 @@ int ExportMultiple::ExportMultipleByLabel(bool byName,
|
||||
numFiles++;
|
||||
}
|
||||
|
||||
// Figure out how many channels we should export
|
||||
int channels = (mTracks->GetNumExportChannels(false));
|
||||
// Figure out how many channels we should export.
|
||||
int channels = mTracks->GetNumExportChannels(false);
|
||||
|
||||
wxArrayString otherNames; // keep track of file names we will use, so we
|
||||
// don't duplicate them
|
||||
@ -705,7 +713,6 @@ int ExportMultiple::ExportMultipleByTrack(bool byName,
|
||||
wxASSERT(mProject);
|
||||
bool tagsPrompt = mProject->GetShowId3Dialog();
|
||||
Track *tr, *tr2;
|
||||
int channels = 0; // how many channels export?
|
||||
int l = 0; // track counter
|
||||
int numTracks = 0;
|
||||
int ok = eProgressSuccess;
|
||||
@ -714,7 +721,7 @@ int ExportMultiple::ExportMultipleByTrack(bool byName,
|
||||
selected when we started */
|
||||
ExportKitArray exportSettings; // dynamic array we will use to store the
|
||||
// settings needed to do the exports with in
|
||||
exportSettings.Alloc(mNumLabels); // allocated some guessed space to use
|
||||
exportSettings.Alloc(mNumWaveTracks); // Allocate some guessed space to use.
|
||||
ExportKit setting; // the current batch of settings
|
||||
setting.destfile.SetPath(mDir->GetValue());
|
||||
setting.destfile.SetExt(mPlugins[mPluginIndex]->GetExtension(mSubFormatIndex));
|
||||
@ -741,10 +748,9 @@ int ExportMultiple::ExportMultipleByTrack(bool byName,
|
||||
/* Examine all tracks in turn, collecting export information */
|
||||
for (tr = mIterator.First(mTracks); tr != NULL; tr = mIterator.Next()) {
|
||||
|
||||
// Only want wave tracks
|
||||
if (tr->GetKind() != Track::Wave) {
|
||||
// Want only non-muted wave tracks.
|
||||
if ((tr->GetKind() != Track::Wave) || tr->GetMute())
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get the times for the track
|
||||
setting.t0 = tr->GetStartTime();
|
||||
@ -768,11 +774,12 @@ int ExportMultiple::ExportMultipleByTrack(bool byName,
|
||||
}
|
||||
|
||||
// number of export channels?
|
||||
// Needs to be per track.
|
||||
if (tr2 == NULL && tr->GetChannel() == WaveTrack::MonoChannel &&
|
||||
((WaveTrack *)tr)->GetPan() == 0.0)
|
||||
channels = 1;
|
||||
setting.channels = 1;
|
||||
else
|
||||
channels = 2;
|
||||
setting.channels = 2;
|
||||
|
||||
// Get name and title
|
||||
title = tr->GetName();
|
||||
@ -783,7 +790,7 @@ int ExportMultiple::ExportMultipleByTrack(bool byName,
|
||||
name = title;
|
||||
if (addNumber) {
|
||||
name.Prepend(wxString::Format(wxT("%02d-"), l+1));
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
name = (wxString::Format(wxT("%s-%02d"), prefix.c_str(), l+1));
|
||||
@ -823,8 +830,8 @@ int ExportMultiple::ExportMultipleByTrack(bool byName,
|
||||
ExportKit activeSetting; // pointer to the settings in use for this export
|
||||
for (tr = mIterator.First(mTracks); tr != NULL; tr = mIterator.Next()) {
|
||||
|
||||
// Only want wave tracks
|
||||
if (tr->GetKind() != Track::Wave) {
|
||||
// Want only non-muted wave tracks.
|
||||
if ((tr->GetKind() != Track::Wave) || (tr->GetMute() == true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -843,8 +850,8 @@ int ExportMultiple::ExportMultipleByTrack(bool byName,
|
||||
|
||||
/* get the settings to use for the export from the array */
|
||||
activeSetting = exportSettings[count];
|
||||
// export data
|
||||
ok = DoExport(channels, activeSetting.destfile, true, activeSetting.t0, activeSetting.t1, activeSetting.filetags);
|
||||
// Export the data. "channels" are per track.
|
||||
ok = DoExport(activeSetting.channels, activeSetting.destfile, true, activeSetting.t0, activeSetting.t1, activeSetting.filetags);
|
||||
|
||||
// Reset selection state
|
||||
tr->SetSelected(false);
|
||||
@ -959,14 +966,3 @@ void MouseEvtHandler::OnMouse(wxMouseEvent& event)
|
||||
{
|
||||
event.Skip(false);
|
||||
}
|
||||
|
||||
// Indentation settings for Vim and Emacs and unique identifier for Arch, a
|
||||
// version control system. Please do not modify past this point.
|
||||
//
|
||||
// Local Variables:
|
||||
// c-basic-offset: 3
|
||||
// indent-tabs-mode: nil
|
||||
// End:
|
||||
//
|
||||
// vim: et sts=3 sw=3
|
||||
// arch-tag: d6904b91-a320-4194-8d60-caa9175b6bb4
|
||||
|
@ -190,7 +190,7 @@ private:
|
||||
* export.
|
||||
*
|
||||
* We create a set of these during the interactive phase of the export
|
||||
* cycle, then use them when the actual exports are done */
|
||||
* cycle, then use them when the actual exports are done. */
|
||||
class ExportKit
|
||||
{
|
||||
public:
|
||||
@ -198,6 +198,7 @@ private:
|
||||
wxFileName destfile; /**< The file to export to */
|
||||
double t0; /**< Start time for the export */
|
||||
double t1; /**< End time for the export */
|
||||
int channels; /**< Number of channels for ExportMultipleByTrack */
|
||||
}; // end of ExportKit declaration
|
||||
/* we are going to want an set of these kits, and don't know how many until
|
||||
* runtime. I would dearly like to use a std::vector, but it seems that
|
||||
@ -208,14 +209,3 @@ private:
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
// Indentation settings for Vim and Emacs and unique identifier for Arch, a
|
||||
// version control system. Please do not modify past this point.
|
||||
//
|
||||
// Local Variables:
|
||||
// c-basic-offset: 3
|
||||
// indent-tabs-mode: nil
|
||||
// End:
|
||||
//
|
||||
// vim: et sts=3 sw=3
|
||||
// arch-tag: d6904b91-a320-4194-8d60-caa9175b6bb4
|
||||
|
Loading…
x
Reference in New Issue
Block a user