no-read-past-end for destructive crossfade as well; cleanup xfade coefficient arrays...
[ardour.git] / libs / ardour / configuration.cc
index 4003946576a821ff4a47f2fb31e7d70c512019ac..3b4ad4b45f54bdea5506a4bec9718e587d03276b 100644 (file)
@@ -207,6 +207,11 @@ Configuration::state (bool user_only)
                node->add_child_nocopy(option_node("disk-choice-space-threshold", string(buf)));
        }
 
+       if (!user_only || midi_feedback_interval_ms_is_user) {
+               snprintf(buf, sizeof(buf), "%" PRIu32, midi_feedback_interval_ms);
+               node->add_child_nocopy(option_node("midi-feedback-interval-ms", string(buf)));
+       }
+
        if (!user_only || mute_affects_pre_fader_is_user) {
                node->add_child_nocopy(option_node("mute-affects-pre-fader", mute_affects_pre_fader?"yes":"no"));
        }
@@ -252,8 +257,8 @@ Configuration::state (bool user_only)
        if (!user_only || plugins_stop_with_transport_is_user) {
                node->add_child_nocopy(option_node("plugins-stop-with-transport", plugins_stop_with_transport?"yes":"no"));
        }
-       if (!user_only || no_sw_monitoring_is_user) {
-               node->add_child_nocopy(option_node("no-sw-monitoring", no_sw_monitoring?"yes":"no"));
+       if (!user_only || use_sw_monitoring_is_user) {
+               node->add_child_nocopy(option_node("use-sw-monitoring", use_sw_monitoring?"yes":"no"));
        }
        if (!user_only || stop_recording_on_xrun_is_user) {
                node->add_child_nocopy(option_node("stop-recording-on-xrun", stop_recording_on_xrun?"yes":"no"));
@@ -286,6 +291,14 @@ Configuration::state (bool user_only)
                snprintf (buf, sizeof (buf), "%f", speed_quietning);
                node->add_child_nocopy(option_node("quieten-at-speed", buf));
        }
+       if (!user_only || latched_record_enable_is_user) {
+               node->add_child_nocopy(option_node("latched-record-enable", latched_record_enable?"yes":"no"));
+       }
+       if (!user_only || tape_dir_is_user) {
+               if (!tape_dir.empty()) {
+                       node->add_child_nocopy(option_node("tape-dir", tape_dir));
+               }
+       }
 
        /* use-vst is always per-user */
        node->add_child_nocopy (option_node ("use-vst", use_vst?"yes":"no"));
@@ -395,8 +408,10 @@ Configuration::set_state (const XMLNode& root)
                                        set_trace_midi_output (option_value == "yes");
                                } else if (option_name == "plugins-stop-with-transport") {
                                        set_plugins_stop_with_transport (option_value == "yes");
-                               } else if (option_name == "no-sw-monitoring") {
-                                       set_no_sw_monitoring (option_value == "yes");
+                               } else if (option_name == "use-sw-monitoring") {
+                                       set_use_sw_monitoring (option_value == "yes");
+                               } else if (option_name == "no-sw-monitoring") {     /* DEPRECATED */
+                                       set_use_sw_monitoring (option_value != "yes");
                                } else if (option_name == "stop-recording-on-xrun") {
                                        set_stop_recording_on_xrun (option_value == "yes");
                                } else if (option_name == "verify-remove-last-capture") {
@@ -422,6 +437,12 @@ Configuration::set_state (const XMLNode& root)
                                        if (sscanf (option_value.c_str(), "%f", &v) == 1) {
                                                set_quieten_at_speed (v);
                                        }
+                               } else if (option_name == "midi-feedback-interval-ms") {
+                                       set_midi_feedback_interval_ms (atoi (option_value.c_str()));
+                               } else if (option_name == "latched-record-enable") {
+                                       set_latched_record_enable (option_value == "yes");
+                               } else if (option_name == "tape-dir") {
+                                       set_tape_dir (option_value);
                                }
                        }
                        
@@ -468,17 +489,20 @@ Configuration::set_defaults ()
        trace_midi_input = false;
        trace_midi_output = false;
        plugins_stop_with_transport = false;
-       no_sw_monitoring = false;
+       use_sw_monitoring = true;
        stop_recording_on_xrun = false;
        verify_remove_last_capture = true;
        stop_at_session_end = true;
-       seamless_looping = false;
+       seamless_looping = true;
        auto_xfade = true;
        no_new_session_dialog = false;
        timecode_source_is_synced = true;
        use_vst = true; /* if we build with VST_SUPPORT, otherwise no effect */
        quieten_at_speed = true;
+       tape_dir = "";
 
+       midi_feedback_interval_ms = 100;
+       
        // this is about 5 minutes at 48kHz, 4 bytes/sample
        disk_choice_space_threshold = 57600000;
 
@@ -505,7 +529,7 @@ Configuration::set_defaults ()
        trace_midi_input_is_user = false;
        trace_midi_output_is_user = false;
        plugins_stop_with_transport_is_user = false;
-       no_sw_monitoring_is_user = false;
+       use_sw_monitoring_is_user = false;
        stop_recording_on_xrun_is_user = false;
        verify_remove_last_capture_is_user = false;
        stop_at_session_end_is_user = false;
@@ -514,6 +538,9 @@ Configuration::set_defaults ()
        no_new_session_dialog_is_user = false;
        timecode_source_is_synced_is_user = false;
        quieten_at_speed_is_user = false;
+       midi_feedback_interval_ms_is_user = false;
+       latched_record_enable_is_user = false;
+       tape_dir_is_user = false;
 }
 
 Configuration::MidiPortDescriptor::MidiPortDescriptor (const XMLNode& node)
@@ -832,6 +859,21 @@ Configuration::set_midi_port_name (string name)
        }
 }
 
+uint32_t
+Configuration::get_midi_feedback_interval_ms ()
+{
+       return midi_feedback_interval_ms;
+}
+
+void
+Configuration::set_midi_feedback_interval_ms (uint32_t val)
+{
+       midi_feedback_interval_ms = val;
+       if (user_configuration) {
+               midi_feedback_interval_ms_is_user = true;
+       }
+}
+
 bool
 Configuration::get_use_hardware_monitoring()
 {
@@ -923,17 +965,17 @@ Configuration::set_plugins_stop_with_transport (bool yn)
 }
 
 bool
-Configuration::get_no_sw_monitoring ()
+Configuration::get_use_sw_monitoring ()
 {
-       return no_sw_monitoring;
+       return use_sw_monitoring;
 }
 
 void
-Configuration::set_no_sw_monitoring (bool yn)
+Configuration::set_use_sw_monitoring (bool yn)
 {
-       no_sw_monitoring = yn;
+       use_sw_monitoring = yn;
        if (user_configuration) {
-               no_sw_monitoring_is_user = true;
+               use_sw_monitoring_is_user = true;
        }
 }
 
@@ -1103,3 +1145,30 @@ Configuration::set_quieten_at_speed (float gain_coefficient)
                quieten_at_speed_is_user = true;
        }
 }
+
+void
+Configuration::set_latched_record_enable (bool yn)
+{
+       latched_record_enable = yn;
+       if (user_configuration) {
+               latched_record_enable_is_user = true;
+       }
+}
+
+bool
+Configuration::get_latched_record_enable ()
+{
+       return latched_record_enable;
+}
+
+string
+Configuration::get_tape_dir () 
+{
+       return tape_dir;
+}
+
+void
+Configuration::set_tape_dir (string path)
+{
+       tape_dir = path;
+}