mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-17 04:06:26 +01:00
LTC generator config
git-svn-id: svn://localhost/ardour2/branches/3.0@13324 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
4600530d50
commit
6f15ec9618
5 changed files with 87 additions and 7 deletions
|
|
@ -285,6 +285,48 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** Component which provides the UI for a GTK HScale.
|
||||||
|
*/
|
||||||
|
class HSliderOption : public Option
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/** Construct an ComboOption.
|
||||||
|
* @param i id
|
||||||
|
* @param n User-visible name.
|
||||||
|
* @param g Slot to get the variable's value.
|
||||||
|
* @param s Slot to set the variable's value.
|
||||||
|
*/
|
||||||
|
HSliderOption (
|
||||||
|
std::string const & i,
|
||||||
|
std::string const & n,
|
||||||
|
Gtk::Adjustment &adj
|
||||||
|
)
|
||||||
|
: Option (i, n)
|
||||||
|
{
|
||||||
|
_label = manage (new Gtk::Label (n + ":"));
|
||||||
|
_label->set_alignment (0, 0.5);
|
||||||
|
_hscale = manage (new Gtk::HScale(adj));
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_state_from_config () { }
|
||||||
|
|
||||||
|
void add_to_page (OptionEditorPage* p)
|
||||||
|
{
|
||||||
|
add_widgets_to_page (p, _label, _hscale);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_sensitive (bool yn) {
|
||||||
|
_hscale->set_sensitive (yn);
|
||||||
|
}
|
||||||
|
|
||||||
|
Gtk::Widget& tip_widget() { return *_hscale; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
Gtk::Label* _label;
|
||||||
|
Gtk::HScale* _hscale;
|
||||||
|
};
|
||||||
|
|
||||||
/** Component which provides the UI to handle an enumerated option using a GTK ComboBox.
|
/** Component which provides the UI to handle an enumerated option using a GTK ComboBox.
|
||||||
* The template parameter is the enumeration.
|
* The template parameter is the enumeration.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1106,13 +1106,36 @@ RCOptionEditor::RCOptionEditor ()
|
||||||
add_option (_("Transport"),
|
add_option (_("Transport"),
|
||||||
new BoolOption (
|
new BoolOption (
|
||||||
"send-ltc",
|
"send-ltc",
|
||||||
_("Generate Linear/Longitudinal Time Code"),
|
_("Enable LTC generator"),
|
||||||
sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_ltc),
|
sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_ltc),
|
||||||
sigc::mem_fun (*_rc_config, &RCConfiguration::set_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(),
|
||||||
|
_("If enabled, Ardour will continue to send LTC information even when the transport (playhead) is not moving."));
|
||||||
|
add_option (_("Transport"), _ltc_send_continuously);
|
||||||
|
|
||||||
|
_ltc_volume_adjustment = new Gtk::Adjustment(-18, -50, 0, .5, 3);
|
||||||
|
_ltc_volume_adjustment->set_value (20 * log10(_rc_config->get_ltc_output_volume()));
|
||||||
|
_ltc_volume_adjustment->signal_value_changed().connect (sigc::mem_fun (*this, &RCOptionEditor::ltc_generator_volume_changed));
|
||||||
|
_ltc_volume_slider = new HSliderOption("ltcvol", ("LTC generator level:"), *_ltc_volume_adjustment);
|
||||||
|
|
||||||
|
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 (_("Transport"), _ltc_volume_slider);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
parameter_changed ("sync-source");
|
parameter_changed ("sync-source");
|
||||||
|
parameter_changed ("send-ltc");
|
||||||
|
|
||||||
/* EDITOR */
|
/* EDITOR */
|
||||||
|
|
||||||
|
|
@ -1763,9 +1786,17 @@ RCOptionEditor::parameter_changed (string const & p)
|
||||||
_sync_framerate->set_sensitive (false);
|
_sync_framerate->set_sensitive (false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else if (p == "send-ltc") {
|
||||||
|
bool const s = Config->get_send_ltc ();
|
||||||
|
_ltc_send_continuously->set_sensitive (s);
|
||||||
|
_ltc_volume_slider->set_sensitive (s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RCOptionEditor::ltc_generator_volume_changed () {
|
||||||
|
_rc_config->set_ltc_output_volume (pow(10, _ltc_volume_adjustment->get_value() / 20));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RCOptionEditor::populate_sync_options ()
|
RCOptionEditor::populate_sync_options ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void parameter_changed (std::string const &);
|
void parameter_changed (std::string const &);
|
||||||
|
void ltc_generator_volume_changed ();
|
||||||
ARDOUR::RCConfiguration* _rc_config;
|
ARDOUR::RCConfiguration* _rc_config;
|
||||||
BoolOption* _solo_control_is_listen_control;
|
BoolOption* _solo_control_is_listen_control;
|
||||||
ComboOption<ARDOUR::ListenPosition>* _listen_position;
|
ComboOption<ARDOUR::ListenPosition>* _listen_position;
|
||||||
|
|
@ -46,6 +47,9 @@ private:
|
||||||
BoolOption* _sync_framerate;
|
BoolOption* _sync_framerate;
|
||||||
BoolOption* _sync_genlock;
|
BoolOption* _sync_genlock;
|
||||||
ComboStringOption* _ltc_port;
|
ComboStringOption* _ltc_port;
|
||||||
|
HSliderOption* _ltc_volume_slider;
|
||||||
|
Gtk::Adjustment* _ltc_volume_adjustment;
|
||||||
|
BoolOption* _ltc_send_continuously;
|
||||||
|
|
||||||
PBD::ScopedConnection parameter_change_connection;
|
PBD::ScopedConnection parameter_change_connection;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,9 @@ CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", t
|
||||||
CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", JACK)
|
CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", JACK)
|
||||||
CONFIG_VARIABLE (std::string, ltc_source_port, "ltc-source-port", "system:capture_1")
|
CONFIG_VARIABLE (std::string, ltc_source_port, "ltc-source-port", "system:capture_1")
|
||||||
CONFIG_VARIABLE (bool, send_ltc, "send-ltc", false)
|
CONFIG_VARIABLE (bool, send_ltc, "send-ltc", false)
|
||||||
CONFIG_VARIABLE (std::string, ltc_output_port, "ltc-sink-port", "")
|
CONFIG_VARIABLE (bool, ltc_send_continuously, "ltc-send-continuously", true)
|
||||||
|
CONFIG_VARIABLE (std::string, ltc_output_port, "ltc-output-port", "")
|
||||||
|
CONFIG_VARIABLE (float, ltc_output_volume, "ltc-output-volume", 0.125893)
|
||||||
|
|
||||||
/* control surfaces */
|
/* control surfaces */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,8 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
|
||||||
return nframes;
|
return nframes;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX %1 to %2 / %3\n", start_frame, end_frame, nframes));
|
/* range from libltc (38..218) || - 128.0 -> (-90..90) */
|
||||||
|
const float ltcvol = Config->get_ltc_output_volume()/(90.0); // pow(10, db/20.0)/(90.0);
|
||||||
|
|
||||||
/* all systems go. Now here's the plan:
|
/* all systems go. Now here's the plan:
|
||||||
*
|
*
|
||||||
|
|
@ -293,7 +294,7 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
|
||||||
// (6a)
|
// (6a)
|
||||||
while ((ltc_buf_off < ltc_buf_len) && (txf < nframes)) {
|
while ((ltc_buf_off < ltc_buf_len) && (txf < nframes)) {
|
||||||
const float v1 = ltc_enc_buf[ltc_buf_off++] - 128.0;
|
const float v1 = ltc_enc_buf[ltc_buf_off++] - 128.0;
|
||||||
const jack_default_audio_sample_t val = (jack_default_audio_sample_t) (v1*smult);
|
const jack_default_audio_sample_t val = (jack_default_audio_sample_t) (v1*ltcvol);
|
||||||
out[txf++] = val;
|
out[txf++] = val;
|
||||||
}
|
}
|
||||||
#ifdef LTC_GEN_FRAMEDBUG
|
#ifdef LTC_GEN_FRAMEDBUG
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue