float playback_buffer_load() const;
float capture_buffer_load() const;
- void get_playback(MidiBuffer& dst, nframes_t start, nframes_t end);
+ void get_playback (MidiBuffer& dst, framecnt_t);
void set_record_enabled (bool yn);
+
+ void reset_tracker ();
boost::shared_ptr<MidiPlaylist> midi_playlist () { return boost::dynamic_pointer_cast<MidiPlaylist>(_playlist); }
int use_new_playlist ();
int use_copy_playlist ();
+ bool set_name (std::string const &);
+
/* stateful */
XMLNode& get_state(void);
int set_state(const XMLNode&, int version);
- void monitor_input (bool);
+ void ensure_jack_monitors_input (bool);
boost::shared_ptr<SMFSource> write_source () { return _write_source; }
return playback_mode;
}
+ /** Emitted when some MIDI data has been received for recording.
+ * Parameter is the source that it is destined for.
+ * A caller can get a copy of the data with get_gui_feed_buffer ()
+ */
+ PBD::Signal1<void, boost::weak_ptr<MidiSource> > DataRecorded;
+
+ boost::shared_ptr<MidiBuffer> get_gui_feed_buffer () const;
+
protected:
friend class Session;
friend class Butler;
void set_pending_overwrite(bool);
int overwrite_existing_buffers ();
- void set_block_size (nframes_t);
- int internal_playback_seek (nframes_t distance);
- int can_internal_playback_seek (nframes_t distance);
- int rename_write_sources ();
- std::list<boost::shared_ptr<Source> > steal_write_sources();
+ void set_block_size (pframes_t);
+ int internal_playback_seek (framecnt_t distance);
+ int can_internal_playback_seek (framecnt_t distance);
+ std::list<boost::shared_ptr<Source> > steal_write_sources();
void reset_write_sources (bool, bool force = false);
void non_realtime_input_change ();
- void non_realtime_locate (nframes_t location);
+ void non_realtime_locate (framepos_t location);
- static void set_readahead_frames(nframes_t frames_ahead) { midi_readahead = frames_ahead; }
+ static void set_readahead_frames (framecnt_t frames_ahead) { midi_readahead = frames_ahead; }
protected:
- int seek (nframes_t which_sample, bool complete_refill = false);
+ int seek (framepos_t which_sample, bool complete_refill = false);
protected:
friend class MidiTrack;
- int process (nframes_t transport_frame, nframes_t nframes, bool can_record, bool rec_monitors_input, bool& need_butler);
- bool commit (nframes_t nframes);
- static nframes_t midi_readahead;
+ int process (framepos_t transport_frame, pframes_t nframes, framecnt_t &);
+ bool commit (framecnt_t nframes);
+ static framecnt_t midi_readahead;
private:
int do_refill_with_alloc();
- int read (nframes_t& start, nframes_t cnt, bool reversed);
+ int read (framepos_t& start, framecnt_t cnt, bool reversed);
- void finish_capture (bool rec_monitors_input);
+ void finish_capture ();
void transport_stopped_wallclock (struct tm&, time_t, bool abort);
- void transport_looped (nframes_t transport_frame);
+ void transport_looped (framepos_t transport_frame);
void init ();
void get_input_sources ();
void set_align_style_from_io();
- /* fixed size buffers per instance of ardour for now (non-dynamic)
- */
+ /* fixed size buffers per instance of ardour for now (non-dynamic)
+ */
- void adjust_playback_buffering () {}
- void adjust_capture_buffering () {}
+ void adjust_playback_buffering () {}
+ void adjust_capture_buffering () {}
void engage_record_enable ();
void disengage_record_enable ();
- MidiRingBuffer<nframes_t>* _playback_buf;
- MidiRingBuffer<nframes_t>* _capture_buf;
- MidiPort* _source_port;
+ MidiRingBuffer<framepos_t>* _playback_buf;
+ MidiRingBuffer<framepos_t>* _capture_buf;
+ boost::weak_ptr<MidiPort> _source_port;
boost::shared_ptr<SMFSource> _write_source;
- nframes_t _last_flush_frame;
NoteMode _note_mode;
volatile gint _frames_written_to_ringbuffer;
volatile gint _frames_read_from_ringbuffer;
+
+ /** A buffer that we use to put newly-arrived MIDI data in for
+ the GUI to read (so that it can update itself).
+ */
+ MidiBuffer _gui_feed_buffer;
+ mutable Glib::Mutex _gui_feed_buffer_mutex;
};
}; /* namespace ARDOUR */