X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fardour%2Fmidi_track.h;h=0df9f538f3011df594819a63cdf3c5f1cc919db5;hb=58dbe9ed13cede08f9e11f428fa6c188325db009;hp=85941cd0efc08606fa1406bd52c9070fa4307683;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index 85941cd0ef..0df9f538f3 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -1,6 +1,6 @@ /* Copyright (C) 2006 Paul Davis - Written by Dave Robillard + Author: David Robillard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,36 +31,40 @@ class Session; class MidiDiskstream; class MidiPlaylist; class RouteGroup; +class SMFSource; class MidiTrack : public Track { public: MidiTrack (Session&, string name, Route::Flag f = Route::Flag (0), TrackMode m = Normal); - MidiTrack (Session&, const XMLNode&); ~MidiTrack (); - int roll (nframes_t nframes, sframes_t start_frame, sframes_t end_frame, - int declick, bool can_record, bool rec_monitors_input); + int init (); - void handle_transport_stopped (bool abort, bool did_locate, bool flush_processors); + int roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler); - boost::shared_ptr midi_diskstream() const; + void realtime_handle_transport_stopped (); + void realtime_locate (); - int use_diskstream (string name); - int use_diskstream (const PBD::ID& id); + void use_new_diskstream (); + void set_diskstream (boost::shared_ptr); + void set_record_enabled (bool yn, void *src); - void set_latency_delay (nframes_t); + DataType data_type () const { + return DataType::MIDI; + } - int export_stuff (BufferSet& bufs, nframes_t nframes, sframes_t end_frame); + int export_stuff (BufferSet& bufs, framecnt_t nframes, framepos_t end_frame); - void freeze (InterThreadInfo&); + void freeze_me (InterThreadInfo&); void unfreeze (); boost::shared_ptr bounce (InterThreadInfo&); - boost::shared_ptr bounce_range ( - nframes_t start, nframes_t end, InterThreadInfo&, bool enable_processing); + boost::shared_ptr bounce_range ( + framepos_t start, framepos_t end, InterThreadInfo&, bool enable_processing + ); - int set_state(const XMLNode& node); + int set_state (const XMLNode&, int version); void midi_panic(void); bool write_immediate_event(size_t size, const uint8_t* buf); @@ -68,12 +72,12 @@ public: /** A control that will send "immediate" events to a MIDI track when twiddled */ struct MidiControl : public AutomationControl { MidiControl(MidiTrack* route, const Evoral::Parameter& param, - boost::shared_ptr al = boost::shared_ptr()) + boost::shared_ptr al = boost::shared_ptr()) : AutomationControl (route->session(), param, al) , _route (route) {} - void set_value (float val); + void set_value (double val); MidiTrack* _route; }; @@ -83,41 +87,62 @@ public: bool step_editing() const { return _step_editing; } void set_step_editing (bool yn); - MidiRingBuffer& step_edit_ring_buffer() { return _step_edit_ring_buffer; } + MidiRingBuffer& step_edit_ring_buffer() { return _step_edit_ring_buffer; } - uint8_t default_channel() const { return _default_channel; } - void set_default_channel (uint8_t chn); + PBD::Signal1 StepEditStatusChange; bool midi_thru() const { return _midi_thru; } void set_midi_thru (bool yn); + boost::shared_ptr write_source (uint32_t n = 0); + void set_channel_mode (ChannelMode, uint16_t); + ChannelMode get_channel_mode (); + uint16_t get_channel_mask (); + boost::shared_ptr midi_playlist (); + + bool bounceable () const { + return false; + } + + PBD::Signal1 > DataRecorded; + boost::shared_ptr get_gui_feed_buffer () const; + + void set_input_active (bool); + bool input_active () const; + PBD::Signal0 InputActiveChanged; + protected: XMLNode& state (bool full); - int _set_state (const XMLNode&, bool call_base); + bool should_monitor () const; + bool send_silence () const; -private: - void write_out_of_band_data ( - BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes); + private: + + virtual boost::shared_ptr diskstream_factory (XMLNode const &); + + boost::shared_ptr midi_diskstream () const; + + void write_out_of_band_data (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, framecnt_t nframes); - int set_diskstream (boost::shared_ptr ds); - void use_new_diskstream (); void set_state_part_two (); void set_state_part_three (); - MidiStateTracker _midi_state_tracker; - - MidiRingBuffer _immediate_events; - MidiRingBuffer _step_edit_ring_buffer; + MidiRingBuffer _immediate_events; + MidiRingBuffer _step_edit_ring_buffer; NoteMode _note_mode; bool _step_editing; - uint8_t _default_channel; bool _midi_thru; + bool _input_active; + + int no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, bool state_changing); + void push_midi_input_to_step_edit_ringbuffer (framecnt_t nframes); + void diskstream_data_recorded (boost::weak_ptr); + PBD::ScopedConnection _diskstream_data_recorded_connection; - int no_roll (nframes_t nframes, sframes_t start_frame, sframes_t end_frame, - bool state_changing, bool can_record, bool rec_monitors_input); - void push_midi_input_to_step_edit_ringbuffer (nframes_t nframes); + void track_input_active (IOChange, void*); + void map_input_active (bool); }; } /* namespace ARDOUR*/