X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Faudio_track.h;h=4ae5b59fc88d5fdf79017ea0e3900a08aba9aa00;hb=452672f78f5f0f9195bfd48398e29b18a8fb1df7;hp=c7af9fc5d81794e0bf6651b9024b4d57677a75b2;hpb=bcf432184d84d53aa12cbdd2aa3176a9019cab80;p=ardour.git diff --git a/libs/ardour/ardour/audio_track.h b/libs/ardour/ardour/audio_track.h index c7af9fc5d8..4ae5b59fc8 100644 --- a/libs/ardour/ardour/audio_track.h +++ b/libs/ardour/ardour/audio_track.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2006 Paul Davis + Copyright (C) 2002-2006 Paul Davis 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 @@ -15,157 +15,67 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_audio_track_h__ #define __ardour_audio_track_h__ -#include +#include "ardour/track.h" namespace ARDOUR { class Session; -class DiskStream; +class AudioDiskstream; class AudioPlaylist; class RouteGroup; +class AudioFileSource; -class AudioTrack : public Route +class AudioTrack : public Track { public: - AudioTrack (Session&, string name, Route::Flag f = Route::Flag (0), TrackMode m = Normal); - AudioTrack (Session&, const XMLNode&); + AudioTrack (Session&, std::string name, Route::Flag f = Route::Flag (0), TrackMode m = Normal); ~AudioTrack (); - - int set_name (string str, void *src); - - int roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, - - jack_nframes_t offset, int declick, bool can_record, bool rec_monitors_input); - int no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, - jack_nframes_t offset, bool state_changing, bool can_record, bool rec_monitors_input); - int silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, - jack_nframes_t offset, bool can_record, bool rec_monitors_input); - - void toggle_monitor_input (); - bool can_record() const { return true; } - void set_record_enable (bool yn, void *src); + int set_mode (TrackMode m); + bool can_use_mode (TrackMode m, bool& bounce_required); - DiskStream& disk_stream() const { return *diskstream; } - int set_diskstream (DiskStream&, void *); - int use_diskstream (string name); - int use_diskstream (id_t id); - - TrackMode mode() const { return _mode; } - void set_mode (TrackMode m); - sigc::signal ModeChanged; - - jack_nframes_t update_total_latency(); - void set_latency_delay (jack_nframes_t); - - int export_stuff (vector& buffers, char * workbuf, uint32_t nbufs, jack_nframes_t nframes, jack_nframes_t end_frame); + int roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, + int declick, bool& need_butler); - sigc::signal diskstream_changed; + boost::shared_ptr create_diskstream (); + void set_diskstream (boost::shared_ptr); - enum FreezeState { - NoFreeze, - Frozen, - UnFrozen - }; + DataType data_type () const { + return DataType::AUDIO; + } - FreezeState freeze_state() const; + int export_stuff (BufferSet& bufs, framepos_t start_frame, framecnt_t nframes, bool enable_processing = true); - sigc::signal FreezeChange; - - void freeze (InterThreadInfo&); + void freeze_me (InterThreadInfo&); void unfreeze (); - void bounce (InterThreadInfo&); - void bounce_range (jack_nframes_t start, jack_nframes_t end, InterThreadInfo&); - - XMLNode& get_state(); - XMLNode& get_template(); - int set_state(const XMLNode& node); + boost::shared_ptr bounce (InterThreadInfo&); + boost::shared_ptr bounce_range (framepos_t start, framepos_t end, InterThreadInfo&, bool enable_processing); - MIDI::Controllable& midi_rec_enable_control() { - return _midi_rec_enable_control; - } + int set_state (const XMLNode&, int version); - void reset_midi_control (MIDI::Port*, bool); - void send_all_midi_feedback (); + boost::shared_ptr write_source (uint32_t n = 0); - bool record_enabled() const; - void set_meter_point (MeterPoint, void* src); + bool bounceable () const; protected: - DiskStream *diskstream; - MeterPoint _saved_meter_point; - TrackMode _mode; - + boost::shared_ptr audio_diskstream () const; XMLNode& state (bool full); - void passthru_silence (jack_nframes_t start_frame, jack_nframes_t end_frame, - jack_nframes_t nframes, jack_nframes_t offset, int declick, - bool meter); - - uint32_t n_process_buffers (); - private: - struct FreezeRecordInsertInfo { - FreezeRecordInsertInfo(XMLNode& st) - : state (st), insert (0) {} - XMLNode state; - Insert* insert; - id_t id; - UndoAction memento; - }; - - struct FreezeRecord { - FreezeRecord() { - playlist = 0; - have_mementos = false; - } - - ~FreezeRecord(); - - AudioPlaylist* playlist; - vector insert_info; - bool have_mementos; - FreezeState state; - }; - - FreezeRecord _freeze_record; - XMLNode* pending_state; - - void diskstream_record_enable_changed (void *src); - void diskstream_input_channel_changed (void *src); - - void input_change_handler (void *src); - - sigc::connection recenable_connection; - sigc::connection ic_connection; - - int deprecated_use_diskstream_connections (); + boost::shared_ptr diskstream_factory (XMLNode const &); + + int deprecated_use_diskstream_connections (); void set_state_part_two (); void set_state_part_three (); - - struct MIDIRecEnableControl : public MIDI::Controllable { - MIDIRecEnableControl (AudioTrack&, MIDI::Port *); - void set_value (float); - void send_feedback (bool); - MIDI::byte* write_feedback (MIDI::byte* buf, int32_t& bufsize, bool val, bool force = false); - AudioTrack& track; - bool setting; - bool last_written; - }; - - MIDIRecEnableControl _midi_rec_enable_control; - - bool _destructive; }; -}; /* namespace ARDOUR*/ +} // namespace ARDOUR #endif /* __ardour_audio_track_h__ */