PROGRAM_NAME));
add_option (_("Misc"), tsf);
- /* TRANSPORT */
-
- add_option (_("Transport"), new OptionEditorHeading (S_("Transport Options")));
-
- tsf = new BoolOption (
- "latched-record-enable",
- _("Keep record-enable engaged on stop"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_latched_record_enable),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_latched_record_enable)
- );
- // Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
- add_option (_("Transport"), tsf);
-
- tsf = new BoolOption (
- "loop-is-mode",
- _("Play loop is a transport mode"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_loop_is_mode),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_loop_is_mode)
- );
- Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
- (_("<b>When enabled</b> the loop button does not start playback but forces playback to always play the loop\n\n"
- "<b>When disabled</b> the loop button starts playing the loop, but stop then cancels loop playback")));
- add_option (_("Transport"), tsf);
-
- tsf = new BoolOption (
- "stop-recording-on-xrun",
- _("Stop recording when an xrun occurs"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_stop_recording_on_xrun),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_stop_recording_on_xrun)
- );
- Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
- string_compose (_("<b>When enabled</b> %1 will stop recording if an over- or underrun is detected by the audio engine"),
- PROGRAM_NAME));
- add_option (_("Transport"), tsf);
-
- tsf = new BoolOption (
- "create-xrun-marker",
- _("Create markers where xruns occur"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_create_xrun_marker),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_create_xrun_marker)
- );
- // Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
- add_option (_("Transport"), tsf);
-
- tsf = new BoolOption (
- "stop-at-session-end",
- _("Stop at the end of the session"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_stop_at_session_end),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_stop_at_session_end)
- );
- Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
- string_compose (_("<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the transport "
- "when it reaches the current session end marker\n\n"
- "<b>When disabled</b> %1 will continue to roll past the session end marker at all times"),
- PROGRAM_NAME));
- add_option (_("Transport"), tsf);
-
- tsf = new BoolOption (
- "seamless-loop",
- _("Do seamless looping (not possible when slaved to MTC, LTC etc)"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_seamless_loop),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_seamless_loop)
- );
- Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
- string_compose (_("<b>When enabled</b> this will loop by reading ahead and wrapping around at the loop point, "
- "preventing any need to do a transport locate at the end of the loop\n\n"
- "<b>When disabled</b> looping is done by locating back to the start of the loop when %1 reaches the end "
- "which will often cause a small click or delay"), PROGRAM_NAME));
- add_option (_("Transport"), tsf);
-
- tsf = new BoolOption (
- "disable-disarm-during-roll",
- _("Disable per-track record disarm while rolling"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_disable_disarm_during_roll),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_disable_disarm_during_roll)
- );
- Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _("<b>When enabled</b> this will prevent you from accidentally stopping specific tracks recording during a take"));
- add_option (_("Transport"), tsf);
-
- tsf = new BoolOption (
- "quieten_at_speed",
- _("12dB gain reduction during fast-forward and fast-rewind"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_quieten_at_speed),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_quieten_at_speed)
- );
- Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _("This will reduce the unpleasant increase in perceived volume "
- "that occurs when fast-forwarding or rewinding through some kinds of audio"));
- add_option (_("Transport"), tsf);
-
- ComboOption<float>* psc = new ComboOption<float> (
- "preroll-seconds",
- _("Preroll"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_preroll_seconds),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_preroll_seconds)
- );
- Gtkmm2ext::UI::instance()->set_tip (psc->tip_widget(),
- (_("The amount of preroll (in seconds) to apply when <b>Play with Preroll</b> is initiated.\n\n"
- "If <b>Follow Edits</b> is enabled, the preroll is applied to the playhead position when a region is selected or trimmed.")));
- psc->add (0.0, _("0 (no pre-roll)"));
- psc->add (0.1, _("0.1 second"));
- psc->add (0.25, _("0.25 second"));
- psc->add (0.5, _("0.5 second"));
- psc->add (1.0, _("1.0 second"));
- psc->add (2.0, _("2.0 seconds"));
- add_option (_("Transport"), psc);
-
- add_option (_("Sync"), new OptionEditorHeading (S_("Synchronization and Slave Options")));
-
- _sync_source = new ComboOption<SyncSource> (
- "sync-source",
- _("External timecode source"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_sync_source),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_source)
- );
-
- add_option (_("Sync"), _sync_source);
-
- _sync_framerate = new BoolOption (
- "timecode-sync-frame-rate",
- _("Match session video frame rate to external timecode"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_sync_frame_rate),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_sync_frame_rate)
- );
- Gtkmm2ext::UI::instance()->set_tip
- (_sync_framerate->tip_widget(),
- string_compose (_("This option controls the value of the video frame rate <i>while chasing</i> an external timecode source.\n\n"
- "<b>When enabled</b> the session video frame rate will be changed to match that of the selected external timecode source.\n\n"
- "<b>When disabled</b> the session video frame rate will not be changed to match that of the selected external timecode source."
- "Instead the frame rate indication in the main clock will flash red and %1 will convert between the external "
- "timecode standard and the session standard."), PROGRAM_NAME));
-
- add_option (_("Sync"), _sync_framerate);
-
- _sync_genlock = new BoolOption (
- "timecode-source-is-synced",
- _("Sync-lock timecode to clock (disable drift compensation)"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_is_synced),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_is_synced)
- );
- Gtkmm2ext::UI::instance()->set_tip
- (_sync_genlock->tip_widget(),
- string_compose (_("<b>When enabled</b> %1 will never varispeed when slaved to external timecode. "
- "Sync Lock indicates that the selected external timecode source shares clock-sync "
- "(Black & Burst, Wordclock, etc) with the audio interface. "
- "This option disables drift compensation. The transport speed is fixed at 1.0. "
- "Vari-speed LTC will be ignored and cause drift."
- "\n\n"
- "<b>When disabled</b> %1 will compensate for potential drift, regardless if the "
- "timecode sources shares clock sync."
- ), PROGRAM_NAME));
-
-
- add_option (_("Sync"), _sync_genlock);
-
- _sync_source_2997 = new BoolOption (
- "timecode-source-2997",
- _("Lock to 29.9700 fps instead of 30000/1001"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_2997),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_2997)
- );
- Gtkmm2ext::UI::instance()->set_tip
- (_sync_source_2997->tip_widget(),
- _("<b>When enabled</b> the external timecode source is assumed to use 29.97 fps instead of 30000/1001.\n"
- "SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions that "
- "drop-frame timecode has an accumulated error of -86ms over a 24-hour period.\n"
- "Drop-frame timecode would compensate exactly for a NTSC color frame rate of 30 * 0.9990 (ie 29.970000). "
- "That is not the actual rate. However, some vendors use that rate - despite it being against the specs - "
- "because the variant of using exactly 29.97 fps has zero timecode drift.\n"
- ));
-
- add_option (_("Sync"), _sync_source_2997);
-
- add_option (_("Sync/LTC"), new OptionEditorHeading (S_("LTC Reader")));
-
- _ltc_port = new ComboStringOption (
- "ltc-source-port",
- _("LTC incoming port"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_source_port),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_source_port)
- );
-
- vector<string> physical_inputs;
- physical_inputs.push_back (_("None"));
- AudioEngine::instance()->get_physical_inputs (DataType::AUDIO, physical_inputs);
- _ltc_port->set_popdown_strings (physical_inputs);
-
- populate_sync_options ();
- AudioEngine::instance()->Running.connect (engine_started_connection, MISSING_INVALIDATOR, boost::bind (&RCOptionEditor::populate_sync_options, this), gui_context());
-
- add_option (_("Sync/LTC"), _ltc_port);
-
- add_option (_("Sync/LTC"), new OptionEditorHeading (S_("LTC Generator")));
-
- add_option (_("Sync/LTC"),
- new BoolOption (
- "send-ltc",
- _("Enable LTC generator"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_ltc),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_ltc)
- ));
-
- _ltc_send_continuously = new BoolOption (
- "ltc-send-continuously",
- _("Send LTC while stopped"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_send_continuously),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_send_continuously)
- );
- Gtkmm2ext::UI::instance()->set_tip
- (_ltc_send_continuously->tip_widget(),
- string_compose (_("<b>When enabled</b> %1 will continue to send LTC information even when the transport (playhead) is not moving"), PROGRAM_NAME));
- add_option (_("Sync/LTC"), _ltc_send_continuously);
-
- _ltc_volume_slider = new HSliderOption("ltcvol", _("LTC generator level"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_output_volume),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_output_volume),
- -50, 0, .5, 5,
- .05, true);
-
- Gtkmm2ext::UI::instance()->set_tip
- (_ltc_volume_slider->tip_widget(),
- _("Specify the Peak Volume of the generated LTC signal in dBFS. A good value is 0dBu ^= -18dBFS in an EBU calibrated system"));
-
- add_option (_("Sync/LTC"), _ltc_volume_slider);
-
-
- add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Clock Generator")));
-
- add_option (_("Sync/MIDI"),
- new BoolOption (
- "send-midi-clock",
- _("Send MIDI Clock"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_midi_clock),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_midi_clock)
- ));
-
- add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Time Code (MTC) Generator")));
-
- add_option (_("Sync/MIDI"),
- new BoolOption (
- "send-mtc",
- _("Send MIDI Time Code"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_mtc),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_mtc)
- ));
-
- add_option (_("Sync/MIDI"),
- new SpinOption<int> (
- "mtc-qf-speed-tolerance",
- _("Percentage either side of normal transport speed to transmit MTC"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_mtc_qf_speed_tolerance),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_mtc_qf_speed_tolerance),
- 0, 20, 1, 5
- ));
-
- add_option (_("Sync/MIDI"), new OptionEditorHeading (_("Midi Machine Control (MMC)")));
-
- add_option (_("Sync/MIDI"),
- new BoolOption (
- "mmc-control",
- _("Respond to MMC commands"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_control),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_control)
- ));
-
- add_option (_("Sync/MIDI"),
- new BoolOption (
- "send-mmc",
- _("Send MMC commands"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_mmc),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_mmc)
- ));
-
- add_option (_("Sync/MIDI"),
- new SpinOption<uint8_t> (
- "mmc-receive-device-id",
- _("Inbound MMC device ID"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_receive_device_id),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_receive_device_id),
- 0, 128, 1, 10
- ));
-
- add_option (_("Sync/MIDI"),
- new SpinOption<uint8_t> (
- "mmc-send-device-id",
- _("Outbound MMC device ID"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_send_device_id),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_send_device_id),
- 0, 128, 1, 10
- ));
-
-
/* EDITOR */
- add_option (_("Editing"), new OptionEditorHeading (_("Editor Settings")));
+ add_option (_("Editor"), new OptionEditorHeading (_("Editor Settings")));
- add_option (_("Editing"),
+ add_option (_("Editor"),
new BoolOption (
"rubberbanding-snaps-to-grid",
_("Make rubberband selection rectangle snap to the grid"),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_name_new_markers),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_name_new_markers)
);
- add_option (_("Editing"), bo);
+ add_option (_("Editor"), bo);
Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), _("If enabled, popup a dialog when a new marker is created to allow its name to be set as it is created."
"\n\nYou can always rename markers by right-clicking on them"));
- add_option (S_("Editing"),
+ add_option (S_("Editor"),
new BoolOption (
"draggable-playhead",
_("Allow dragging of playhead"),
));
if (!Profile->get_mixbus()) {
- add_option (_("Editing"),
+ add_option (_("Editor"),
new BoolOption (
"show-zoom-tools",
_("Show zoom toolbar (if torn off)"),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_zoom_tools)
));
- add_option (_("Editing"),
+ add_option (_("Editor"),
new BoolOption (
"use-mouse-position-as-zoom-focus-on-scroll",
_("Always use mouse cursor position as zoom focus when zooming using mouse scroll wheel"),
));
} // !mixbus
- add_option (_("Editing"),
+ add_option (_("Editor"),
new BoolOption (
"use-time-rulers-to-zoom-with-vertical-drag",
_("Use time rulers area to zoom when clicking and dragging vertically"),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_time_rulers_to_zoom_with_vertical_drag)
));
- add_option (_("Editing"),
+ add_option (_("Editor"),
new BoolOption (
"use-double-click-to-zoom-to-selection",
_("Use double mouse click to zoom to selection"),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_double_click_to_zoom_to_selection)
));
- add_option (_("Editing"),
+ add_option (_("Editor"),
new BoolOption (
"update-editor-during-summary-drag",
_("Update editor window during drags of the summary"),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_update_editor_during_summary_drag)
));
- add_option (_("Editing"),
+ add_option (_("Editor"),
new BoolOption (
"autoscroll-editor",
_("Auto-scroll editor window when dragging near its edges"),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_autoscroll_editor)
));
- add_option (_("Editing"),
+ add_option (_("Editor"),
new BoolComboOption (
"show-region-gain-envelopes",
_("Show gain envelopes in audio regions"),
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_region_gain)
));
- add_option (_("Editing"), new OptionEditorHeading (_("Editor Behavior")));
+ add_option (_("Editor"), new OptionEditorHeading (_("Editor Behavior")));
- add_option (_("Editing"),
+ add_option (_("Editor"),
new BoolOption (
"automation-follows-regions",
_("Move relevant automation when audio regions are moved"),
fadeshape->add (FadeSlow, _("Slow"));
fadeshape->add (FadeFast, _("Fast"));
- add_option (_("Editing"), fadeshape);
+ add_option (_("Editor"), fadeshape);
bco = new BoolComboOption (
"use-overlap-equivalency",
sigc::mem_fun (*_rc_config, &RCConfiguration::set_use_overlap_equivalency)
);
- add_option (_("Editing"), bco);
+ add_option (_("Editor"), bco);
ComboOption<LayerModel>* lm = new ComboOption<LayerModel> (
"layer-model",
lm->add (LaterHigher, _("later is higher"));
lm->add (Manual, _("manual layering"));
- add_option (_("Editing"), lm);
+ add_option (_("Editor"), lm);
+
+ ComboOption<RegionSelectionAfterSplit> *rsas = new ComboOption<RegionSelectionAfterSplit> (
+ "region-selection-after-split",
+ _("After splitting selected regions, select"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_region_selection_after_split),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_region_selection_after_split));
+
+ // TODO: decide which of these modes are really useful
+ rsas->add(None, _("no regions"));
+ // rsas->add(NewlyCreatedLeft, _("newly-created regions before the split"));
+ // rsas->add(NewlyCreatedRight, _("newly-created regions after the split"));
+ rsas->add(NewlyCreatedBoth, _("newly-created regions"));
+ // rsas->add(Existing, _("unmodified regions in the existing selection"));
+ // rsas->add(ExistingNewlyCreatedLeft, _("existing selection and newly-created regions before the split"));
+ // rsas->add(ExistingNewlyCreatedRight, _("existing selection and newly-created regions after the split"));
+ rsas->add(ExistingNewlyCreatedBoth, _("existing selection and newly-created regions"));
+
+ add_option (_("Editor"), rsas);
+
+ /* MIXER -- SOLO AND MUTE */
+
+ add_option (_("Mixer"), new OptionEditorHeading (_("Solo")));
+
+ _solo_control_is_listen_control = new BoolOption (
+ "solo-control-is-listen-control",
+ _("Solo controls are Listen controls"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_control_is_listen_control),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_control_is_listen_control)
+ );
+
+ add_option (_("Mixer"), _solo_control_is_listen_control);
+
+ add_option (_("Mixer"),
+ new BoolOption (
+ "exclusive-solo",
+ _("Exclusive solo"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_exclusive_solo),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_exclusive_solo)
+ ));
+
+ add_option (_("Mixer"),
+ new BoolOption (
+ "show-solo-mutes",
+ _("Show solo muting"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_show_solo_mutes),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_show_solo_mutes)
+ ));
+
+ add_option (_("Mixer"),
+ new BoolOption (
+ "solo-mute-override",
+ _("Soloing overrides muting"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_mute_override),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_override)
+ ));
+
+ add_option (_("Mixer"),
+ new FaderOption (
+ "solo-mute-gain",
+ _("Solo-in-place mute cut (dB)"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_mute_gain),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_gain)
+ ));
+
+ _listen_position = new ComboOption<ListenPosition> (
+ "listen-position",
+ _("Listen Position"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_listen_position),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_listen_position)
+ );
+
+ _listen_position->add (AfterFaderListen, _("after-fader (AFL)"));
+ _listen_position->add (PreFaderListen, _("pre-fader (PFL)"));
+
+ add_option (_("Mixer"), _listen_position);
+
+ ComboOption<PFLPosition>* pp = new ComboOption<PFLPosition> (
+ "pfl-position",
+ _("PFL signals come from"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_pfl_position),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_pfl_position)
+ );
+
+ pp->add (PFLFromBeforeProcessors, _("before pre-fader processors"));
+ pp->add (PFLFromAfterProcessors, _("pre-fader but after pre-fader processors"));
+
+ add_option (_("Mixer"), pp);
+
+ ComboOption<AFLPosition>* pa = new ComboOption<AFLPosition> (
+ "afl-position",
+ _("AFL signals come from"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_afl_position),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_afl_position)
+ );
+
+ pa->add (AFLFromBeforeProcessors, _("immediately post-fader"));
+ pa->add (AFLFromAfterProcessors, _("after post-fader processors (before pan)"));
+
+ add_option (_("Mixer"), pa);
+
+ add_option (_("Mixer"), new OptionEditorHeading (_("Default track / bus muting options")));
+
+ add_option (_("Mixer"),
+ new BoolOption (
+ "mute-affects-pre-fader",
+ _("Mute affects pre-fader sends"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_pre_fader),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_pre_fader)
+ ));
+
+ add_option (_("Mixer"),
+ new BoolOption (
+ "mute-affects-post-fader",
+ _("Mute affects post-fader sends"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_post_fader),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_post_fader)
+ ));
+
+ add_option (_("Mixer"),
+ new BoolOption (
+ "mute-affects-control-outs",
+ _("Mute affects control outputs"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_control_outs),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_control_outs)
+ ));
+
+ add_option (_("Mixer"),
+ new BoolOption (
+ "mute-affects-main-outs",
+ _("Mute affects main outputs"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_main_outs),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_main_outs)
+ ));
- ComboOption<RegionSelectionAfterSplit> *rsas = new ComboOption<RegionSelectionAfterSplit> (
- "region-selection-after-split",
- _("After splitting selected regions, select"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_region_selection_after_split),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_region_selection_after_split));
- // TODO: decide which of these modes are really useful
- rsas->add(None, _("no regions"));
- // rsas->add(NewlyCreatedLeft, _("newly-created regions before the split"));
- // rsas->add(NewlyCreatedRight, _("newly-created regions after the split"));
- rsas->add(NewlyCreatedBoth, _("newly-created regions"));
- // rsas->add(Existing, _("unmodified regions in the existing selection"));
- // rsas->add(ExistingNewlyCreatedLeft, _("existing selection and newly-created regions before the split"));
- // rsas->add(ExistingNewlyCreatedRight, _("existing selection and newly-created regions after the split"));
- rsas->add(ExistingNewlyCreatedBoth, _("existing selection and newly-created regions"));
+if (!ARDOUR::Profile->get_mixbus()) {
+ add_option (_("Mixer"), new OptionEditorHeading (_("Send Routing")));
+ add_option (_("Mixer"),
+ new BoolOption (
+ "link-send-and-route-panner",
+ _("Link panners of Aux and External Sends with main panner by default"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_link_send_and_route_panner),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_link_send_and_route_panner)
+ ));
+}
- add_option (_("Editing"), rsas);
/* AUDIO */
sigc::mem_fun (*_rc_config, &RCConfiguration::set_tape_machine_mode)
));
- add_option (_("Audio"), new OptionEditorHeading (_("Connection of tracks and busses")));
+ add_option (_("Audio"), new OptionEditorHeading (_("Track and Bus Connections")));
if (!Profile->get_mixbus()) {
add_option (_("Audio"),
sigc::mem_fun (*_rc_config, &RCConfiguration::set_replicate_missing_region_channels)
));
- /* SOLO AND MUTE */
-
- add_option (_("Solo & mute"), new OptionEditorHeading (_("Solo")));
+ /* MIDI */
- _solo_control_is_listen_control = new BoolOption (
- "solo-control-is-listen-control",
- _("Solo controls are Listen controls"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_control_is_listen_control),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_control_is_listen_control)
- );
+ add_option (_("MIDI"), new OptionEditorHeading (_("MIDI Preferences")));
- add_option (_("Solo & mute"), _solo_control_is_listen_control);
+ add_option (_("MIDI"),
+ new SpinOption<float> (
+ "midi-readahead",
+ _("MIDI read-ahead time (seconds)"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_readahead),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_readahead),
+ 0.1, 10, 0.05, 1,
+ "", 1.0, 2
+ ));
- add_option (_("Solo & mute"),
- new BoolOption (
- "exclusive-solo",
- _("Exclusive solo"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_exclusive_solo),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_exclusive_solo)
+ add_option (_("MIDI"),
+ new SpinOption<int32_t> (
+ "initial-program-change",
+ _("Initial program change"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_initial_program_change),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_initial_program_change),
+ -1, 65536, 1, 10
));
- add_option (_("Solo & mute"),
+ add_option (_("MIDI"),
+ new BoolOption (
+ "display-first-midi-bank-as-zero",
+ _("Display first MIDI bank/program as 0"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_first_midi_bank_is_zero),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_first_midi_bank_is_zero)
+ ));
+
+ add_option (_("MIDI"),
new BoolOption (
- "show-solo-mutes",
- _("Show solo muting"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_show_solo_mutes),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_show_solo_mutes)
+ "never-display-periodic-midi",
+ _("Never display periodic MIDI messages (MTC, MIDI Clock)"),
+ sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_never_display_periodic_midi),
+ sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_never_display_periodic_midi)
));
- add_option (_("Solo & mute"),
+ add_option (_("MIDI"),
new BoolOption (
- "solo-mute-override",
- _("Soloing overrides muting"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_mute_override),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_override)
+ "sound-midi-notes",
+ _("Sound MIDI notes as they are selected in the editor"),
+ sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_sound_midi_notes),
+ sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_sound_midi_notes)
));
- add_option (_("Solo & mute"),
- new FaderOption (
- "solo-mute-gain",
- _("Solo-in-place mute cut (dB)"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_mute_gain),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_gain)
- ));
+ add_option (_("MIDI"),
+ new BoolOption (
+ "midi-feedback",
+ _("Send MIDI control feedback"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_feedback),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_feedback)
+ ));
+
+ add_option (_("MIDI"), new OptionEditorHeading (_("Midi Audition")));
+
+ ComboOption<std::string>* audition_synth = new ComboOption<std::string> (
+ "midi-audition-synth-uri",
+ _("Midi Audition Synth (LV2)"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_audition_synth_uri),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_audition_synth_uri)
+ );
+
+ audition_synth->add(X_(""), _("None"));
+ PluginInfoList all_plugs;
+ PluginManager& manager (PluginManager::instance());
+#ifdef LV2_SUPPORT
+ all_plugs.insert (all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end());
+
+ for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
+ if (manager.get_status (*i) == PluginManager::Hidden) continue;
+ if (!(*i)->is_instrument()) continue;
+ if ((*i)->type != ARDOUR::LV2) continue;
+ if ((*i)->name.length() > 46) {
+ audition_synth->add((*i)->unique_id, (*i)->name.substr (0, 44) + "...");
+ } else {
+ audition_synth->add((*i)->unique_id, (*i)->name);
+ }
+ }
+#endif
+
+ add_option (_("MIDI"), audition_synth);
+
+ /* Click */
+
+ add_option (_("Metronome"), new OptionEditorHeading (_("Click")));
+ add_option (_("Metronome"), new ClickOptions (_rc_config));
+
+
+ /* TRANSPORT & Sync */
+
+ add_option (_("Transport"), new OptionEditorHeading (S_("Transport Options")));
+
+ tsf = new BoolOption (
+ "latched-record-enable",
+ _("Keep record-enable engaged on stop"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_latched_record_enable),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_latched_record_enable)
+ );
+ // Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
+ add_option (_("Transport"), tsf);
+
+ tsf = new BoolOption (
+ "loop-is-mode",
+ _("Play loop is a transport mode"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_loop_is_mode),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_loop_is_mode)
+ );
+ Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
+ (_("<b>When enabled</b> the loop button does not start playback but forces playback to always play the loop\n\n"
+ "<b>When disabled</b> the loop button starts playing the loop, but stop then cancels loop playback")));
+ add_option (_("Transport"), tsf);
+
+ tsf = new BoolOption (
+ "stop-recording-on-xrun",
+ _("Stop recording when an xrun occurs"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_stop_recording_on_xrun),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_stop_recording_on_xrun)
+ );
+ Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
+ string_compose (_("<b>When enabled</b> %1 will stop recording if an over- or underrun is detected by the audio engine"),
+ PROGRAM_NAME));
+ add_option (_("Transport"), tsf);
+
+ tsf = new BoolOption (
+ "create-xrun-marker",
+ _("Create markers where xruns occur"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_create_xrun_marker),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_create_xrun_marker)
+ );
+ // Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
+ add_option (_("Transport"), tsf);
+
+ tsf = new BoolOption (
+ "stop-at-session-end",
+ _("Stop at the end of the session"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_stop_at_session_end),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_stop_at_session_end)
+ );
+ Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
+ string_compose (_("<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the transport "
+ "when it reaches the current session end marker\n\n"
+ "<b>When disabled</b> %1 will continue to roll past the session end marker at all times"),
+ PROGRAM_NAME));
+ add_option (_("Transport"), tsf);
+
+ tsf = new BoolOption (
+ "seamless-loop",
+ _("Do seamless looping (not possible when slaved to MTC, LTC etc)"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_seamless_loop),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_seamless_loop)
+ );
+ Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
+ string_compose (_("<b>When enabled</b> this will loop by reading ahead and wrapping around at the loop point, "
+ "preventing any need to do a transport locate at the end of the loop\n\n"
+ "<b>When disabled</b> looping is done by locating back to the start of the loop when %1 reaches the end "
+ "which will often cause a small click or delay"), PROGRAM_NAME));
+ add_option (_("Transport"), tsf);
+
+ tsf = new BoolOption (
+ "disable-disarm-during-roll",
+ _("Disable per-track record disarm while rolling"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_disable_disarm_during_roll),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_disable_disarm_during_roll)
+ );
+ Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _("<b>When enabled</b> this will prevent you from accidentally stopping specific tracks recording during a take"));
+ add_option (_("Transport"), tsf);
+
+ tsf = new BoolOption (
+ "quieten_at_speed",
+ _("12dB gain reduction during fast-forward and fast-rewind"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_quieten_at_speed),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_quieten_at_speed)
+ );
+ Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _("This will reduce the unpleasant increase in perceived volume "
+ "that occurs when fast-forwarding or rewinding through some kinds of audio"));
+ add_option (_("Transport"), tsf);
+
+ ComboOption<float>* psc = new ComboOption<float> (
+ "preroll-seconds",
+ _("Preroll"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_preroll_seconds),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_preroll_seconds)
+ );
+ Gtkmm2ext::UI::instance()->set_tip (psc->tip_widget(),
+ (_("The amount of preroll (in seconds) to apply when <b>Play with Preroll</b> is initiated.\n\n"
+ "If <b>Follow Edits</b> is enabled, the preroll is applied to the playhead position when a region is selected or trimmed.")));
+ psc->add (0.0, _("0 (no pre-roll)"));
+ psc->add (0.1, _("0.1 second"));
+ psc->add (0.25, _("0.25 second"));
+ psc->add (0.5, _("0.5 second"));
+ psc->add (1.0, _("1.0 second"));
+ psc->add (2.0, _("2.0 seconds"));
+ add_option (_("Transport"), psc);
+
+ add_option (_("Sync"), new OptionEditorHeading (S_("Synchronization and Slave Options")));
+
+ _sync_source = new ComboOption<SyncSource> (
+ "sync-source",
+ _("External timecode source"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_sync_source),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_source)
+ );
+
+ add_option (_("Sync"), _sync_source);
+
+ _sync_framerate = new BoolOption (
+ "timecode-sync-frame-rate",
+ _("Match session video frame rate to external timecode"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_sync_frame_rate),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_sync_frame_rate)
+ );
+ Gtkmm2ext::UI::instance()->set_tip
+ (_sync_framerate->tip_widget(),
+ string_compose (_("This option controls the value of the video frame rate <i>while chasing</i> an external timecode source.\n\n"
+ "<b>When enabled</b> the session video frame rate will be changed to match that of the selected external timecode source.\n\n"
+ "<b>When disabled</b> the session video frame rate will not be changed to match that of the selected external timecode source."
+ "Instead the frame rate indication in the main clock will flash red and %1 will convert between the external "
+ "timecode standard and the session standard."), PROGRAM_NAME));
- _listen_position = new ComboOption<ListenPosition> (
- "listen-position",
- _("Listen Position"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_listen_position),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_listen_position)
+ add_option (_("Sync"), _sync_framerate);
+
+ _sync_genlock = new BoolOption (
+ "timecode-source-is-synced",
+ _("Sync-lock timecode to clock (disable drift compensation)"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_is_synced),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_is_synced)
);
+ Gtkmm2ext::UI::instance()->set_tip
+ (_sync_genlock->tip_widget(),
+ string_compose (_("<b>When enabled</b> %1 will never varispeed when slaved to external timecode. "
+ "Sync Lock indicates that the selected external timecode source shares clock-sync "
+ "(Black & Burst, Wordclock, etc) with the audio interface. "
+ "This option disables drift compensation. The transport speed is fixed at 1.0. "
+ "Vari-speed LTC will be ignored and cause drift."
+ "\n\n"
+ "<b>When disabled</b> %1 will compensate for potential drift, regardless if the "
+ "timecode sources shares clock sync."
+ ), PROGRAM_NAME));
- _listen_position->add (AfterFaderListen, _("after-fader (AFL)"));
- _listen_position->add (PreFaderListen, _("pre-fader (PFL)"));
- add_option (_("Solo & mute"), _listen_position);
+ add_option (_("Sync"), _sync_genlock);
- ComboOption<PFLPosition>* pp = new ComboOption<PFLPosition> (
- "pfl-position",
- _("PFL signals come from"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_pfl_position),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_pfl_position)
+ _sync_source_2997 = new BoolOption (
+ "timecode-source-2997",
+ _("Lock to 29.9700 fps instead of 30000/1001"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_2997),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_2997)
);
+ Gtkmm2ext::UI::instance()->set_tip
+ (_sync_source_2997->tip_widget(),
+ _("<b>When enabled</b> the external timecode source is assumed to use 29.97 fps instead of 30000/1001.\n"
+ "SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions that "
+ "drop-frame timecode has an accumulated error of -86ms over a 24-hour period.\n"
+ "Drop-frame timecode would compensate exactly for a NTSC color frame rate of 30 * 0.9990 (ie 29.970000). "
+ "That is not the actual rate. However, some vendors use that rate - despite it being against the specs - "
+ "because the variant of using exactly 29.97 fps has zero timecode drift.\n"
+ ));
- pp->add (PFLFromBeforeProcessors, _("before pre-fader processors"));
- pp->add (PFLFromAfterProcessors, _("pre-fader but after pre-fader processors"));
+ add_option (_("Sync"), _sync_source_2997);
- add_option (_("Solo & mute"), pp);
+ add_option (_("Sync/LTC"), new OptionEditorHeading (S_("LTC Reader")));
- ComboOption<AFLPosition>* pa = new ComboOption<AFLPosition> (
- "afl-position",
- _("AFL signals come from"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_afl_position),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_afl_position)
+ _ltc_port = new ComboStringOption (
+ "ltc-source-port",
+ _("LTC incoming port"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_source_port),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_source_port)
);
- pa->add (AFLFromBeforeProcessors, _("immediately post-fader"));
- pa->add (AFLFromAfterProcessors, _("after post-fader processors (before pan)"));
-
- add_option (_("Solo & mute"), pa);
-
- add_option (_("Solo & mute"), new OptionEditorHeading (_("Default track / bus muting options")));
+ vector<string> physical_inputs;
+ physical_inputs.push_back (_("None"));
+ AudioEngine::instance()->get_physical_inputs (DataType::AUDIO, physical_inputs);
+ _ltc_port->set_popdown_strings (physical_inputs);
- add_option (_("Solo & mute"),
- new BoolOption (
- "mute-affects-pre-fader",
- _("Mute affects pre-fader sends"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_pre_fader),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_pre_fader)
- ));
+ populate_sync_options ();
+ AudioEngine::instance()->Running.connect (engine_started_connection, MISSING_INVALIDATOR, boost::bind (&RCOptionEditor::populate_sync_options, this), gui_context());
- add_option (_("Solo & mute"),
- new BoolOption (
- "mute-affects-post-fader",
- _("Mute affects post-fader sends"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_post_fader),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_post_fader)
- ));
+ add_option (_("Sync/LTC"), _ltc_port);
- add_option (_("Solo & mute"),
- new BoolOption (
- "mute-affects-control-outs",
- _("Mute affects control outputs"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_control_outs),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_control_outs)
- ));
+ add_option (_("Sync/LTC"), new OptionEditorHeading (S_("LTC Generator")));
- add_option (_("Solo & mute"),
- new BoolOption (
- "mute-affects-main-outs",
- _("Mute affects main outputs"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_main_outs),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_main_outs)
- ));
+ add_option (_("Sync/LTC"),
+ new BoolOption (
+ "send-ltc",
+ _("Enable LTC generator"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_ltc),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_ltc)
+ ));
+ _ltc_send_continuously = new BoolOption (
+ "ltc-send-continuously",
+ _("Send LTC while stopped"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_send_continuously),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_send_continuously)
+ );
+ Gtkmm2ext::UI::instance()->set_tip
+ (_ltc_send_continuously->tip_widget(),
+ string_compose (_("<b>When enabled</b> %1 will continue to send LTC information even when the transport (playhead) is not moving"), PROGRAM_NAME));
+ add_option (_("Sync/LTC"), _ltc_send_continuously);
-if (!ARDOUR::Profile->get_mixbus()) {
- add_option (_("Solo & mute"), new OptionEditorHeading (_("Send Routing")));
- add_option (_("Solo & mute"),
- new BoolOption (
- "link-send-and-route-panner",
- _("Link panners of Aux and External Sends with main panner by default"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_link_send_and_route_panner),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_link_send_and_route_panner)
- ));
-}
+ _ltc_volume_slider = new HSliderOption("ltcvol", _("LTC generator level"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_output_volume),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_output_volume),
+ -50, 0, .5, 5,
+ .05, true);
- /* Click */
+ Gtkmm2ext::UI::instance()->set_tip
+ (_ltc_volume_slider->tip_widget(),
+ _("Specify the Peak Volume of the generated LTC signal in dBFS. A good value is 0dBu ^= -18dBFS in an EBU calibrated system"));
- add_option (_("Metronom"), new OptionEditorHeading (_("Click")));
- add_option (_("Metronom"), new ClickOptions (_rc_config));
+ add_option (_("Sync/LTC"), _ltc_volume_slider);
- /* MIDI */
- add_option (_("MIDI"), new OptionEditorHeading (_("MIDI Preferences")));
+ add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Clock Generator")));
- add_option (_("MIDI"),
- new SpinOption<float> (
- "midi-readahead",
- _("MIDI read-ahead time (seconds)"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_readahead),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_readahead),
- 0.1, 10, 0.05, 1,
- "", 1.0, 2
+ add_option (_("Sync/MIDI"),
+ new BoolOption (
+ "send-midi-clock",
+ _("Send MIDI Clock"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_midi_clock),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_midi_clock)
));
- add_option (_("MIDI"),
- new SpinOption<int32_t> (
- "initial-program-change",
- _("Initial program change"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_initial_program_change),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_initial_program_change),
- -1, 65536, 1, 10
- ));
+ add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Time Code (MTC) Generator")));
- add_option (_("MIDI"),
+ add_option (_("Sync/MIDI"),
new BoolOption (
- "display-first-midi-bank-as-zero",
- _("Display first MIDI bank/program as 0"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_first_midi_bank_is_zero),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_first_midi_bank_is_zero)
+ "send-mtc",
+ _("Send MIDI Time Code"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_mtc),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_mtc)
));
- add_option (_("MIDI"),
- new BoolOption (
- "never-display-periodic-midi",
- _("Never display periodic MIDI messages (MTC, MIDI Clock)"),
- sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_never_display_periodic_midi),
- sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_never_display_periodic_midi)
- ));
+ add_option (_("Sync/MIDI"),
+ new SpinOption<int> (
+ "mtc-qf-speed-tolerance",
+ _("Percentage either side of normal transport speed to transmit MTC"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_mtc_qf_speed_tolerance),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_mtc_qf_speed_tolerance),
+ 0, 20, 1, 5
+ ));
- add_option (_("MIDI"),
- new BoolOption (
- "sound-midi-notes",
- _("Sound MIDI notes as they are selected in the editor"),
- sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_sound_midi_notes),
- sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_sound_midi_notes)
- ));
+ add_option (_("Sync/MIDI"), new OptionEditorHeading (_("Midi Machine Control (MMC)")));
- add_option (_("MIDI"),
+ add_option (_("Sync/MIDI"),
new BoolOption (
- "midi-feedback",
- _("Send MIDI control feedback"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_feedback),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_feedback)
+ "mmc-control",
+ _("Respond to MMC commands"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_control),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_control)
));
- add_option (_("MIDI"), new OptionEditorHeading (_("Midi Audition")));
+ add_option (_("Sync/MIDI"),
+ new BoolOption (
+ "send-mmc",
+ _("Send MMC commands"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_mmc),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_mmc)
+ ));
- ComboOption<std::string>* audition_synth = new ComboOption<std::string> (
- "midi-audition-synth-uri",
- _("Midi Audition Synth (LV2)"),
- sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_audition_synth_uri),
- sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_audition_synth_uri)
- );
+ add_option (_("Sync/MIDI"),
+ new SpinOption<uint8_t> (
+ "mmc-receive-device-id",
+ _("Inbound MMC device ID"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_receive_device_id),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_receive_device_id),
+ 0, 128, 1, 10
+ ));
- audition_synth->add(X_(""), _("None"));
- PluginInfoList all_plugs;
- PluginManager& manager (PluginManager::instance());
-#ifdef LV2_SUPPORT
- all_plugs.insert (all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end());
+ add_option (_("Sync/MIDI"),
+ new SpinOption<uint8_t> (
+ "mmc-send-device-id",
+ _("Outbound MMC device ID"),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_send_device_id),
+ sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_send_device_id),
+ 0, 128, 1, 10
+ ));
- for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
- if (manager.get_status (*i) == PluginManager::Hidden) continue;
- if (!(*i)->is_instrument()) continue;
- if ((*i)->type != ARDOUR::LV2) continue;
- if ((*i)->name.length() > 46) {
- audition_synth->add((*i)->unique_id, (*i)->name.substr (0, 44) + "...");
- } else {
- audition_synth->add((*i)->unique_id, (*i)->name);
- }
- }
-#endif
- add_option (_("MIDI"), audition_synth);
+ /* Control Surfaces */
+ add_option (_("Control Surfaces"), new OptionEditorHeading (_("Control Surfaces")));
+ add_option (_("Control Surfaces"), new ControlSurfacesOptions ());
/* MIDI PORTs */
add_option (_("MIDI Ports"), new OptionEditorHeading (_("MIDI Port Options")));
add_option (_("MIDI Ports"), new MidiPortOptions ());
add_option (_("MIDI Ports"), new OptionEditorBlank ());
-
- /* Control Surfaces */
-
- add_option (_("Control Surfaces"), new OptionEditorHeading (_("Control Surfaces")));
- add_option (_("Control Surfaces"), new ControlSurfacesOptions ());
+ /* PLUGINS */
#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT || defined MACVST_SUPPORT || defined AUDIOUNIT_SUPPORT)
add_option (_("Plugins"), new OptionEditorHeading (_("Scan/Discover")));