X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fmidi_scene_changer.h;h=cc9553aab8a7e73718b17c911d86f6ee7fdcfc4a;hb=e4d3ebfb666e2c4e9cf134d8f3ed42152da343bf;hp=e2c62a2656edfa8d799d44a2f1a19504a73da5c7;hpb=ad017365f7a73f8ba57f667cc1aa36478b48c50e;p=ardour.git diff --git a/libs/ardour/ardour/midi_scene_changer.h b/libs/ardour/ardour/midi_scene_changer.h index e2c62a2656..cc9553aab8 100644 --- a/libs/ardour/ardour/midi_scene_changer.h +++ b/libs/ardour/ardour/midi_scene_changer.h @@ -27,45 +27,55 @@ namespace ARDOUR { +class MIDISceneChange; + class MIDISceneChanger : public SceneChanger { public: MIDISceneChanger (Session&); ~MIDISceneChanger (); - void run (framepos_t start, framepos_t end); - void set_input_port (MIDI::Port*); + void run (samplepos_t start, samplepos_t end); + void set_input_port (boost::shared_ptr); void set_output_port (boost::shared_ptr); - uint8_t bank_at (framepos_t, uint8_t channel); - uint8_t program_at (framepos_t, uint8_t channel); + uint8_t bank_at (samplepos_t, uint8_t channel); + uint8_t program_at (samplepos_t, uint8_t channel); void set_recording (bool); - void locate (framepos_t); + void locate (samplepos_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; + 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; - framepos_t last_program_message_time; + bool have_seen_bank_changes; + samplepos_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); + void rt_deliver (MidiBuffer&, samplepos_t, boost::shared_ptr); void non_rt_deliver (boost::shared_ptr); 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; };