⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exportmultiple.cpp

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   int numLeft = 0, numRight = 0, numMono = 0;   TrackListIterator iter1(tracks);   Track *tr = iter1.First();   while (tr) {      if (tr->GetKind() == Track::Wave) {         if (tr->GetChannel() == Track::LeftChannel)            numLeft++;         else if (tr->GetChannel() == Track::RightChannel)            numRight++;         else if (tr->GetChannel() == Track::MonoChannel) {            // It's a mono channel, but it may be panned            float pan = ((WaveTrack*)tr)->GetPan();                        if (pan == -1.0)               numLeft++;            else if (pan == 1.0)               numRight++;            else if (pan == 0)               numMono++;            else {               numLeft++;               numRight++;            }         }      }      tr = iter1.Next();   }   bool stereo = false;   if (numRight > 0 || numLeft > 0)      stereo = true;   if (format==3 && forceMono)      stereo = false;   wxArrayString otherNames;   wxString name;   double t0, t1;   int count = 0;   bool ok = true;   while(l < numLabels) {      const LabelStruct *info = 0;      if (l < 0) {         name = firstFileName;         t0 = 0.0;      }      else {         info = labels->GetLabel(l);         name = info->title;         t0 = info->t;      }      if (info && info->t < info->t1) {         t1 = info->t1;      }      else if (l < numLabels-1) {         const LabelStruct *info1 = labels->GetLabel(l+1);         t1 = info1->t;      }      else         t1 = tracks->GetEndTime();            if (!byName) {         if (numFiles > 9)            name.Printf(wxT("%s-%02d"), prefix.c_str(), count+1);         else            name.Printf(wxT("%s-%d"), prefix.c_str(), count+1);      }            MakeNameUnique(otherNames, name);            ok = DoExport(project, format, dir, stereo, name, false, t0, t1,                    overwrite, count+1);      if (!ok)         break;      otherNames.Add(name);      count++;      l++;   }      ::wxMessageBox(wxString::Format(_("Successfully exported %d files."),                                   count),                  _("Export Multiple"),                  wxOK | wxCENTRE, project);      return ok;}bool ExportMultiple(AudacityProject *project){   TrackList *tracks = project->GetTracks();   int numTracks = CountNumExportableTracks(tracks);   int numLabels = CountNumLabels(tracks);   if (numTracks < 2 && numLabels < 1) {      ::wxMessageBox(_("If you have more than one Audio Track, you can export each track as a separate file,\nor if you have a Label Track, you can export a new file for each label.\n\nThis project does not have multiple tracks or a Label Track, so you cannot export multiple files."),                     _("Can't export multiple files"),                     wxOK | wxCENTRE, project);      return false;   }   ExportMultipleDialog dlog(project, -1);   dlog.byLabelsAllowed = (numLabels > 0);   dlog.byTracksAllowed = (numTracks > 1);   dlog.firstFileName = project->GetName();   dlog.prefix = project->GetName();   dlog.CopyDataToControls();   dlog.CentreOnParent();   dlog.ShowModal();   if (!dlog.GetReturnCode())      return false;   if (dlog.format == 1) { // MP3      Tags *tags = project->GetTags();      if (tags->IsEmpty()) {         wxString saveTitle = tags->GetTitle();         int saveTrackNumber = tags->GetTrackNumber();         tags->SetTitle(wxT("(automatic)"));         tags->SetTrackNumber(0);         tags->AllowEditTitle(false);         tags->AllowEditTrackNumber(false);         bool rval = tags->ShowEditDialog(project,                                          _("Edit the ID3 tags for all MP3 files"));         tags->AllowEditTitle(true);         tags->AllowEditTrackNumber(true);         if (!rval) {            tags->SetTitle(saveTitle);            tags->SetTrackNumber(saveTrackNumber);            return false;         }      }   }   if (dlog.byLabels)      return ExportMultipleByLabel(project, dlog.dir, dlog.format,                                   dlog.byName, dlog.prefix,                                   dlog.includeFirst, dlog.firstFileName,                                   dlog.overwrite,dlog.forceMono);   else      return ExportMultipleByTrack(project, dlog.dir, dlog.format,                                   dlog.byName, dlog.prefix,                                   dlog.overwrite, dlog.forceMono);}//// ExportMultipleDialog methods//BEGIN_EVENT_TABLE(ExportMultipleDialog, wxDialog)   EVT_CHOICE(FormatID, ExportMultipleDialog::OnFormat)   EVT_BUTTON(wxID_OK, ExportMultipleDialog::OnExport)   EVT_BUTTON(wxID_CANCEL, ExportMultipleDialog::OnCancel)   EVT_BUTTON(ChooseID, ExportMultipleDialog::OnChoose)   EVT_RADIOBUTTON(LabelID, ExportMultipleDialog::OnLabel)   EVT_RADIOBUTTON(TrackID, ExportMultipleDialog::OnTrack)   EVT_RADIOBUTTON(ByNameID, ExportMultipleDialog::OnByName)   EVT_RADIOBUTTON(ByNumberID, ExportMultipleDialog::OnByNumber)   EVT_CHECKBOX(FirstID, ExportMultipleDialog::OnFirst)   EVT_TEXT(FirstFileNameID, ExportMultipleDialog::OnFirstFileName)   EVT_TEXT(PrefixID, ExportMultipleDialog::OnPrefix)END_EVENT_TABLE()ExportMultipleDialog::ExportMultipleDialog(wxWindow *parent, wxWindowID id):   wxDialog(parent, id, (wxString)_("Export Multiple")){   wxBoxSizer *vSizer, *hSizer, *bigHSizer;   wxStaticBoxSizer *group;   wxStaticBox *staticBox;   vSizer = new wxBoxSizer(wxVERTICAL);   //   // Format and location   //   hSizer = new wxBoxSizer(wxHORIZONTAL);   hSizer->Add(new wxStaticText(this, -1, _("Export format:")),               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);   int numFormats = 4;   wxString formatList[4];   int format = ReadExportFormatPref();   formatList[0] = sf_header_shortname(format & SF_FORMAT_TYPEMASK);   formatList[1] = wxT("MP3");   formatList[2] = wxT("Ogg Vorbis");   formatList[3] = wxT("MP3_mpg");   mFormat = new wxChoice(this, FormatID,                          wxDefaultPosition, wxDefaultSize,                          numFormats, formatList);   int selFormat = gPrefs->Read(wxT("/FileFormats/ExportMultipleFormat"), format);   mFormat->SetSelection(selFormat);   hSizer->Add(mFormat, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);   vSizer->Add(hSizer, 0, wxALL, 5);   hSizer = new wxBoxSizer(wxHORIZONTAL);   hSizer->Add(new wxStaticText(this, -1, _("Export location:")),               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);   mDir = new wxTextCtrl(this, DirID);   hSizer->Add(mDir, 1, wxALL | wxEXPAND, 5);   mChoose = new wxButton(this, ChooseID, _("Choose..."));   hSizer->Add(mChoose, 0, wxALL, 5);   vSizer->Add(hSizer, 0, wxLEFT | wxRIGHT | wxEXPAND, 5);   // bit rate display and stereo/mono selection   hSizer = new wxBoxSizer(wxHORIZONTAL);   long mp3Bitrate = gPrefs->Read(wxT("/FileFormats/MP3Bitrate"), 128);   wxString mp3BitrateString = wxString::Format(wxT("%ld"), mp3Bitrate);   hSizer->Add(new wxStaticText(this, -1, _("MP3 Bit Rate: " + mp3BitrateString)),               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);   hSizer->Add(20, 5); // indent   mForceMono = new wxCheckBox(this, ForceMonoID, _("Force Mono"));   long mono = gPrefs->Read(wxT("/FileFormats/MpgForceMono"), (long)0);   mForceMono->SetValue(mono!=0);   mForceMono->Enable(selFormat == 3);   hSizer->Add(mForceMono, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);   vSizer->Add(hSizer, 0, wxALL, 5);   //   // By labels or by tracks?   //   bigHSizer = new wxBoxSizer(wxHORIZONTAL);   staticBox = new wxStaticBox(this, -1,                               _("Split files based on:"));   group = new wxStaticBoxSizer(staticBox, wxVERTICAL);   mLabel = new wxRadioButton(this, LabelID, _("Labels"),                              wxDefaultPosition, wxDefaultSize,                              wxRB_GROUP);   group->Add(mLabel, 0, wxALL, 5);   hSizer = new wxBoxSizer(wxHORIZONTAL);   hSizer->Add(20, 5); // indent   mFirst = new wxCheckBox(this, FirstID,                           _("Include audio before first label"));   hSizer->Add(mFirst, 0, wxLEFT | wxRIGHT, 5);   group->Add(hSizer, 0, wxLEFT | wxRIGHT, 5);   hSizer = new wxBoxSizer(wxHORIZONTAL);   hSizer->Add(20, 5); // indent   hSizer->Add(new wxStaticText(this, -1, _("First file name:")),               0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, 5);   mFirstFileName = new wxTextCtrl(this, FirstFileNameID);   hSizer->Add(mFirstFileName, 0,               wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, 5);   group->Add(hSizer, 0, wxLEFT | wxRIGHT, 5);   mTrack = new wxRadioButton(this, TrackID, _("Tracks"));   group->Add(mTrack, 0, wxALL, 5);                                     bigHSizer->Add(group, 0, wxALL, 5);   //   // How to name files?   //   staticBox = new wxStaticBox(this, -1,                               _("Name files:"));   group = new wxStaticBoxSizer(staticBox, wxVERTICAL);   mByName= new wxRadioButton(this, ByNameID, _("Using Label/Track Name"),                              wxDefaultPosition, wxDefaultSize,                              wxRB_GROUP);   group->Add(mByName, 0, wxALL, 5);      mByNumber = new wxRadioButton(this, ByNumberID,                                 _("Numbering consecutively"));   group->Add(mByNumber, 0, wxALL, 5);   hSizer = new wxBoxSizer(wxHORIZONTAL);   hSizer->Add(20, 5); // indent   hSizer->Add(new wxStaticText(this, -1, _("File name prefix:")),               0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, 5);   mPrefix = new wxTextCtrl(this, PrefixID);   hSizer->Add(mPrefix, 0,               wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, 5);   group->Add(hSizer, 0, wxLEFT | wxRIGHT, 5);      bigHSizer->Add(group, 0, wxALL, 5);   vSizer->Add(bigHSizer, 0);   //   // Overwrite existing files?   //   hSizer = new wxBoxSizer(wxHORIZONTAL);   mOverwrite = new wxCheckBox(this, ExplanationID,                                _("Overwrite existing files"));   mOverwrite->SetValue(true);   hSizer->Add(mOverwrite, 1, wxALL | wxEXPAND, 5);   vSizer->Add(hSizer, 0, wxALL | wxEXPAND, 5);   //   // Explanation area   //   //hSizer = new wxBoxSizer(wxHORIZONTAL);   //mExplanation = new wxTextCtrl(this, ExplanationID, "Text\nText\nText");   //hSizer->Add(mExplanation, 1, wxALL | wxEXPAND, 5);   //vSizer->Add(hSizer, 0, wxALL | wxEXPAND, 5);   //   // Cancel / Export   //   hSizer = new wxBoxSizer(wxHORIZONTAL);   mCancel = new wxButton(this, wxID_CANCEL, _("Cancel"));   hSizer->Add(mCancel, 0, wxALL, 5);   mExport = new wxButton(this, wxID_OK, _("Export"));   mExport->SetDefault();   hSizer->Add(mExport, 0, wxALL, 5);   vSizer->Add(hSizer, 0, wxALL | wxALIGN_CENTER, 5);   //   // Finish   //   SetAutoLayout(true);   SetSizer(vSizer);   vSizer->Fit(this);   vSizer->SetSizeHints(this);   EnableControls();}void ExportMultipleDialog::EnableControls(){   mFirst->Enable(mLabel->GetValue() && mByName->GetValue());   mFirstFileName->Enable(mLabel->GetValue() &&                          mByName->GetValue() &&                          mFirst->GetValue());   mPrefix->Enable(mByNumber->GetValue());   bool ok = true;   if (mLabel->GetValue() && mFirst->GetValue() &&       mFirstFileName->GetValue() == wxT(""))      ok = false;   if (mByNumber->GetValue() &&       mPrefix->GetValue() == wxT(""))      ok = false;   mExport->Enable(ok);}void ExportMultipleDialog::CopyDataToControls(){   wxString defaultPath = gPrefs->Read(wxT("/DefaultExportPath"),                                       FROMFILENAME(::wxGetCwd()));   wxString path = gPrefs->Read(wxT("/DefaultMultiplExportPath"),                                defaultPath);   mDir->SetValue(path);   mFirstFileName->SetValue(firstFileName);   mPrefix->SetValue(prefix);   if (!byLabelsAllowed) {      mLabel->Enable(false);      mTrack->SetValue(true);      mLabel->SetValue(false);   }   if (!byTracksAllowed) {      mTrack->Enable(false);      mLabel->SetValue(true);      mTrack->SetValue(false);   }   EnableControls();}void ExportMultipleDialog::OnFormat(wxCommandEvent& event)   {   if (mFormat->GetSelection()==3)      {      mForceMono->Enable(true);      }   else      {      mForceMono->Enable(false);      }      gPrefs->Write(wxT("/FileFormats/ExportMultipleFormat"), mFormat->GetSelection());   EnableControls();   }void ExportMultipleDialog::OnChoose(wxCommandEvent& event){   wxDirDialog dlog(this,                    _("Choose a location to save the exported files"),                    mDir->GetValue());   dlog.ShowModal();   if (dlog.GetPath() != wxT(""))      mDir->SetValue(dlog.GetPath());}void ExportMultipleDialog::OnLabel(wxCommandEvent& event){   EnableControls();}void ExportMultipleDialog::OnFirst(wxCommandEvent& event){   EnableControls();}void ExportMultipleDialog::OnFirstFileName(wxCommandEvent& event){   EnableControls();}void ExportMultipleDialog::OnTrack(wxCommandEvent& event){   EnableControls();}   //void ExportMultipleDialog::OnByName(wxCommandEvent& event){   EnableControls();}void ExportMultipleDialog::OnByNumber(wxCommandEvent& event){   EnableControls();}   //void ExportMultipleDialog::OnPrefix(wxCommandEvent& event){   EnableControls();}   //void ExportMultipleDialog::OnCancel(wxCommandEvent& event){   EndModal(0);}void ExportMultipleDialog::OnExport(wxCommandEvent& event){   format = mFormat->GetSelection();   forceMono = mForceMono->GetValue();   dir = mDir->GetValue();   byLabels = mLabel->GetValue();   includeFirst = mFirst->GetValue();   byName = mByName->GetValue();   firstFileName = mFirstFileName->GetValue();   prefix = mPrefix->GetValue();   overwrite = mOverwrite->GetValue();   gPrefs->Write(wxT("/DefaultMultiplExportPath"), dir);   gPrefs->Write(wxT("/FileFormats/MpgForceMono"), forceMono);   EndModal(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -