Vapor: Simple Export GUI
This commit is contained in:
parent
7228144d6e
commit
2a928dae19
@ -32,6 +32,9 @@
|
|||||||
<menu name='Export' action='Export'>
|
<menu name='Export' action='Export'>
|
||||||
<menuitem action='QuickExport'/>
|
<menuitem action='QuickExport'/>
|
||||||
<menuitem action='ExportAudio'/>
|
<menuitem action='ExportAudio'/>
|
||||||
|
#ifdef VAPOR
|
||||||
|
<menuitem action='SurroundExport'/>
|
||||||
|
#endif
|
||||||
<menuitem action='StemExport'/>
|
<menuitem action='StemExport'/>
|
||||||
<menuitem action='ExportVideo'/>
|
<menuitem action='ExportVideo'/>
|
||||||
</menu>
|
</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));
|
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);
|
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));
|
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);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
|
@ -333,6 +333,7 @@ public:
|
|||||||
void export_range ();
|
void export_range ();
|
||||||
void export_region ();
|
void export_region ();
|
||||||
void quick_export ();
|
void quick_export ();
|
||||||
|
void surround_export ();
|
||||||
|
|
||||||
/* export for analysis only */
|
/* export for analysis only */
|
||||||
void loudness_assistant (bool);
|
void loudness_assistant (bool);
|
||||||
|
@ -106,6 +106,17 @@ Editor::quick_export ()
|
|||||||
dialog.run();
|
dialog.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::surround_export ()
|
||||||
|
{
|
||||||
|
if (!_session || !_session->vapor_export_barrier ()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SimpleExportDialog dialog (*this, true);
|
||||||
|
dialog.set_session (_session);
|
||||||
|
dialog.run();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::loudness_assistant_marker ()
|
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");
|
RefPtr<ToggleAction> surround_action = ActionManager::get_toggle_action (X_("Mixer"), "ToggleSurroundMaster");
|
||||||
surround_action->set_active (false);
|
surround_action->set_active (false);
|
||||||
|
|
||||||
|
Glib::RefPtr<Action> surround_export = ActionManager::get_action (X_("Main"), X_("SurroundExport"));
|
||||||
|
surround_export->set_sensitive (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1282,9 +1285,12 @@ Mixer_UI::set_session (Session* sess)
|
|||||||
update_scene_buttons();
|
update_scene_buttons();
|
||||||
|
|
||||||
RefPtr<ToggleAction> surround_action = ActionManager::get_toggle_action (X_("Mixer"), "ToggleSurroundMaster");
|
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) {
|
if (!_session) {
|
||||||
surround_action->set_sensitive (false);
|
surround_action->set_sensitive (false);
|
||||||
|
surround_export->set_sensitive (false);
|
||||||
|
|
||||||
PBD::Unwinder<bool> uw (ignore_plugin_reorder, true);
|
PBD::Unwinder<bool> uw (ignore_plugin_reorder, true);
|
||||||
favorite_plugins_model->clear ();
|
favorite_plugins_model->clear ();
|
||||||
_selection.clear ();
|
_selection.clear ();
|
||||||
@ -1300,6 +1306,7 @@ Mixer_UI::set_session (Session* sess)
|
|||||||
|
|
||||||
surround_action->set_sensitive (_session->vapor_barrier ());
|
surround_action->set_sensitive (_session->vapor_barrier ());
|
||||||
surround_action->set_active (nullptr != _session->surround_master());
|
surround_action->set_active (nullptr != _session->surround_master());
|
||||||
|
surround_export->set_sensitive (_session->vapor_export_barrier () && nullptr != _session->surround_master ());
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* skip mapping all session-config vars, we only need one */
|
/* 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;
|
have_sm = _session->surround_master () != nullptr;
|
||||||
|
|
||||||
act->set_active (have_sm);
|
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 */
|
/** Open Simple Export Dialog */
|
||||||
virtual void quick_export () = 0;
|
virtual void quick_export () = 0;
|
||||||
|
|
||||||
|
virtual void surround_export () = 0;
|
||||||
|
|
||||||
virtual void loudness_assistant (bool) = 0;
|
virtual void loudness_assistant (bool) = 0;
|
||||||
|
|
||||||
virtual void register_actions () = 0;
|
virtual void register_actions () = 0;
|
||||||
|
@ -42,11 +42,12 @@ using namespace ARDOUR;
|
|||||||
using namespace PBD;
|
using namespace PBD;
|
||||||
using namespace Gtk;
|
using namespace Gtk;
|
||||||
|
|
||||||
SimpleExportDialog::SimpleExportDialog (PublicEditor& editor)
|
SimpleExportDialog::SimpleExportDialog (PublicEditor& editor, bool vapor_export)
|
||||||
: ARDOUR::SimpleExport ()
|
: ARDOUR::SimpleExport ()
|
||||||
, ArdourDialog (_("Quick Audio Export"), true, false)
|
, ArdourDialog (vapor_export ? _("Surround Master Export") : _("Quick Audio Export"), true, false)
|
||||||
, _editor (editor)
|
, _editor (editor)
|
||||||
, _eps (true)
|
, _eps (true)
|
||||||
|
, _vapor_export (vapor_export)
|
||||||
{
|
{
|
||||||
if (_eps.the_combo ().get_parent ()) {
|
if (_eps.the_combo ().get_parent ()) {
|
||||||
_eps.the_combo ().get_parent ()->remove (_eps.the_combo ());
|
_eps.the_combo ().get_parent ()->remove (_eps.the_combo ());
|
||||||
@ -65,7 +66,11 @@ SimpleExportDialog::SimpleExportDialog (PublicEditor& editor)
|
|||||||
|
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
t->attach (LBL ("Format preset:"), 0, 1, r, r + 1, FILL, SHRINK, 0, 0);
|
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;
|
++r;
|
||||||
t->attach (LBL ("Export range:"), 0, 1, r, r + 1, FILL, SHRINK, 0, 0);
|
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);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_vapor_export && (!s->surround_master () || !s->vapor_export_barrier ())) {
|
||||||
|
set_error ("Error: Session has no exportable surround master.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* check range */
|
/* check range */
|
||||||
Location* srl (s->locations ()->session_range_location ());
|
Location* srl (s->locations ()->session_range_location ());
|
||||||
TimeSelection const& tsel (_editor.get_selection ().time);
|
TimeSelection const& tsel (_editor.get_selection ().time);
|
||||||
@ -245,8 +255,31 @@ void
|
|||||||
SimpleExportDialog::start_export ()
|
SimpleExportDialog::start_export ()
|
||||||
{
|
{
|
||||||
TreeModel::iterator r = _range_combo.get_active ();
|
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]);
|
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 ());
|
SimpleExport::_session->add_extra_xml (get_state ());
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ namespace ARDOUR {
|
|||||||
class SimpleExportDialog : public ArdourDialog, virtual public ARDOUR::SimpleExport
|
class SimpleExportDialog : public ArdourDialog, virtual public ARDOUR::SimpleExport
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SimpleExportDialog (PublicEditor&);
|
SimpleExportDialog (PublicEditor&, bool vapor_export = false);
|
||||||
|
|
||||||
void set_session (ARDOUR::Session*);
|
void set_session (ARDOUR::Session*);
|
||||||
|
|
||||||
@ -84,6 +84,7 @@ private:
|
|||||||
Gtk::ComboBoxText _post_export_combo;
|
Gtk::ComboBoxText _post_export_combo;
|
||||||
Gtk::Label _error_label;
|
Gtk::Label _error_label;
|
||||||
Gtk::ProgressBar _progress_bar;
|
Gtk::ProgressBar _progress_bar;
|
||||||
|
bool _vapor_export;
|
||||||
|
|
||||||
ExportRangeCols _range_cols;
|
ExportRangeCols _range_cols;
|
||||||
Glib::RefPtr<Gtk::ListStore> _range_list;
|
Glib::RefPtr<Gtk::ListStore> _range_list;
|
||||||
|
Loading…
Reference in New Issue
Block a user