13
0

WebSockets: output position time in seconds

This commit is contained in:
Luciano Iam 2020-04-18 14:56:46 +02:00 committed by Robin Gareus
parent bfbb15011c
commit dc97bf3ff0
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
6 changed files with 62 additions and 20 deletions

View File

@ -31,6 +31,8 @@ using namespace ARDOUR;
WebsocketsDispatcher::NodeMethodMap
WebsocketsDispatcher::_node_to_method = boost::assign::map_list_of
NODE_METHOD_PAIR (tempo)
NODE_METHOD_PAIR (transport_roll)
NODE_METHOD_PAIR (record_state)
NODE_METHOD_PAIR (strip_gain)
NODE_METHOD_PAIR (strip_pan)
NODE_METHOD_PAIR (strip_mute)
@ -53,9 +55,10 @@ WebsocketsDispatcher::dispatch (Client client, const NodeStateMessage& msg)
void
WebsocketsDispatcher::update_all_nodes (Client client)
{
update (client, Node::tempo, globals ().tempo ());
update (client, Node::position_time, globals ().position_time ());
update (client, Node::transport_roll, globals ().transport_roll ());
update (client, Node::record_state, globals ().record_state ());
update (client, Node::tempo, globals ().tempo ());
for (uint32_t strip_n = 0; strip_n < strips ().strip_count (); ++strip_n) {
boost::shared_ptr<Stripable> strip = strips ().nth_strip (strip_n);
@ -135,6 +138,30 @@ WebsocketsDispatcher::tempo_handler (Client client, const NodeStateMessage& msg)
}
}
void
WebsocketsDispatcher::transport_roll_handler (Client client, const NodeStateMessage& msg)
{
const NodeState& state = msg.state ();
if (msg.is_write () && (state.n_val () > 0)) {
globals ().set_transport_roll (state.nth_val (0));
} else {
update (client, Node::transport_roll, globals ().transport_roll ());
}
}
void
WebsocketsDispatcher::record_state_handler (Client client, const NodeStateMessage& msg)
{
const NodeState& state = msg.state ();
if (msg.is_write () && (state.n_val () > 0)) {
globals ().set_record_state (state.nth_val (0));
} else {
update (client, Node::record_state, globals ().record_state ());
}
}
void
WebsocketsDispatcher::strip_gain_handler (Client client, const NodeStateMessage& msg)
{

View File

@ -42,6 +42,8 @@ private:
static NodeMethodMap _node_to_method;
void tempo_handler (Client, const NodeStateMessage&);
void transport_roll_handler (Client client, const NodeStateMessage&);
void record_state_handler (Client client, const NodeStateMessage&);
void strip_gain_handler (Client, const NodeStateMessage&);
void strip_pan_handler (Client, const NodeStateMessage&);
void strip_mute_handler (Client, const NodeStateMessage&);

View File

@ -162,6 +162,8 @@ ArdourFeedback::update_all (std::string node, uint32_t strip_n, uint32_t plugin_
bool
ArdourFeedback::poll () const
{
update_all (Node::position_time, globals ().position_time ());
for (uint32_t strip_n = 0; strip_n < strips ().strip_count (); ++strip_n) {
// meters
boost::shared_ptr<Stripable> strip = strips ().nth_strip (strip_n);

View File

@ -22,6 +22,30 @@
using namespace ARDOUR;
double
ArdourGlobals::tempo () const
{
Tempo tempo = session ().tempo_map ().tempo_at_sample (0);
return tempo.note_type () * tempo.pulses_per_minute ();
}
void
ArdourGlobals::set_tempo (double bpm)
{
bpm = max (0.01, bpm);
TempoMap& tempo_map = session ().tempo_map ();
Tempo tempo (bpm, tempo_map.tempo_at_sample (0).note_type (), bpm);
tempo_map.add_tempo (tempo, 0.0, 0, AudioTime);
}
double
ArdourGlobals::position_time () const
{
samplepos_t t = session ().transport_sample ();
samplecnt_t f = session ().sample_rate ();
return static_cast<double>(t) / static_cast<double>(f);
}
bool
ArdourGlobals::transport_roll () const
{
@ -50,19 +74,3 @@ ArdourGlobals::set_record_state (bool value)
basic_ui ().rec_enable_toggle ();
}
}
double
ArdourGlobals::tempo () const
{
Tempo tempo = session ().tempo_map ().tempo_at_sample (0);
return tempo.note_type () * tempo.pulses_per_minute ();
}
void
ArdourGlobals::set_tempo (double bpm)
{
bpm = max (0.01, bpm);
TempoMap& tempo_map = session ().tempo_map ();
Tempo tempo (bpm, tempo_map.tempo_at_sample (0).note_type (), bpm);
tempo_map.add_tempo (tempo, 0.0, 0, AudioTime);
}

View File

@ -28,14 +28,16 @@ public:
: SurfaceComponent (surface){};
virtual ~ArdourGlobals (){};
double tempo () const;
void set_tempo (double);
double position_time () const;
bool transport_roll () const;
void set_transport_roll (bool);
bool record_state () const;
void set_record_state (bool);
double tempo () const;
void set_tempo (double);
};
#endif // _ardour_surface_websockets_globals_h_

View File

@ -32,6 +32,7 @@
namespace Node
{
const std::string tempo = "tempo";
const std::string position_time = "position_time";
const std::string transport_roll = "transport_roll";
const std::string record_state = "record_state";
const std::string strip_description = "strip_description";