X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fmidi_playlist.h;h=f784b7317723d89bb9e57f2ee1548b830823278e;hb=e5a181c323243a03338f5a9934a5df254986370d;hp=cb07bc18205d7901a11e686a627cea980dc29861;hpb=546cd974ec2d90f64dcaae6f347e68c6682117b9;p=ardour.git diff --git a/libs/ardour/ardour/midi_playlist.h b/libs/ardour/ardour/midi_playlist.h index cb07bc1820..f784b73177 100644 --- a/libs/ardour/ardour/midi_playlist.h +++ b/libs/ardour/ardour/midi_playlist.h @@ -26,22 +26,23 @@ #include #include "ardour/ardour.h" +#include "ardour/midi_cursor.h" #include "ardour/midi_model.h" #include "ardour/midi_state_tracker.h" #include "ardour/note_fixer.h" #include "ardour/playlist.h" -#include "evoral/Beats.hpp" #include "evoral/Note.hpp" #include "evoral/Parameter.hpp" namespace Evoral { template class EventSink; +class Beats; } namespace ARDOUR { -class BeatsFramesConverter; +class BeatsSamplesConverter; class MidiChannelFilter; class MidiRegion; class Session; @@ -58,8 +59,8 @@ public: /** This constructor does NOT notify others (session) */ MidiPlaylist (boost::shared_ptr other, - framepos_t start, - framecnt_t cnt, + samplepos_t start, + samplecnt_t cnt, std::string name, bool hidden = false); @@ -68,22 +69,25 @@ public: /** Read a range from the playlist into an event sink. * * @param buf Destination for events. - * @param start First frame of read range. - * @param cnt Number of frames in read range. + * @param start First sample of read range. + * @param cnt Number of samples in read range. + * @param loop_range If non-null, all event times will be mapped into this loop range. * @param chan_n Must be 0 (this is the audio-style "channel", where each * channel is backed by a separate region, not MIDI channels, which all * exist in the same region and are not handled here). - * @return The number of frames read (time, not an event count). + * @return The number of samples read (time, not an event count). */ - framecnt_t read (Evoral::EventSink& buf, - framepos_t start, - framecnt_t cnt, + samplecnt_t read (Evoral::EventSink& buf, + samplepos_t start, + samplecnt_t cnt, + Evoral::Range* loop_range, uint32_t chan_n = 0, MidiChannelFilter* filter = NULL); int set_state (const XMLNode&, int version); bool destroy_region (boost::shared_ptr); + void _split_region (boost::shared_ptr, const MusicSample& position); void set_note_mode (NoteMode m) { _note_mode = m; } @@ -106,16 +110,18 @@ public: * @param dst Sink to write note offs to. * @param time Time stamp of all written note offs. */ - void resolve_note_trackers (Evoral::EventSink& dst, framepos_t time); + void resolve_note_trackers (Evoral::EventSink& dst, samplepos_t time); protected: void remove_dependents (boost::shared_ptr region); + void region_going_away (boost::weak_ptr region); private: - typedef Evoral::Note Note; - typedef Evoral::Event Event; + typedef Evoral::Note Note; + typedef Evoral::Event Event; struct RegionTracker : public boost::noncopyable { + MidiCursor cursor; ///< Cursor (iterator and read state) MidiStateTracker tracker; ///< Active note tracker NoteFixer fixer; ///< Edit compensation }; @@ -126,7 +132,7 @@ private: NoteTrackers _note_trackers; NoteMode _note_mode; - framepos_t _read_end; + samplepos_t _read_end; }; } /* namespace ARDOUR */