#include "libardour-config.h"
+#include <exception>
#include <list>
#include <map>
#include <set>
extern void setup_enum_writer ();
+class LIBARDOUR_API SessionException: public std::exception {
+public:
+ explicit SessionException(const std::string msg) : _message(msg) {}
+ virtual ~SessionException() throw() {}
+
+ virtual const char* what() const throw() { return _message.c_str(); }
+
+private:
+ std::string _message;
+};
+
class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionList, public SessionEventManager
{
public:
bool reconnection_in_progress() const { return _reconnecting_routes_in_progress; }
bool deletion_in_progress() const { return _state_of_the_state & Deletion; }
bool routes_deletion_in_progress() const { return _route_deletion_in_progress; }
+ bool peaks_cleanup_in_progres() const { return _state_of_the_state & PeakCleanup; }
PBD::Signal0<void> DirtyChanged;
std::string plugins_dir () const; ///< Plugin state
std::string externals_dir () const; ///< Links to external files
- std::string peak_path (std::string) const;
+ std::string construct_peak_filepath (const std::string& audio_path, const bool in_session = false, const bool old_peak_name = false) const;
- std::string peak_path_from_audio_path (std::string) const;
bool audio_source_name_is_unique (const std::string& name);
std::string format_audio_source_name (const std::string& legalized_base, uint32_t nchan, uint32_t chan, bool destructive, bool take_required, uint32_t cnt, bool related_exists);
std::string new_audio_source_path_for_embedded (const std::string& existing_path);
/* Timecode status signals */
PBD::Signal1<void, bool> MTCSyncStateChanged;
-
+ PBD::Signal1<void, bool> LTCSyncStateChanged;
+
/* Record status signals */
PBD::Signal0<void> RecordStateChanged; /* signals changes in recording state (i.e. are we recording) */
*
* Argument is the snapshot name to use when saving.
*/
- PBD::Signal1<void,std::string> SaveSessionRequested;
+ PBD::Signal1<void,std::string> SaveSessionRequested;
/* emitted during a session save to allow other entities to add state, via
- * extra XML, to the session state
+ * extra XML, to the session state
*/
PBD::Signal0<void> SessionSaveUnderway;
Deletion = 0x4,
InitialConnecting = 0x8,
Loading = 0x10,
- InCleanup = 0x20
+ InCleanup = 0x20,
+ PeakCleanup = 0x40
};
StateOfTheState state_of_the_state() const { return _state_of_the_state; }
std::list<boost::shared_ptr<MidiTrack> > new_midi_track (
const ChanCount& input, const ChanCount& output,
boost::shared_ptr<PluginInfo> instrument = boost::shared_ptr<PluginInfo>(),
- TrackMode mode = Normal,
+ TrackMode mode = Normal,
RouteGroup* route_group = 0, uint32_t how_many = 1, std::string name_template = ""
);
AudioEngine & engine() { return _engine; }
AudioEngine const & engine () const { return _engine; }
+ static std::string default_track_name_pattern (DataType);
+
/* Time */
framepos_t transport_frame () const {return _transport_frame; }
void request_sync_source (Slave*);
bool synced_to_engine() const { return _slave && config.get_external_sync() && Config->get_sync_source() == Engine; }
bool synced_to_mtc () const { return config.get_external_sync() && Config->get_sync_source() == MTC && g_atomic_int_get (const_cast<gint*>(&_mtc_active)); }
+ bool synced_to_ltc () const { return config.get_external_sync() && Config->get_sync_source() == LTC && g_atomic_int_get (const_cast<gint*>(&_ltc_active)); }
double transport_speed() const { return _transport_speed; }
bool transport_stopped() const { return _transport_speed == 0.0f; }
void add_source (boost::shared_ptr<Source>);
void remove_source (boost::weak_ptr<Source>);
- void cleanup_regions();
+ void cleanup_regions();
+ bool can_cleanup_peakfiles () const;
+ int cleanup_peakfiles ();
int cleanup_sources (CleanupReport&);
int cleanup_trash_sources (CleanupReport&);
static bool get_disable_all_loaded_plugins() {
return _disable_all_loaded_plugins;
}
+ static void set_bypass_all_loaded_plugins (bool yn) {
+ _bypass_all_loaded_plugins = yn;
+ }
+ static bool get_bypass_all_loaded_plugins() {
+ return _bypass_all_loaded_plugins;
+ }
uint32_t next_send_id();
uint32_t next_aux_send_id();
void abort_reversible_command ();
void commit_reversible_command (Command* cmd = 0);
- void add_command (Command *const cmd) {
- assert (_current_trans);
- _current_trans->add_command (cmd);
- }
+ void add_command (Command *const cmd);
/** @return The list of operations that are currently in progress */
std::list<GQuark> const & current_operations () {
boost::shared_ptr<MidiPort> midi_clock_input_port () const;
boost::shared_ptr<MidiPort> mtc_output_port () const;
boost::shared_ptr<MidiPort> mtc_input_port () const;
-
+
MIDI::MachineControl& mmc() { return *_mmc; }
void reconnect_midi_scene_ports (bool);
void reconnect_mtc_ports ();
void reconnect_mmc_ports (bool);
+ void reconnect_ltc_input ();
+ void reconnect_ltc_output ();
+
protected:
friend class AudioEngine;
void set_block_size (pframes_t nframes);
void mtc_status_changed (bool);
PBD::ScopedConnection mtc_status_connection;
+ void ltc_status_changed (bool);
+ PBD::ScopedConnection ltc_status_connection;
void initialize_latencies ();
void set_worst_io_latencies ();
SlaveState _slave_state;
gint _mtc_active;
+ gint _ltc_active;
framepos_t slave_wait_end;
void reset_slave_state ();
gint _suspend_save; /* atomic */
volatile bool _save_queued;
Glib::Threads::Mutex save_state_lock;
+ Glib::Threads::Mutex peak_cleanup_lock;
int load_options (const XMLNode&);
int load_state (std::string snapshot_name);
void consolidate_skips (Location*);
void sync_locations_to_skips ();
void _sync_locations_to_skips ();
-
+
PBD::ScopedConnectionList skip_update_connections;
bool _ignore_skips_updates;
void flush_all_inserts ();
int micro_locate (framecnt_t distance);
void locate (framepos_t, bool with_roll, bool with_flush, bool with_loop=false, bool force=false, bool with_mmc=true);
- void start_locate (framepos_t, bool with_roll, bool with_flush, bool with_loop=false, bool force=false);
+ void start_locate (framepos_t, bool with_roll, bool with_flush, bool for_loop_enabled=false, bool force=false);
void force_locate (framepos_t frame, bool with_roll = false);
void set_track_speed (Track *, double speed);
void set_transport_speed (double speed, framepos_t destination_frame, bool abort = false, bool clear_state = false, bool as_default = false);
void route_listen_changed (void *src, boost::weak_ptr<Route>);
void route_mute_changed (void *src);
void route_solo_changed (bool self_solo_change, void *src, boost::weak_ptr<Route>);
+ void routes_solo_changed (boost::shared_ptr<RouteList> solo_change_routes);
void route_solo_isolated_changed (void *src, boost::weak_ptr<Route>);
void update_route_solo_state (boost::shared_ptr<RouteList> r = boost::shared_ptr<RouteList>());
void set_history_depth (uint32_t depth);
static bool _disable_all_loaded_plugins;
+ static bool _bypass_all_loaded_plugins;
mutable bool have_looped; ///< Used in ::audible_frame(*)
boost::shared_ptr<IO> _ltc_input;
boost::shared_ptr<IO> _ltc_output;
- void reconnect_ltc_input ();
- void reconnect_ltc_output ();
-
/* Scene Changing */
SceneChanger* _scene_changer;