diff options
author | David Robillard <d@drobilla.net> | 2009-02-15 01:24:26 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-02-15 01:24:26 +0000 |
commit | 5a48f99f72c2e2f3ed313e00446dfdaa05dc5d56 (patch) | |
tree | c67b0c1a4da8dde5146e21b6699d15f389041e68 /libs/ardour/ardour | |
parent | aefa9f0938d287c497878a6e29ce2f9e0bade7c5 (diff) |
Use nframes_t for timestamps of real (jack) time MIDI events (i.e. in MidiBuffer and MidiRingBuffer).
Use iterator interface of Sequence to read events in a MIDISource rather than Sequence::read, avoiding timestamp confusion.
Disable no longer useful Sequence::read.
git-svn-id: svn://localhost/ardour2/branches/3.0@4570 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/midi_buffer.h | 4 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_diskstream.h | 22 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_playlist.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_region.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_source.h | 13 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_track.h | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/smf_source.h | 4 |
7 files changed, 27 insertions, 31 deletions
diff --git a/libs/ardour/ardour/midi_buffer.h b/libs/ardour/ardour/midi_buffer.h index f90cbfd8e3..8ea5e32e81 100644 --- a/libs/ardour/ardour/midi_buffer.h +++ b/libs/ardour/ardour/midi_buffer.h @@ -32,7 +32,7 @@ namespace ARDOUR { class MidiBuffer : public Buffer { public: - typedef double TimeType; + typedef nframes_t TimeType; MidiBuffer(size_t capacity); ~MidiBuffer(); @@ -45,7 +45,7 @@ public: bool push_back(const Evoral::MIDIEvent<TimeType>& event); bool push_back(const jack_midi_event_t& event); - uint8_t* reserve(double time, size_t size); + uint8_t* reserve(TimeType time, size_t size); void resize(size_t); diff --git a/libs/ardour/ardour/midi_diskstream.h b/libs/ardour/ardour/midi_diskstream.h index 7a0daf37e8..eddeaa451a 100644 --- a/libs/ardour/ardour/midi_diskstream.h +++ b/libs/ardour/ardour/midi_diskstream.h @@ -170,18 +170,16 @@ class MidiDiskstream : public Diskstream void engage_record_enable (); void disengage_record_enable (); - void check_note_onoffs(Evoral::MIDIEvent<MidiBuffer::TimeType> &event); - void emit_pending_note_offs(MidiBuffer &dst, nframes_t time); - - MidiRingBuffer<MidiBuffer::TimeType>* _playback_buf; - MidiRingBuffer<MidiBuffer::TimeType>* _capture_buf; - MidiPort* _source_port; - boost::shared_ptr<SMFSource> _write_source; - nframes_t _last_flush_frame; - NoteMode _note_mode; - MidiStateTracker _midi_state_tracker; - volatile gint _frames_written_to_ringbuffer; - volatile gint _frames_read_from_ringbuffer; + + MidiRingBuffer<nframes_t>* _playback_buf; + MidiRingBuffer<nframes_t>* _capture_buf; + MidiPort* _source_port; + boost::shared_ptr<SMFSource> _write_source; + nframes_t _last_flush_frame; + NoteMode _note_mode; + MidiStateTracker _midi_state_tracker; + volatile gint _frames_written_to_ringbuffer; + volatile gint _frames_read_from_ringbuffer; }; }; /* namespace ARDOUR */ diff --git a/libs/ardour/ardour/midi_playlist.h b/libs/ardour/ardour/midi_playlist.h index d7fdadb2f5..a956878348 100644 --- a/libs/ardour/ardour/midi_playlist.h +++ b/libs/ardour/ardour/midi_playlist.h @@ -47,7 +47,7 @@ public: ~MidiPlaylist (); - nframes_t read (MidiRingBuffer<double>& buf, + nframes_t read (MidiRingBuffer<nframes_t>& buf, nframes_t start, nframes_t cnt, uint32_t chan_n=0); int set_state (const XMLNode&); diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h index 781f815ec5..356e418fc1 100644 --- a/libs/ardour/ardour/midi_region.h +++ b/libs/ardour/ardour/midi_region.h @@ -48,8 +48,6 @@ template<typename T> class MidiRingBuffer; class MidiRegion : public Region { public: - typedef double TimeType; - ~MidiRegion(); boost::shared_ptr<MidiSource> midi_source (uint32_t n=0) const; @@ -58,13 +56,13 @@ class MidiRegion : public Region virtual nframes64_t read (Sample*, nframes64_t pos, nframes64_t cnt, int channel) const { return 0; } virtual nframes64_t readable_length() const { return length(); } - nframes_t read_at (MidiRingBuffer<TimeType>& dst, + nframes_t read_at (MidiRingBuffer<nframes_t>& dst, nframes_t position, nframes_t dur, uint32_t chan_n = 0, NoteMode mode = Sustained) const; - nframes_t master_read_at (MidiRingBuffer<TimeType>& dst, + nframes_t master_read_at (MidiRingBuffer<nframes_t>& dst, nframes_t position, nframes_t dur, uint32_t chan_n = 0, @@ -108,7 +106,7 @@ class MidiRegion : public Region MidiRegion (const SourceList &, const XMLNode&); private: - nframes_t _read_at (const SourceList&, MidiRingBuffer<TimeType>& dst, + nframes_t _read_at (const SourceList&, MidiRingBuffer<nframes_t>& dst, nframes_t position, nframes_t dur, uint32_t chan_n = 0, diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h index c0b105decd..2126b4b162 100644 --- a/libs/ardour/ardour/midi_source.h +++ b/libs/ardour/ardour/midi_source.h @@ -57,8 +57,8 @@ class MidiSource : public Source virtual uint32_t n_channels () const { return 1; } // FIXME: integrate this with the Readable::read interface somehow - virtual nframes_t midi_read (MidiRingBuffer<TimeType>& dst, nframes_t start, nframes_t cnt, nframes_t stamp_offset, nframes_t negative_stamp_offset) const; - virtual nframes_t midi_write (MidiRingBuffer<TimeType>& src, nframes_t cnt); + virtual nframes_t midi_read (MidiRingBuffer<nframes_t>& dst, nframes_t start, nframes_t cnt, nframes_t stamp_offset, nframes_t negative_stamp_offset) const; + virtual nframes_t midi_write (MidiRingBuffer<nframes_t>& src, nframes_t cnt); virtual void append_event_unlocked(EventTimeUnit unit, const Evoral::Event<TimeType>& ev) = 0; @@ -98,11 +98,9 @@ class MidiSource : public Source protected: virtual void flush_midi() = 0; - //virtual int flush_header() = 0; - //virtual int flush_footer() = 0; - virtual nframes_t read_unlocked (MidiRingBuffer<TimeType>& dst, nframes_t start, nframes_t cnt, nframes_t stamp_offset, nframes_t negative_stamp_offset) const = 0; - virtual nframes_t write_unlocked (MidiRingBuffer<TimeType>& dst, nframes_t cnt) = 0; + virtual nframes_t read_unlocked (MidiRingBuffer<nframes_t>& dst, nframes_t start, nframes_t cnt, nframes_t stamp_offset, nframes_t negative_stamp_offset) const = 0; + virtual nframes_t write_unlocked (MidiRingBuffer<nframes_t>& dst, nframes_t cnt) = 0; mutable Glib::Mutex _lock; string _captured_for; @@ -112,6 +110,9 @@ class MidiSource : public Source boost::shared_ptr<MidiModel> _model; bool _writing; + + mutable Evoral::Sequence<double>::const_iterator _model_iter; + mutable nframes_t _last_read_end; private: bool file_changed (string path); diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index 09c64c2978..d4054066f1 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -90,7 +90,6 @@ public: void set_note_mode (NoteMode m); protected: - XMLNode& state (bool full); int _set_state (const XMLNode&, bool call_base); @@ -104,8 +103,8 @@ private: void set_state_part_two (); void set_state_part_three (); - MidiRingBuffer<double> _immediate_events; - NoteMode _note_mode; + MidiRingBuffer<nframes_t> _immediate_events; + NoteMode _note_mode; }; } /* namespace ARDOUR*/ diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h index 9981408abc..ccc03acd66 100644 --- a/libs/ardour/ardour/smf_source.h +++ b/libs/ardour/ardour/smf_source.h @@ -102,14 +102,14 @@ class SMFSource : public MidiSource, public Evoral::SMF<double> { int init (string idstr, bool must_exist); nframes_t read_unlocked ( - MidiRingBuffer<double>& dst, + MidiRingBuffer<nframes_t>& dst, nframes_t start, nframes_t cn, nframes_t stamp_offset, nframes_t negative_stamp_offset) const; nframes_t write_unlocked ( - MidiRingBuffer<double>& src, + MidiRingBuffer<nframes_t>& src, nframes_t cnt); bool find (std::string path, bool must_exist, bool& is_new); |