X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fmidi_scene_changer.h;h=792f4fb74ffbbc5b0e4418cd1d24db187cc2d4ef;hb=a4a87f56e9dc8e2351101439aeea7a87064fa146;hp=e2c62a2656edfa8d799d44a2f1a19504a73da5c7;hpb=8c9749e42faf7808034ed8b7afce4a2fe6dc6f33;p=ardour.git diff --git a/libs/ardour/ardour/midi_scene_changer.h b/libs/ardour/ardour/midi_scene_changer.h index e2c62a2656..792f4fb74f 100644 --- a/libs/ardour/ardour/midi_scene_changer.h +++ b/libs/ardour/ardour/midi_scene_changer.h @@ -27,6 +27,8 @@ namespace ARDOUR { +class MIDISceneChange; + class MIDISceneChanger : public SceneChanger { public: @@ -34,7 +36,7 @@ class MIDISceneChanger : public SceneChanger ~MIDISceneChanger (); void run (framepos_t start, framepos_t end); - void set_input_port (MIDI::Port*); + void set_input_port (boost::shared_ptr); void set_output_port (boost::shared_ptr); uint8_t bank_at (framepos_t, uint8_t channel); @@ -43,21 +45,29 @@ class MIDISceneChanger : public SceneChanger void set_recording (bool); void locate (framepos_t); + /** Signal emitted whenever any relevant MIDI input is detected. + */ + PBD::Signal0 MIDIInputActivity; + + /** Signal emitted whenever any relevant MIDI output is sent. + */ + PBD::Signal0 MIDIOutputActivity; + private: typedef std::multimap > Scenes; - MIDI::Port* input_port; + boost::shared_ptr input_port; boost::shared_ptr output_port; Glib::Threads::RWLock scene_lock; Scenes scenes; bool _recording; - framepos_t last_bank_message_time; + bool have_seen_bank_changes; framepos_t last_program_message_time; unsigned short current_bank; int last_delivered_program; int last_delivered_bank; - void gather (); + void gather (const Locations::LocationList&); bool recording () const; void jump_to (int bank, int program); void rt_deliver (MidiBuffer&, framepos_t, boost::shared_ptr); @@ -65,7 +75,7 @@ class MIDISceneChanger : public SceneChanger void bank_change_input (MIDI::Parser&, unsigned short, int channel); void program_change_input (MIDI::Parser&, MIDI::byte, int channel); - void locations_changed (Locations::Change); + void locations_changed (); PBD::ScopedConnectionList incoming_connections; };