From b0e91bfa0899435c7b798ebd35363147eb1b2823 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 3 Jun 2007 20:06:01 +0000 Subject: Fix MIDI region loading. Add model loading and destroying to SMFSource. Load and display MIDI region data on session load. git-svn-id: svn://localhost/ardour2/trunk@1947 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/midi_model.h | 5 +++++ libs/ardour/ardour/midi_playlist.h | 2 -- libs/ardour/ardour/midi_region.h | 7 ++++--- libs/ardour/ardour/midi_source.h | 3 +++ libs/ardour/ardour/midi_track.h | 3 ++- libs/ardour/ardour/smf_source.h | 3 +++ 6 files changed, 17 insertions(+), 6 deletions(-) (limited to 'libs/ardour/ardour') diff --git a/libs/ardour/ardour/midi_model.h b/libs/ardour/ardour/midi_model.h index 5d343d7fa9..509504a472 100644 --- a/libs/ardour/ardour/midi_model.h +++ b/libs/ardour/ardour/midi_model.h @@ -35,9 +35,14 @@ public: MidiModel(size_t size=0); ~MidiModel(); + void clear() { _events.clear(); } + /** Resizes vector if necessary (NOT realtime safe) */ void append(const MidiBuffer& data); + /** Resizes vector if necessary (NOT realtime safe) */ + void append(const MidiEvent& ev); + inline const MidiEvent& event_at(unsigned i) const { return _events[i]; } inline size_t n_events() const { return _events.size(); } diff --git a/libs/ardour/ardour/midi_playlist.h b/libs/ardour/ardour/midi_playlist.h index 44f04b781b..3162debbd5 100644 --- a/libs/ardour/ardour/midi_playlist.h +++ b/libs/ardour/ardour/midi_playlist.h @@ -57,7 +57,6 @@ public: protected: /* playlist "callbacks" */ - void flush_notifications (); void finalize_split_region (boost::shared_ptr original, boost::shared_ptr left, boost::shared_ptr right); @@ -66,7 +65,6 @@ protected: void remove_dependents (boost::shared_ptr region); private: - XMLNode& state (bool full_state); void dump () const; bool region_changed (Change, boost::shared_ptr); diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h index 2b783a92a8..83487e456a 100644 --- a/libs/ardour/ardour/midi_region.h +++ b/libs/ardour/ardour/midi_region.h @@ -78,9 +78,6 @@ class MidiRegion : public Region MidiRegion (boost::shared_ptr, const XMLNode&); MidiRegion (SourceList &, const XMLNode&); - private: - friend class Playlist; - private: nframes_t _read_at (const SourceList&, MidiRingBuffer& dst, nframes_t position, @@ -89,6 +86,10 @@ class MidiRegion : public Region void recompute_at_start (); void recompute_at_end (); + + protected: + + int set_live_state (const XMLNode&, Change&, bool send); }; } /* namespace ARDOUR */ diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h index 40ef87f8c9..fd5aa15376 100644 --- a/libs/ardour/ardour/midi_source.h +++ b/libs/ardour/ardour/midi_source.h @@ -69,6 +69,9 @@ class MidiSource : public Source XMLNode& get_state (); int set_state (const XMLNode&); + virtual void load_model(bool lock=true) = 0; + virtual void destroy_model() = 0; + MidiModel& model() { return _model; } protected: diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index 0dad40a973..c88878c167 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -75,10 +75,11 @@ public: protected: XMLNode& state (bool full); + + int _set_state (const XMLNode&, bool call_base); private: int set_diskstream (boost::shared_ptr ds); - void set_state_part_two (); void set_state_part_three (); }; diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h index 6ab81a2ac3..ed1a0edb76 100644 --- a/libs/ardour/ardour/smf_source.h +++ b/libs/ardour/ardour/smf_source.h @@ -87,6 +87,9 @@ class SMFSource : public MidiSource { int set_state (const XMLNode&); void seek_to(nframes_t time); + + void load_model(bool lock=true); + void destroy_model(); private: -- cgit v1.2.3