Vapor: Simple Export GUI
This commit is contained in:
parent
7228144d6e
commit
2a928dae19
@ -32,6 +32,9 @@
|
||||
<menu name='Export' action='Export'>
|
||||
<menuitem action='QuickExport'/>
|
||||
<menuitem action='ExportAudio'/>
|
||||
#ifdef VAPOR
|
||||
<menuitem action='SurroundExport'/>
|
||||
#endif
|
||||
<menuitem action='StemExport'/>
|
||||
<menuitem action='ExportVideo'/>
|
||||
</menu>
|
||||
|
@ -598,6 +598,9 @@ ARDOUR_UI::install_dependent_actions ()
|
||||
act = ActionManager::register_action (main_actions, X_("QuickExport"), _("Quick Audio Export..."), sigc::mem_fun (*editor, &PublicEditor::quick_export));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
|
||||
act = ActionManager::register_action (main_actions, X_("SurroundExport"), _("Export Surround Master..."), sigc::mem_fun (*editor, &PublicEditor::surround_export));
|
||||
act->set_sensitive (false);
|
||||
|
||||
act = ActionManager::register_action (main_actions, X_("ExportAudio"), _("Export to Audio File(s)..."), sigc::mem_fun (*editor, &PublicEditor::export_audio));
|
||||
ActionManager::session_sensitive_actions.push_back (act);
|
||||
|
||||
|
@ -333,6 +333,7 @@ public:
|
||||
void export_range ();
|
||||
void export_region ();
|
||||
void quick_export ();
|
||||
void surround_export ();
|
||||
|
||||
/* export for analysis only */
|
||||
void loudness_assistant (bool);
|
||||
|
@ -106,6 +106,17 @@ Editor::quick_export ()
|
||||
dialog.run();
|
||||
}
|
||||
|
||||
void
|
||||
Editor::surround_export ()
|
||||
{
|
||||
if (!_session || !_session->vapor_export_barrier ()) {
|
||||
return;
|
||||
}
|
||||
SimpleExportDialog dialog (*this, true);
|
||||
dialog.set_session (_session);
|
||||
dialog.run();
|
||||
}
|
||||
|
||||
void
|
||||
Editor::loudness_assistant_marker ()
|
||||
{
|
||||
|
@ -826,6 +826,9 @@ Mixer_UI::remove_surround_master (SurroundStrip* strip)
|
||||
|
||||
RefPtr<ToggleAction> surround_action = ActionManager::get_toggle_action (X_("Mixer"), "ToggleSurroundMaster");
|
||||
surround_action->set_active (false);
|
||||
|
||||
Glib::RefPtr<Action> surround_export = ActionManager::get_action (X_("Main"), X_("SurroundExport"));
|
||||
surround_export->set_sensitive (false);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1282,9 +1285,12 @@ Mixer_UI::set_session (Session* sess)
|
||||
update_scene_buttons();
|
||||
|
||||
RefPtr<ToggleAction> surround_action = ActionManager::get_toggle_action (X_("Mixer"), "ToggleSurroundMaster");
|
||||
Glib::RefPtr<Action> surround_export = ActionManager::get_action (X_("Main"), X_("SurroundExport"));
|
||||
|
||||
if (!_session) {
|
||||
surround_action->set_sensitive (false);
|
||||
surround_export->set_sensitive (false);
|
||||
|
||||
PBD::Unwinder<bool> uw (ignore_plugin_reorder, true);
|
||||
favorite_plugins_model->clear ();
|
||||
_selection.clear ();
|
||||
@ -1300,6 +1306,7 @@ Mixer_UI::set_session (Session* sess)
|
||||
|
||||
surround_action->set_sensitive (_session->vapor_barrier ());
|
||||
surround_action->set_active (nullptr != _session->surround_master());
|
||||
surround_export->set_sensitive (_session->vapor_export_barrier () && nullptr != _session->surround_master ());
|
||||
|
||||
#if 0
|
||||
/* skip mapping all session-config vars, we only need one */
|
||||
@ -4408,4 +4415,7 @@ Mixer_UI::toggle_surround_master ()
|
||||
have_sm = _session->surround_master () != nullptr;
|
||||
|
||||
act->set_active (have_sm);
|
||||
|
||||
Glib::RefPtr<Action> surround_export = ActionManager::get_action (X_("Main"), X_("SurroundExport"));
|
||||
surround_export->set_sensitive (have_sm && _session->vapor_export_barrier ());
|
||||
}
|
||||
|
@ -310,6 +310,8 @@ public:
|
||||
/** Open Simple Export Dialog */
|
||||
virtual void quick_export () = 0;
|
||||
|
||||
virtual void surround_export () = 0;
|
||||
|
||||
virtual void loudness_assistant (bool) = 0;
|
||||
|
||||
virtual void register_actions () = 0;
|
||||
|
@ -42,11 +42,12 @@ using namespace ARDOUR;
|
||||
using namespace PBD;
|
||||
using namespace Gtk;
|
||||
|
||||
SimpleExportDialog::SimpleExportDialog (PublicEditor& editor)
|
||||
SimpleExportDialog::SimpleExportDialog (PublicEditor& editor, bool vapor_export)
|
||||
: ARDOUR::SimpleExport ()
|
||||
, ArdourDialog (_("Quick Audio Export"), true, false)
|
||||
, ArdourDialog (vapor_export ? _("Surround Master Export") : _("Quick Audio Export"), true, false)
|
||||
, _editor (editor)
|
||||
, _eps (true)
|
||||
, _vapor_export (vapor_export)
|
||||
{
|
||||
if (_eps.the_combo ().get_parent ()) {
|
||||
_eps.the_combo ().get_parent ()->remove (_eps.the_combo ());
|
||||
@ -65,7 +66,11 @@ SimpleExportDialog::SimpleExportDialog (PublicEditor& editor)
|
||||
|
||||
/* clang-format off */
|
||||
t->attach (LBL ("Format preset:"), 0, 1, r, r + 1, FILL, SHRINK, 0, 0);
|
||||
t->attach (_eps.the_combo (), 1, 2, r, r + 1, EXPAND, SHRINK, 0, 0);
|
||||
if (_vapor_export) {
|
||||
t->attach (LBL ("ADM/BWF"), 1, 2, r, r + 1, EXPAND, SHRINK, 0, 0);
|
||||
} else {
|
||||
t->attach (_eps.the_combo (), 1, 2, r, r + 1, EXPAND | FILL, SHRINK, 0, 0);
|
||||
}
|
||||
++r;
|
||||
t->attach (LBL ("Export range:"), 0, 1, r, r + 1, FILL, SHRINK, 0, 0);
|
||||
t->attach (_range_combo, 1, 2, r, r + 1, EXPAND | FILL, SHRINK, 0, 0);
|
||||
@ -149,6 +154,11 @@ SimpleExportDialog::set_session (ARDOUR::Session* s)
|
||||
return;
|
||||
}
|
||||
|
||||
if (_vapor_export && (!s->surround_master () || !s->vapor_export_barrier ())) {
|
||||
set_error ("Error: Session has no exportable surround master.");
|
||||
return;
|
||||
}
|
||||
|
||||
/* check range */
|
||||
Location* srl (s->locations ()->session_range_location ());
|
||||
TimeSelection const& tsel (_editor.get_selection ().time);
|
||||
@ -245,8 +255,31 @@ void
|
||||
SimpleExportDialog::start_export ()
|
||||
{
|
||||
TreeModel::iterator r = _range_combo.get_active ();
|
||||
std::string range_name = (*r)[_range_cols.name];
|
||||
set_range ((*r)[_range_cols.start], (*r)[_range_cols.end]);
|
||||
SimpleExport::set_name ((*r)[_range_cols.name]);
|
||||
SimpleExport::set_name (range_name);
|
||||
|
||||
if (_vapor_export) {
|
||||
if (range_name.empty ()) {
|
||||
range_name = SimpleExport::_session->snap_name ();
|
||||
}
|
||||
|
||||
/* Ensure timespan exists, see also SimpleExport::run_export */
|
||||
auto ts = _manager->get_timespans ();
|
||||
assert (ts.size () == 1);
|
||||
assert (ts.front ()->timespans->size () < 2);
|
||||
if (ts.front ()->timespans->size () < 1) {
|
||||
ExportTimespanPtr timespan = _handler->add_timespan ();
|
||||
ts.front ()->timespans->push_back (timespan);
|
||||
}
|
||||
|
||||
/* https://professional.dolby.com/siteassets/content-creation/dolby-atmos/dolby_atmos_renderer_guide.pdf
|
||||
* chapter 13.9, page 155 suggests .wav.
|
||||
* There may however already be a .wav file with the given name, so -adm.wav is used.
|
||||
*/
|
||||
std::string vapor = Glib::build_filename (SimpleExport::_session->session_directory ().export_path (), range_name + "-adm.wav");
|
||||
_manager->get_timespans ().front ()->timespans->front ()->set_vapor (vapor);
|
||||
}
|
||||
|
||||
SimpleExport::_session->add_extra_xml (get_state ());
|
||||
|
||||
|
@ -39,7 +39,7 @@ namespace ARDOUR {
|
||||
class SimpleExportDialog : public ArdourDialog, virtual public ARDOUR::SimpleExport
|
||||
{
|
||||
public:
|
||||
SimpleExportDialog (PublicEditor&);
|
||||
SimpleExportDialog (PublicEditor&, bool vapor_export = false);
|
||||
|
||||
void set_session (ARDOUR::Session*);
|
||||
|
||||
@ -84,6 +84,7 @@ private:
|
||||
Gtk::ComboBoxText _post_export_combo;
|
||||
Gtk::Label _error_label;
|
||||
Gtk::ProgressBar _progress_bar;
|
||||
bool _vapor_export;
|
||||
|
||||
ExportRangeCols _range_cols;
|
||||
Glib::RefPtr<Gtk::ListStore> _range_list;
|
||||
|
Loading…
Reference in New Issue
Block a user