X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Faudio_track.h;h=4ae5b59fc88d5fdf79017ea0e3900a08aba9aa00;hb=452672f78f5f0f9195bfd48398e29b18a8fb1df7;hp=da12746c857d91d37b5accda8804bc68413ec6fe;hpb=8b46567e0677eb25c965ed46b80da8808fa33b2b;p=ardour.git diff --git a/libs/ardour/ardour/audio_track.h b/libs/ardour/ardour/audio_track.h index da12746c85..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,13 +15,12 @@ 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 { @@ -29,139 +28,54 @@ class Session; 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); - AudioDiskstream& disk_stream() const { return *diskstream; } - int set_diskstream (AudioDiskstream&, void *); - int use_diskstream (string name); - int use_diskstream (const PBD::ID& 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&); + boost::shared_ptr bounce (InterThreadInfo&); + boost::shared_ptr bounce_range (framepos_t start, framepos_t end, InterThreadInfo&, bool enable_processing); - XMLNode& get_state(); - XMLNode& get_template(); - int set_state(const XMLNode& node); + int set_state (const XMLNode&, int version); - PBD::Controllable& rec_enable_control() { - return _rec_enable_control; - } + boost::shared_ptr write_source (uint32_t n = 0); - bool record_enabled() const; - void set_meter_point (MeterPoint, void* src); + bool bounceable () const; protected: - AudioDiskstream *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; - PBD::ID 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 RecEnableControllable : public PBD::Controllable { - RecEnableControllable (AudioTrack&); - - void set_value (float); - float get_value (void) const; - - AudioTrack& track; - }; - - RecEnableControllable _rec_enable_control; - - bool _destructive; }; -}; /* namespace ARDOUR*/ +} // namespace ARDOUR #endif /* __ardour_audio_track_h__ */