13
0

add a preference for MMC FastWind which allows skipping to markers

This commit is contained in:
Ben Loftis 2024-08-01 11:03:06 -05:00
parent 59e50c0e16
commit ff9a55df97
6 changed files with 54 additions and 2 deletions

View File

@ -3829,6 +3829,17 @@ These settings will only take effect after %1 is restarted.\n\
0, 127, 1, 10
));
ComboOption<FastWindOp> *mtc_op = new ComboOption<FastWindOp> (
"mmc-fast-wind-op",
_("MMC Fast-wind behavior"),
sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_fast_wind_op),
sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_fast_wind_op)
);
mtc_op->add (FastWindOff, _("Off (MMC fast-forward+rewind are ignored)"));
mtc_op->add (FastWindVarispeed, _("Varispeed"));
mtc_op->add (FastWindLocate, _("Marker Locate (MMC ffwd/rewd jumps to next/prior marker)"));
add_option (_("Transport/Chase"), mtc_op);
add_option (_("Transport/Chase"), new OptionEditorHeading (_("Transport Masters")));
add_option (_("Transport/Chase"),

View File

@ -177,6 +177,7 @@ CONFIG_VARIABLE (float, shuttle_speed_factor, "shuttle-speed-factor", 1.0f) // u
CONFIG_VARIABLE (float, shuttle_speed_threshold, "shuttle-speed-threshold", 5.0f) // used for MMC shuttle
CONFIG_VARIABLE (ShuttleUnits, shuttle_units, "shuttle-units", Percentage)
CONFIG_VARIABLE (float, shuttle_max_speed, "shuttle-max-speed", 8.0f)
CONFIG_VARIABLE (FastWindOp, mmc_fast_wind_op, "mmc-fast-wind-op", FastWindVarispeed)
CONFIG_VARIABLE (bool, locate_while_waiting_for_sync, "locate-while-waiting-for-sync", false)
CONFIG_VARIABLE (bool, disable_disarm_during_roll, "disable-disarm-during-roll", false)
CONFIG_VARIABLE (AutoReturnTarget, auto_return_target_list, "auto-return-target-list", AutoReturnTarget(LastLocate|RangeSelectionStart|Loop|RegionSelectionStart))

View File

@ -505,6 +505,12 @@ enum MonitorChoice {
MonitorCue = 0x3,
};
enum FastWindOp {
FastWindOff = 0,
FastWindVarispeed = 0x1, //rewind/ffwd commands will varispeed the transport (incl reverse playback)
FastWindLocate = 0x2, //rewind/ffwd commands will jump to next/prior marker
};
enum MonitorState {
MonitoringSilence = 0x0,
MonitoringInput = 0x2,

View File

@ -74,6 +74,7 @@ DEFINE_ENUM_CONVERT(ARDOUR::DiskIOPoint)
DEFINE_ENUM_CONVERT(ARDOUR::NoteMode)
DEFINE_ENUM_CONVERT(ARDOUR::ChannelMode)
DEFINE_ENUM_CONVERT(ARDOUR::MonitorChoice)
DEFINE_ENUM_CONVERT(ARDOUR::FastWindOp)
DEFINE_ENUM_CONVERT(ARDOUR::PluginType)
DEFINE_ENUM_CONVERT(ARDOUR::AlignStyle)
DEFINE_ENUM_CONVERT(ARDOUR::AlignChoice)

View File

@ -86,6 +86,7 @@ setup_enum_writer ()
Placement _Placement;
MonitorModel _MonitorModel;
MonitorChoice _MonitorChoice;
FastWindOp _FastWindOp;
MonitorState _MonitorState;
PFLPosition _PFLPosition;
AFLPosition _AFLPosition;
@ -380,6 +381,11 @@ setup_enum_writer ()
REGISTER_ENUM (DeltaOriginMarker);
REGISTER (_ClockDeltaMode);
REGISTER_ENUM (FastWindOff);
REGISTER_ENUM (FastWindVarispeed);
REGISTER_ENUM (FastWindLocate);
REGISTER (_FastWindOp);
REGISTER_ENUM (DenormalNone);
REGISTER_ENUM (DenormalFTZ);
REGISTER_ENUM (DenormalDAZ);

View File

@ -259,7 +259,20 @@ void
Session::mmc_rewind (MIDI::MachineControl &/*mmc*/)
{
if (Config->get_mmc_control ()) {
request_transport_speed(-Config->get_max_transport_speed());
switch (Config->get_mmc_fast_wind_op ()) {
case (FastWindOff):
//nothing
break;
case (FastWindVarispeed):
request_transport_speed (-Config->get_max_transport_speed());
break;
case (FastWindLocate):
timepos_t pos = locations()->first_mark_before (timepos_t (transport_sample()-1), false);
if (pos != timepos_t::max (Temporal::AudioTime)) {
request_locate (pos.samples());
}
break;
}
}
}
@ -267,7 +280,21 @@ void
Session::mmc_fast_forward (MIDI::MachineControl &/*mmc*/)
{
if (Config->get_mmc_control ()) {
request_transport_speed (Config->get_max_transport_speed());
switch (Config->get_mmc_fast_wind_op ()) {
case (FastWindOff):
//nothing
break;
case (FastWindVarispeed):
request_transport_speed (Config->get_max_transport_speed());
break;
case (FastWindLocate):
timepos_t pos = locations()->first_mark_after (timepos_t (transport_sample()+1), false);
if (pos != timepos_t::max (Temporal::AudioTime)) {
request_locate (pos.samples());
}
break;
}
}
}