From ece5093234e4c185cf536d2b4e5edfeb90622409 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 27 Jul 2010 14:09:16 +0000 Subject: change Control::{set,get}_float to Control::{set,get}_double and make almost all Control-related stuff use double rather than random mixtures of float, double and some integer value ; make hans' program change stuff work quite a bit better (not finished yet) including keyboard edting of pgm change values git-svn-id: svn://localhost/ardour2/branches/3.0@7514 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.cc | 16 +++--- gtk2_ardour/ardour_ui.h | 4 +- gtk2_ardour/canvas-program-change.cc | 21 +++++++- gtk2_ardour/canvas-program-change.h | 8 +-- gtk2_ardour/midi_region_view.cc | 92 ++++++++++++++++----------------- gtk2_ardour/midi_region_view.h | 3 ++ libs/ardour/amp.cc | 10 ++-- libs/ardour/ardour/amp.h | 6 +-- libs/ardour/ardour/automation_control.h | 8 +-- libs/ardour/ardour/midi_track.h | 2 +- libs/ardour/ardour/monitor_processor.h | 8 +-- libs/ardour/ardour/panner.h | 4 +- libs/ardour/ardour/plugin_insert.h | 4 +- libs/ardour/ardour/route.h | 8 +-- libs/ardour/ardour/track.h | 4 +- libs/ardour/automatable.cc | 2 +- libs/ardour/automation_control.cc | 10 ++-- libs/ardour/midi_buffer.cc | 3 -- libs/ardour/midi_port.cc | 3 +- libs/ardour/midi_source.cc | 3 +- libs/ardour/midi_track.cc | 2 +- libs/ardour/monitor_processor.cc | 2 +- libs/ardour/panner.cc | 4 +- libs/ardour/plugin_insert.cc | 6 +-- libs/ardour/route.cc | 8 +-- libs/ardour/track.cc | 10 ++-- libs/evoral/evoral/Control.hpp | 9 ++-- libs/evoral/evoral/ControlSet.hpp | 2 +- libs/evoral/evoral/Parameter.hpp | 28 +--------- libs/evoral/evoral/types.hpp | 7 +-- libs/evoral/src/Control.cpp | 8 +-- libs/evoral/src/ControlSet.cpp | 6 +-- libs/evoral/src/Sequence.cpp | 1 - libs/pbd/pbd/controllable.h | 12 ++--- 34 files changed, 155 insertions(+), 169 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 9d789c20be..004f37075d 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -3425,18 +3425,18 @@ ARDOUR_UI::TransportControllable::TransportControllable (std::string name, ARDOU } void -ARDOUR_UI::TransportControllable::set_value (float val) +ARDOUR_UI::TransportControllable::set_value (double val) { if (type == ShuttleControl) { double fract; - if (val == 0.5f) { + if (val == 0.5) { fract = 0.0; } else { - if (val < 0.5f) { - fract = -((0.5f - val)/0.5f); + if (val < 0.5) { + fract = -((0.5 - val)/0.5); } else { - fract = ((val - 0.5f)/0.5f); + fract = ((val - 0.5)/0.5); } } @@ -3444,7 +3444,7 @@ ARDOUR_UI::TransportControllable::set_value (float val) return; } - if (val < 0.5f) { + if (val < 0.5) { /* do nothing: these are radio-style actions */ return; } @@ -3488,10 +3488,10 @@ ARDOUR_UI::TransportControllable::set_value (float val) } } -float +double ARDOUR_UI::TransportControllable::get_value (void) const { - float val = 0.0f; + float val = 0.0; switch (type) { case Roll: diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 04cd080ac3..b960af2074 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -368,8 +368,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr }; TransportControllable (std::string name, ARDOUR_UI&, ToggleType); - void set_value (float); - float get_value (void) const; + void set_value (double); + double get_value (void) const; void set_id (const std::string&); diff --git a/gtk2_ardour/canvas-program-change.cc b/gtk2_ardour/canvas-program-change.cc index 27a163ef7c..77169ce8ec 100644 --- a/gtk2_ardour/canvas-program-change.cc +++ b/gtk2_ardour/canvas-program-change.cc @@ -20,7 +20,7 @@ CanvasProgramChange::CanvasProgramChange( double y, string& model_name, string& custom_device_mode, - nframes_t event_time, + double event_time, uint8_t channel, uint8_t program) : CanvasFlag( @@ -113,11 +113,28 @@ CanvasProgramChange::on_event(GdkEvent* ev) initialize_popup_menus(); _popup_initialized = true; } - _popup.popup(ev->button.button, ev->button.time); + _popup.popup(ev->button.button, ev->button.time); return true; } break; + case GDK_KEY_PRESS: + switch (ev->key.keyval) { + case GDK_Up: + case GDK_KP_Up: + case GDK_uparrow: + _region.previous_program(*this); + break; + case GDK_Down: + case GDK_KP_Down: + case GDK_downarrow: + _region.next_program(*this); + break; + default: + break; + } + break; + case GDK_SCROLL: if (ev->scroll.direction == GDK_SCROLL_UP) { _region.previous_program(*this); diff --git a/gtk2_ardour/canvas-program-change.h b/gtk2_ardour/canvas-program-change.h index cddd78059b..4093984555 100644 --- a/gtk2_ardour/canvas-program-change.h +++ b/gtk2_ardour/canvas-program-change.h @@ -26,7 +26,7 @@ public: double y, string& model_name, string& custom_device_mode, - nframes_t event_time, + double _event_time, uint8_t channel, uint8_t program ); @@ -41,8 +41,8 @@ public: string custom_device_mode() const { return _custom_device_mode; } void set_custom_device_mode(string custom_device_mode) { _custom_device_mode = custom_device_mode; } - nframes_t event_time() const { return _event_time; } - void set_event_time(nframes_t new_time) { _event_time = new_time; }; + double event_time() const { return _event_time; } + void set_event_time(double new_time) { _event_time = new_time; }; uint8_t program() const { return _program; } void set_program(uint8_t new_program) { _program = new_program; }; @@ -57,7 +57,7 @@ public: private: string _model_name; string _custom_device_mode; - nframes_t _event_time; + double _event_time; uint8_t _channel; uint8_t _program; Gtk::Menu _popup; diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index b7fd04765c..086fb83ad3 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -40,6 +40,7 @@ #include "ardour/session.h" #include "evoral/Parameter.hpp" +#include "evoral/MIDIParameters.hpp" #include "evoral/Control.hpp" #include "evoral/midi_util.h" @@ -988,15 +989,28 @@ MidiRegionView::redisplay_model() void MidiRegionView::display_program_changes() { - boost::shared_ptr control = _model->control(MidiPgmChangeAutomation); + MidiTimeAxisView* const mtv = dynamic_cast(&trackview); + uint16_t chn_mask = mtv->channel_selector().get_selected_channels(); + + for (uint8_t i = 0; i < 16; ++i) { + if (chn_mask & (1< control = + _model->control(Evoral::MIDI::ProgramChange (MidiPgmChangeAutomation, channel)); + if (!control) { return; } Glib::Mutex::Lock lock (control->list()->lock()); - uint8_t channel = control->parameter().channel(); - for (AutomationList::const_iterator event = control->list()->begin(); event != control->list()->end(); ++event) { double event_time = (*event)->when; @@ -1007,7 +1021,7 @@ MidiRegionView::display_program_changes() boost::shared_ptr msb_control = _model->control(bank_select_msb); uint8_t msb = 0; if (msb_control != 0) { - msb = uint8_t(floor(msb_control->get_float(true, event_time) + 0.5)); + msb = uint8_t(floor(msb_control->get_double(true, event_time) + 0.5)); } // Get current value of bank select LSB at time of the program change @@ -1015,7 +1029,7 @@ MidiRegionView::display_program_changes() boost::shared_ptr lsb_control = _model->control(bank_select_lsb); uint8_t lsb = 0; if (lsb_control != 0) { - lsb = uint8_t(floor(lsb_control->get_float(true, event_time) + 0.5)); + lsb = uint8_t(floor(lsb_control->get_double(true, event_time) + 0.5)); } MIDI::Name::PatchPrimaryKey patch_key(msb, lsb, program_number); @@ -1030,7 +1044,8 @@ MidiRegionView::display_program_changes() add_pgm_change(program_change, patch->name()); } else { char buf[4]; - snprintf(buf, 4, "%d", int(program_number)); + // program_number is zero-based: convert to one-based + snprintf(buf, 4, "%d", int(program_number+1)); add_pgm_change(program_change, buf); } } @@ -1504,29 +1519,25 @@ MidiRegionView::add_pgm_change(PCEvent& program, const string& displaytext) void MidiRegionView::get_patch_key_at(double time, uint8_t channel, MIDI::Name::PatchPrimaryKey& key) { - cerr << "getting patch key at " << time << " for channel " << channel << endl; Evoral::Parameter bank_select_msb(MidiCCAutomation, channel, MIDI_CTL_MSB_BANK); boost::shared_ptr msb_control = _model->control(bank_select_msb); - float msb = -1.0; + double msb = 0.0; if (msb_control != 0) { - msb = int(msb_control->get_float(true, time)); - cerr << "got msb " << msb; + msb = int(msb_control->get_double(true, time)); } Evoral::Parameter bank_select_lsb(MidiCCAutomation, channel, MIDI_CTL_LSB_BANK); boost::shared_ptr lsb_control = _model->control(bank_select_lsb); - float lsb = -1.0; + double lsb = 0.0; if (lsb_control != 0) { - lsb = lsb_control->get_float(true, time); - cerr << " got lsb " << lsb; + lsb = lsb_control->get_double(true, time); } Evoral::Parameter program_change(MidiPgmChangeAutomation, channel, 0); boost::shared_ptr program_control = _model->control(program_change); - float program_number = -1.0; + double program_number = -1.0; if (program_control != 0) { - program_number = program_control->get_float(true, time); - cerr << " got program " << program_number << endl; + program_number = program_control->get_double(true, time); } key.msb = (int) floor(msb + 0.5); @@ -1543,23 +1554,24 @@ MidiRegionView::alter_program_change(PCEvent& old_program, const MIDI::Name::Pat Evoral::Parameter bank_select_msb(MidiCCAutomation, old_program.channel, MIDI_CTL_MSB_BANK); boost::shared_ptr msb_control = _model->control(bank_select_msb); if (msb_control != 0) { - msb_control->set_float(float(new_patch.msb), true, old_program.time); + msb_control->set_double(double(new_patch.msb), true, old_program.time); } // TODO: Get the real event here and alter them at the original times Evoral::Parameter bank_select_lsb(MidiCCAutomation, old_program.channel, MIDI_CTL_LSB_BANK); boost::shared_ptr lsb_control = _model->control(bank_select_lsb); if (lsb_control != 0) { - lsb_control->set_float(float(new_patch.lsb), true, old_program.time); + lsb_control->set_double(double(new_patch.lsb), true, old_program.time); } Evoral::Parameter program_change(MidiPgmChangeAutomation, old_program.channel, 0); boost::shared_ptr program_control = _model->control(program_change); assert(program_control != 0); - program_control->set_float(float(new_patch.program_number), true, old_program.time); + program_control->set_double(float(new_patch.program_number), true, old_program.time); - redisplay_model(); + _pgm_changes.clear (); + display_program_changes (); // XXX would be nice to limit to just old_program.channel } void @@ -1572,39 +1584,27 @@ MidiRegionView::program_selected(CanvasProgramChange& program, const MIDI::Name: void MidiRegionView::previous_program(CanvasProgramChange& program) { - MIDI::Name::PatchPrimaryKey key; - get_patch_key_at(program.event_time(), program.channel(), key); - - boost::shared_ptr patch = - MIDI::Name::MidiPatchManager::instance().previous_patch( - _model_name, - _custom_device_mode, - program.channel(), - key); + if (program.program() < 127) { + MIDI::Name::PatchPrimaryKey key; + get_patch_key_at(program.event_time(), program.channel(), key); + PCEvent program_change_event(program.event_time(), program.program(), program.channel()); - PCEvent program_change_event(program.event_time(), program.program(), program.channel()); - if (patch) { - alter_program_change(program_change_event, patch->patch_primary_key()); - } + key.program_number++; + alter_program_change(program_change_event, key); + } } void MidiRegionView::next_program(CanvasProgramChange& program) { - MIDI::Name::PatchPrimaryKey key; - get_patch_key_at(program.event_time(), program.channel(), key); - - boost::shared_ptr patch = - MIDI::Name::MidiPatchManager::instance().next_patch( - _model_name, - _custom_device_mode, - program.channel(), - key); + if (program.program() > 0) { + MIDI::Name::PatchPrimaryKey key; + get_patch_key_at(program.event_time(), program.channel(), key); + PCEvent program_change_event(program.event_time(), program.program(), program.channel()); - PCEvent program_change_event(program.event_time(), program.program(), program.channel()); - if (patch) { - alter_program_change(program_change_event, patch->patch_primary_key()); - } + key.program_number--; + alter_program_change(program_change_event, key); + } } void diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index b45d2b532f..1f77cf3741 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -420,6 +420,9 @@ class MidiRegionView : public RegionView void drop_down_keys (); void maybe_select_by_position (GdkEventButton* ev, double x, double y); void get_events (Events& e, Evoral::Sequence::NoteOperator op, uint8_t val, int chan_mask = 0); + + void display_program_changes_on_channel (uint8_t); + }; diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc index 36d0c6bf33..f2448c06aa 100644 --- a/libs/ardour/amp.cc +++ b/libs/ardour/amp.cc @@ -93,7 +93,7 @@ Amp::run (BufferSet& bufs, sframes_t /*start_frame*/, sframes_t /*end_frame*/, n } else { /* manual (scalar) gain */ - gain_t const dg = _gain_control->user_float(); + gain_t const dg = _gain_control->user_double(); if (_current_gain != dg) { @@ -353,7 +353,7 @@ Amp::apply_simple_gain (AudioBuffer& buf, nframes_t nframes, gain_t target) void Amp::inc_gain (gain_t factor, void *src) { - float desired_gain = _gain_control->user_float(); + float desired_gain = _gain_control->user_double(); if (desired_gain == 0.0f) { set_gain (0.000001f + (0.000001f * factor), src); @@ -379,7 +379,7 @@ Amp::set_gain (gain_t val, void *src) return; } - _gain_control->set_float(val, false); + _gain_control->set_double(val, false); _session.set_dirty(); } @@ -416,7 +416,7 @@ Amp::set_state (const XMLNode& node, int version) } void -Amp::GainControl::set_value (float val) +Amp::GainControl::set_value (double val) { // max gain at about +6dB (10.0 ^ ( 6 dB * 0.05)) if (val > 1.99526231f) @@ -427,7 +427,7 @@ Amp::GainControl::set_value (float val) AutomationControl::set_value(val); } -float +double Amp::GainControl::get_value (void) const { return AutomationControl::get_value(); diff --git a/libs/ardour/ardour/amp.h b/libs/ardour/ardour/amp.h index 1b6baaebd1..52aceaf85f 100644 --- a/libs/ardour/ardour/amp.h +++ b/libs/ardour/ardour/amp.h @@ -64,7 +64,7 @@ public: static void declick (BufferSet& bufs, nframes_t nframes, int dir); - gain_t gain () const { return _gain_control->user_float(); } + gain_t gain () const { return _gain_control->user_double(); } virtual void set_gain (gain_t g, void *src); void inc_gain (gain_t delta, void *src); @@ -81,8 +81,8 @@ public: set_flags (Controllable::Flag (flags() | Controllable::GainLike)); } - void set_value (float val); - float get_value (void) const; + void set_value (double val); + double get_value (void) const; Amp* _amp; }; diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h index 3c832ae704..2d22b9e661 100644 --- a/libs/ardour/ardour/automation_control.h +++ b/libs/ardour/ardour/automation_control.h @@ -77,14 +77,14 @@ public: /** Set the value and do the right thing based on automation state * (e.g. record if necessary, etc.) */ - void set_value(float val); + void set_value(double val); /** Get the current effective value based on automation state. */ - float get_value() const; + double get_value() const; - float lower() const { return parameter().min(); } - float upper() const { return parameter().max(); } + double lower() const { return parameter().min(); } + double upper() const { return parameter().max(); } protected: ARDOUR::Session& _session; diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index df1d2e11df..6236667650 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -72,7 +72,7 @@ public: , _route (route) {} - void set_value (float val); + void set_value (double val); MidiTrack* _route; }; diff --git a/libs/ardour/ardour/monitor_processor.h b/libs/ardour/ardour/monitor_processor.h index 4bf399c16a..e453551b0b 100644 --- a/libs/ardour/ardour/monitor_processor.h +++ b/libs/ardour/ardour/monitor_processor.h @@ -48,7 +48,7 @@ template class MPControl : public PBD::Controllable { /* Controllable API */ - void set_value (float v) { + void set_value (double v) { T newval = (T) v; if (newval != _value) { _value = newval; @@ -56,12 +56,12 @@ template class MPControl : public PBD::Controllable { } } - float get_value () const { + double get_value () const { return (float) _value; } - float lower () const { return _lower; } - float upper () const { return _upper; } + double lower () const { return _lower; } + double upper () const { return _upper; } /* "access as T" API */ diff --git a/libs/ardour/ardour/panner.h b/libs/ardour/ardour/panner.h index 2b2801841d..abee3431ce 100644 --- a/libs/ardour/ardour/panner.h +++ b/libs/ardour/ardour/panner.h @@ -291,8 +291,8 @@ public: AutomationList* alist() { return (AutomationList*)_list.get(); } Panner& panner; - void set_value (float); - float get_value (void) const; + void set_value (double); + double get_value (void) const; }; boost::shared_ptr pan_control (int id, int chan=0) { diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index 2e24bdd707..c962832eb1 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -78,8 +78,8 @@ class PluginInsert : public Processor PluginControl (PluginInsert* p, const Evoral::Parameter ¶m, boost::shared_ptr list = boost::shared_ptr()); - void set_value (float val); - float get_value (void) const; + void set_value (double val); + double get_value (void) const; private: PluginInsert* _plugin; diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 54eb41f97b..b54ef74ca6 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -319,16 +319,16 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, struct SoloControllable : public AutomationControl { SoloControllable (std::string name, Route&); - void set_value (float); - float get_value (void) const; + void set_value (double); + double get_value (void) const; Route& route; }; struct MuteControllable : public AutomationControl { MuteControllable (std::string name, Route&); - void set_value (float); - float get_value (void) const; + void set_value (double); + double get_value (void) const; Route& route; }; diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index b3d69e4403..e40f197436 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -185,8 +185,8 @@ class Track : public Route, public PublicDiskstream struct RecEnableControllable : public PBD::Controllable { RecEnableControllable (Track&); - void set_value (float); - float get_value (void) const; + void set_value (double); + double get_value (void) const; Track& track; }; diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc index be3701fc93..c71fabda37 100644 --- a/libs/ardour/automatable.cc +++ b/libs/ardour/automatable.cc @@ -398,7 +398,7 @@ Automatable::automation_snapshot (nframes_t now, bool force) boost::shared_ptr c = boost::dynamic_pointer_cast(i->second); if (c->automation_write()) { - c->list()->rt_add (now, i->second->user_float()); + c->list()->rt_add (now, i->second->user_double()); } } diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc index 1460c42c7b..a4e0a7bbc0 100644 --- a/libs/ardour/automation_control.cc +++ b/libs/ardour/automation_control.cc @@ -40,22 +40,20 @@ AutomationControl::AutomationControl( { } - -float +double AutomationControl::get_value() const { bool from_list = _list && ((AutomationList*)_list.get())->automation_playback(); - return Control::get_float(from_list, _session.transport_frame()); + return Control::get_double (from_list, _session.transport_frame()); } - void -AutomationControl::set_value(float value) +AutomationControl::set_value(double value) { bool to_list = _list && _session.transport_stopped() && ((AutomationList*)_list.get())->automation_write(); - Control::set_float(value, to_list, _session.transport_frame()); + Control::set_double(value, to_list, _session.transport_frame()); Changed(); /* EMIT SIGNAL */ } diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc index 8299d811f6..2eb9df8c5c 100644 --- a/libs/ardour/midi_buffer.cc +++ b/libs/ardour/midi_buffer.cc @@ -170,9 +170,6 @@ MidiBuffer::push_back(TimeType time, size_t size, const uint8_t* data) DEBUG_TRACE (DEBUG::MidiIO, DEBUG_STR(a).str()); #endif - // cerr << "MidiBuffer: pushing event @ " << time - // << " size = " << size << endl; - if (_size + stamp_size + size >= _capacity) { cerr << "MidiBuffer::push_back failed (buffer is full)" << endl; return false; diff --git a/libs/ardour/midi_port.cc b/libs/ardour/midi_port.cc index 6858fd1cbd..4c57b2918e 100644 --- a/libs/ardour/midi_port.cc +++ b/libs/ardour/midi_port.cc @@ -75,12 +75,11 @@ MidiPort::get_midi_buffer (nframes_t nframes, nframes_t offset) jack_midi_event_get (&ev, jack_buffer, i); -#if 0 if (ev.buffer[0] == 0xfe) { /* throw away active sensing */ continue; } -#endif + if (ev.time > off && ev.time < off+nframes) { _buffer->push_back (ev); } diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc index fe6c733a82..5a823d332e 100644 --- a/libs/ardour/midi_source.cc +++ b/libs/ardour/midi_source.cc @@ -206,10 +206,11 @@ MidiSource::midi_read (Evoral::EventSink& dst, sframes_t source_start if (time_frames < start + cnt) { dst.write(time_frames + stamp_offset - negative_stamp_offset, i->event_type(), i->size(), i->buffer()); + if (tracker) { Evoral::MIDIEvent& ev (*(Evoral::MIDIEvent*) (&(*i))); if (ev.is_note_on()) { - DEBUG_TRACE (DEBUG::MidiSourceIO, string_compose ("\t%1 add note on %2 @ %3\n", _name, ev.note(), time_frames)); + DEBUG_TRACE (DEBUG::MidiSourceIO, string_compose ("\t%1 add note on %2 @ %3 velocity %4\n", _name, ev.note(), time_frames, (int) ev.velocity())); tracker->add (ev.note(), ev.channel()); } else if (ev.is_note_off()) { DEBUG_TRACE (DEBUG::MidiSourceIO, string_compose ("\t%1 add note off %2 @ %3\n", _name, ev.note(), time_frames)); diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index b1a8b1f210..83e42800be 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -527,7 +527,7 @@ MidiTrack::write_immediate_event(size_t size, const uint8_t* buf) } void -MidiTrack::MidiControl::set_value(float val) +MidiTrack::MidiControl::set_value(double val) { bool valid = false; if (isinf(val)) { diff --git a/libs/ardour/monitor_processor.cc b/libs/ardour/monitor_processor.cc index 6faf46a64d..bcdc28a4ae 100644 --- a/libs/ardour/monitor_processor.cc +++ b/libs/ardour/monitor_processor.cc @@ -18,7 +18,7 @@ using namespace std; /* specialize for bool because of set_value() semantics */ namespace ARDOUR { - template<> void MPControl::set_value (float v) { + template<> void MPControl::set_value (double v) { bool newval = fabs (v) >= 0.5; if (newval != _value) { _value = newval; diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc index 9921936cf7..b224bf558e 100644 --- a/libs/ardour/panner.cc +++ b/libs/ardour/panner.cc @@ -100,13 +100,13 @@ StreamPanner::set_mono (bool yn) } void -Panner::PanControllable::set_value (float val) +Panner::PanControllable::set_value (double val) { panner.streampanner (parameter().id()).set_position (direct_control_to_pan (val)); AutomationControl::set_value(val); } -float +double Panner::PanControllable::get_value (void) const { return AutomationControl::get_value(); diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index f50483beaf..8322770d31 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -979,7 +979,7 @@ PluginInsert::PluginControl::PluginControl (PluginInsert* p, const Evoral::Param } void -PluginInsert::PluginControl::set_value (float val) +PluginInsert::PluginControl::set_value (double val) { /* FIXME: probably should be taking out some lock here.. */ @@ -1020,12 +1020,12 @@ PluginInsert::PluginControl::set_value (float val) AutomationControl::set_value(val); } -float +double PluginInsert::PluginControl::get_value (void) const { /* FIXME: probably should be taking out some lock here.. */ - float val = _plugin->get_parameter (_list->parameter()); + double val = _plugin->get_parameter (_list->parameter()); return val; diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 1d8f3ca18e..2dc19fbf0b 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -3018,7 +3018,7 @@ Route::SoloControllable::SoloControllable (std::string name, Route& r) } void -Route::SoloControllable::set_value (float val) +Route::SoloControllable::set_value (double val) { bool bval = ((val >= 0.5f) ? true: false); # if 0 @@ -3037,7 +3037,7 @@ Route::SoloControllable::set_value (float val) #endif } -float +double Route::SoloControllable::get_value (void) const { if (Config->get_solo_control_is_listen_control()) { @@ -3057,7 +3057,7 @@ Route::MuteControllable::MuteControllable (std::string name, Route& r) } void -Route::MuteControllable::set_value (float val) +Route::MuteControllable::set_value (double val) { bool bval = ((val >= 0.5f) ? true: false); # if 0 @@ -3071,7 +3071,7 @@ Route::MuteControllable::set_value (float val) #endif } -float +double Route::MuteControllable::get_value (void) const { return route.muted() ? 1.0f : 0.0f; diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 145251a021..0e1248db49 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -129,17 +129,17 @@ Track::RecEnableControllable::RecEnableControllable (Track& s) } void -Track::RecEnableControllable::set_value (float val) +Track::RecEnableControllable::set_value (double val) { - bool bval = ((val >= 0.5f) ? true: false); + bool bval = ((val >= 0.5) ? true: false); track.set_record_enabled (bval, this); } -float +double Track::RecEnableControllable::get_value (void) const { - if (track.record_enabled()) { return 1.0f; } - return 0.0f; + if (track.record_enabled()) { return 1.0; } + return 0.0; } bool diff --git a/libs/evoral/evoral/Control.hpp b/libs/evoral/evoral/Control.hpp index 210ee7c322..bcb9acb78a 100644 --- a/libs/evoral/evoral/Control.hpp +++ b/libs/evoral/evoral/Control.hpp @@ -37,8 +37,8 @@ public: Control(const Parameter& parameter, boost::shared_ptr); virtual ~Control() {} - virtual void set_float(float val, bool to_list=false, FrameTime frame=0); - virtual float get_float(bool from_list=false, FrameTime frame=0) const; + virtual void set_double(double val, bool to_list=false, double frame=0); + virtual double get_double(bool from_list=false, double frame=0) const; /** Get the latest user-set value @@ -47,10 +47,11 @@ public: * Automation write/touch works by periodically sampling this value * and adding it to the ControlList. */ - float user_float() const { return _user_value; } + double user_double() const { return _user_value; } void set_list(boost::shared_ptr); + boost::shared_ptr list() { return _list; } boost::shared_ptr list() const { return _list; } @@ -62,7 +63,7 @@ public: protected: Parameter _parameter; boost::shared_ptr _list; - float _user_value; + double _user_value; PBD::ScopedConnection _list_marked_dirty_connection; private: diff --git a/libs/evoral/evoral/ControlSet.hpp b/libs/evoral/evoral/ControlSet.hpp index 95de58dead..090499e838 100644 --- a/libs/evoral/evoral/ControlSet.hpp +++ b/libs/evoral/evoral/ControlSet.hpp @@ -58,7 +58,7 @@ public: virtual void add_control(boost::shared_ptr); - bool find_next_event(FrameTime start, FrameTime end, ControlEvent& ev) const; + bool find_next_event(double start, double end, ControlEvent& ev) const; virtual bool controls_empty() const { return _controls.size() == 0; } virtual void clear_controls(); diff --git a/libs/evoral/evoral/Parameter.hpp b/libs/evoral/evoral/Parameter.hpp index 35fae2dee2..95ee5daa8e 100644 --- a/libs/evoral/evoral/Parameter.hpp +++ b/libs/evoral/evoral/Parameter.hpp @@ -61,33 +61,7 @@ public: /** Strict weak ordering * See: http://www.sgi.com/tech/stl/StrictWeakOrdering.html - * Sort Parameters first according to type then to id and lastly to channel. - * - * Proof: - *
    - *
  1. Irreflexivity: f(x, x) is false because of the irreflexivity of \c < in each branch.
  2. - *
  3. Antisymmetry: given x != y, f(x, y) implies !f(y, x) because of the same - * property of \c < in each branch and the symmetry of operator==.
  4. - *
  5. Transitivity: let f(x, y) and f(y, z) => f(x, z) be true. - * We prove by contradiction, assuming the contrary: - * f(x, y) and f(x, z) hold => !f(x, z) - * - * That implies one of the following: - *
      - *
    1. x == z which contradicts the assumption f(x, y) and f(y, x) - * because of antisymmetry. - *
    2. - *
    3. f(z, x) is true. That would imply that one of the ivars (we call it i) - * of x is greater than the same ivar in z while all "previous" ivars - * are equal. That would imply that also in y all those "previous" - * ivars are equal and because if x.i > z.i it is impossible - * that there is an y that satisfies x.i < y.i < z.i at the same - * time which contradicts the assumption. - *
    4. - * Therefore f(x, z) is true (transitivity) - *
    - *
  6. - *
+ * Sort Parameters first according to type then to channel and lastly to ID. */ inline bool operator<(const Parameter& other) const { if (_type < other._type) { diff --git a/libs/evoral/evoral/types.hpp b/libs/evoral/evoral/types.hpp index 4df560465f..fe5217da5a 100644 --- a/libs/evoral/evoral/types.hpp +++ b/libs/evoral/evoral/types.hpp @@ -34,9 +34,6 @@ namespace Evoral { typedef int32_t event_id_t; -/** Frame count (i.e. length of time in audio frames) */ -typedef uint32_t FrameTime; - /** Musical time: beats relative to some defined origin */ typedef double MusicalTime; const MusicalTime MaxMusicalTime = DBL_MAX; @@ -53,9 +50,9 @@ typedef uint32_t EventType; /** Type to describe the movement of a time range */ template struct RangeMove { - RangeMove (T f, FrameTime l, T t) : from (f), length (l), to (t) {} + RangeMove (T f, double l, T t) : from (f), length (l), to (t) {} T from; ///< start of the range - FrameTime length; ///< length of the range + double length; ///< length of the range T to; ///< new start of the range }; diff --git a/libs/evoral/src/Control.cpp b/libs/evoral/src/Control.cpp index 985c7b1352..e83343b714 100644 --- a/libs/evoral/src/Control.cpp +++ b/libs/evoral/src/Control.cpp @@ -34,8 +34,8 @@ Control::Control(const Parameter& parameter, boost::shared_ptr list /** Get the currently effective value (ie the one that corresponds to current output) */ -float -Control::get_float(bool from_list, FrameTime frame) const +double +Control::get_double (bool from_list, double frame) const { if (from_list) { return _list->eval(frame); @@ -46,12 +46,12 @@ Control::get_float(bool from_list, FrameTime frame) const void -Control::set_float(float value, bool to_list, FrameTime frame) +Control::set_double (double value, bool to_list, double frame) { _user_value = value; if (to_list) { - _list->add(frame, value); + _list->add (frame, value); } } diff --git a/libs/evoral/src/ControlSet.cpp b/libs/evoral/src/ControlSet.cpp index 6142f08870..c042b21ec2 100644 --- a/libs/evoral/src/ControlSet.cpp +++ b/libs/evoral/src/ControlSet.cpp @@ -82,11 +82,11 @@ ControlSet::control (const Parameter& parameter, bool create_if_missing) } bool -ControlSet::find_next_event (FrameTime now, FrameTime end, ControlEvent& next_event) const +ControlSet::find_next_event (double now, double end, ControlEvent& next_event) const { Controls::const_iterator li; - next_event.when = std::numeric_limits::max(); + next_event.when = std::numeric_limits::max(); for (li = _controls.begin(); li != _controls.end(); ++li) { ControlList::const_iterator i; @@ -107,7 +107,7 @@ ControlSet::find_next_event (FrameTime now, FrameTime end, ControlEvent& next_ev } } - return next_event.when != std::numeric_limits::max(); + return next_event.when != std::numeric_limits::max(); } void diff --git a/libs/evoral/src/Sequence.cpp b/libs/evoral/src/Sequence.cpp index cf0ea1ae38..81f72dd7ff 100644 --- a/libs/evoral/src/Sequence.cpp +++ b/libs/evoral/src/Sequence.cpp @@ -693,7 +693,6 @@ Sequence