Ardour  9.4-10-g43e35d2721
session.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2000-2019 Paul Davis <paul@linuxaudiosystems.com>
3  * Copyright (C) 2005-2009 Taybin Rutkin <taybin@taybin.com>
4  * Copyright (C) 2006-2007 Jesse Chappell <jesse@essej.net>
5  * Copyright (C) 2006-2009 Sampo Savolainen <v2@iki.fi>
6  * Copyright (C) 2006-2015 David Robillard <d@drobilla.net>
7  * Copyright (C) 2007-2012 Carl Hetherington <carl@carlh.net>
8  * Copyright (C) 2007-2015 Tim Mayberry <mojofunk@gmail.com>
9  * Copyright (C) 2008-2009 Hans Baier <hansfbaier@googlemail.com>
10  * Copyright (C) 2008-2009 Sakari Bergen <sakari.bergen@beatwaves.net>
11  * Copyright (C) 2012-2019 Robin Gareus <robin@gareus.org>
12  * Copyright (C) 2013-2017 Nick Mainsbridge <mainsbridge@gmail.com>
13  * Copyright (C) 2013-2018 John Emmas <john@creativepost.co.uk>
14  * Copyright (C) 2014-2018 Ben Loftis <ben@harrisonconsoles.com>
15  * Copyright (C) 2015-2018 Len Ovens <len@ovenwerks.net>
16  *
17  * This program is free software; you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License as published by
19  * the Free Software Foundation; either version 2 of the License, or
20  * (at your option) any later version.
21  *
22  * This program is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25  * GNU General Public License for more details.
26  *
27  * You should have received a copy of the GNU General Public License along
28  * with this program; if not, write to the Free Software Foundation, Inc.,
29  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
30  */
31 
32 #pragma once
33 
34 #ifdef WAF_BUILD
35 #include "libardour-config.h"
36 #endif
37 
38 #include <atomic>
39 #include <exception>
40 #include <list>
41 #include <map>
42 #include <memory>
43 #include <set>
44 #include <string>
45 #include <vector>
46 #include <queue>
47 #include <stdint.h>
48 
49 #include <boost/dynamic_bitset.hpp>
50 
51 #include <ltc.h>
52 
53 #include "pbd/atomic.h"
54 #include "pbd/error.h"
55 #include "pbd/event_loop.h"
56 #include "pbd/file_archive.h"
57 #include "pbd/history_owner.h"
58 #include "pbd/mutex.h"
59 #include "pbd/rcu.h"
60 #include "pbd/rwlock.h"
62 #include "pbd/signals.h"
63 #include "pbd/undo.h"
64 #include "pbd/uuid.h"
65 
66 #ifdef USE_TLSF
67 # include "pbd/tlsf.h"
68 #else
69 # include "pbd/reallocpool.h"
70 #endif
71 #include "lua/luastate.h"
72 
73 #include "temporal/range.h"
75 
76 #include "midi++/types.h"
77 #include "midi++/mmc.h"
78 
79 #include "temporal/time.h"
80 
81 #include "ardour/ardour.h"
82 #include "ardour/chan_count.h"
83 #include "ardour/delivery.h"
85 #include "ardour/luascripting.h"
86 #include "ardour/location.h"
91 #include "ardour/session_event.h"
92 #include "ardour/plugin.h"
94 #include "ardour/route.h"
95 #include "ardour/graph_edges.h"
96 #include "ardour/scale_provider.h"
97 #include "ardour/transport_api.h"
98 #include "ardour/triggerbox.h"
99 
100 class XMLTree;
101 class XMLNode;
102 struct _AEffect;
103 typedef struct _AEffect AEffect;
104 
105 class PTFFormat;
106 
107 namespace MIDI {
108 class Port;
109 class MachineControl;
110 class Parser;
111 }
112 
113 namespace PBD {
114 class Controllable;
115 class Progress;
116 class Command;
117 }
118 
119 namespace luabridge {
120  class LuaRef;
121 }
122 
123 namespace Evoral {
124 class Curve;
125 }
126 
127 namespace Temporal {
128 class TempoMap;
129 }
130 
131 namespace ARDOUR {
132 
133 class Amp;
134 class AsyncMIDIPort;
135 class AudioEngine;
136 class AudioFileSource;
137 class AudioRegion;
138 class AudioSource;
139 class AudioTrack;
140 class Auditioner;
141 class AutomationList;
142 class AuxInput;
143 class BufferSet;
144 class Bundle;
145 class Butler;
146 class Click;
147 class CoreSelection;
148 class ExportHandler;
149 class ExportStatus;
150 class Graph;
151 struct GraphChain;
152 class IO;
153 class IOPlug;
154 class IOProcessor;
155 class IOTaskList;
156 class ImportStatus;
157 class MidiClockTicker;
158 class MidiControlUI;
159 class MidiPortManager;
160 class MidiPort;
161 class MidiRegion;
162 class MidiSource;
163 class MidiTrack;
164 class MixerScene;
165 class Playlist;
166 class PluginInsert;
167 class PluginInfo;
168 class Port;
169 class PortInsert;
170 class PortManager;
171 class ProcessThread;
172 class Processor;
173 class Region;
174 class Return;
175 class Route;
176 class RouteGroup;
177 class RTTaskList;
178 class SMFSource;
179 class Send;
180 class SceneChanger;
181 class SessionDirectory;
182 class SessionMetadata;
183 class SessionPlaylists;
184 class SoloMuteRelease;
185 class Source;
186 class Speakers;
187 class TransportMaster;
188 struct TransportFSM;
189 class Track;
190 class UI_TransportMaster;
191 class VCAManager;
192 class WindowsVSTPlugin;
193 
194 extern void setup_enum_writer ();
195 
196 class LIBARDOUR_API SessionException: public std::exception {
197 public:
198  explicit SessionException(const std::string msg) : _message(msg) {}
199  virtual ~SessionException() throw() {}
200 
201  virtual const char* what() const throw() { return _message.c_str(); }
202 
203 private:
204  std::string _message;
205 };
206 
211  public SessionEventManager,
212  public TransportAPI,
214  public ScaleProvider
215 {
216 public:
217  /* a new session might have non-empty mix_template, an existing session should always have an empty one.
218  the bus profile can be null if no master out bus is required.
219  */
220 
222  const std::string& fullpath,
223  const std::string& snapshot_name,
224  BusProfile const * bus_profile = 0,
225  std::string mix_template = "",
226  bool unnamed = false,
227  samplecnt_t samplerate = 0);
228 
229  virtual ~Session ();
230 
231  static int get_info_from_path (const std::string& xmlpath, float& sample_rate, SampleFormat& data_format, std::string& program_version, XMLNode* engine_hints = 0);
232  static std::string get_snapshot_from_instant (const std::string& session_dir);
233 
238  static unsigned int next_name_id ();
239 
240  std::string uuid() const { return _uuid.to_s(); }
241  std::string path() const { return _path; }
242  std::string name() const { return _name; }
243  std::string snap_name() const { return _current_snapshot_name; }
244  std::string raid_path () const;
245  bool path_is_within_session (const std::string&);
246 
247  bool writable() const { return _writable; }
248  void set_clean (); // == Clean and emit DirtyChanged IFF session was Dirty
249  void set_dirty (); // |= Dirty and emit DirtyChanged (unless already dirty or Loading, Deletion)
250  void unset_dirty (bool emit_dirty_changed = false); // &= ~Dirty
251  void set_deletion_in_progress (); // |= Deletion
252  void clear_deletion_in_progress (); // &= ~Deletion
253 
254  bool reconnection_in_progress () const { return _reconnecting_routes_in_progress; }
255  bool routes_deletion_in_progress () const { return _route_deletion_in_progress; }
256  bool dirty () const { return _state_of_the_state & Dirty; }
257  bool deletion_in_progress () const { return _state_of_the_state & Deletion; }
258  bool peaks_cleanup_in_progres () const { return _state_of_the_state & PeakCleanup; }
259  bool loading () const { return _state_of_the_state & Loading; }
260  bool cannot_save () const { return _state_of_the_state & CannotSave; }
261  bool in_cleanup () const { return _state_of_the_state & InCleanup; }
262  bool inital_connect_or_deletion_in_progress () const { return _state_of_the_state & (InitialConnecting | Deletion); }
263  bool have_external_connections_for_current_backend (bool tracks_only = true) const;
264  bool unnamed() const;
265 
266  void end_unnamed_status () const;
267 
269 
270  const SessionDirectory& session_directory () const { return *(_session_dir.get()); }
271 
272  static PBD::Signal<void(std::string)> Dialog;
273 
276 
278 
279  std::string automation_dir () const;
280  std::string analysis_dir () const;
281  std::string plugins_dir () const;
282  std::string externals_dir () const;
283 
284  std::string construct_peak_filepath (const std::string& audio_path, const bool in_session = false, const bool old_peak_name = false) const;
285 
286  bool audio_source_name_is_unique (const std::string& name);
287  std::string format_audio_source_name (const std::string& legalized_base, uint32_t nchan, uint32_t chan, bool take_required, uint32_t cnt, bool related_exists);
288  std::string new_audio_source_path_for_embedded (const std::string& existing_path);
289  std::string new_audio_source_path (const std::string&, uint32_t nchans, uint32_t chan, bool take_required);
290  std::string new_midi_source_path (const std::string&, bool need_source_lock = true);
291 
300  RouteList new_route_from_template (uint32_t how_many, PresentationInfo::order_t insert_at, const std::string& template_path, const std::string& name, PlaylistDisposition pd = NewPlaylist);
301  RouteList new_route_from_template (uint32_t how_many, PresentationInfo::order_t insert_at, XMLNode&, const std::string& name, PlaylistDisposition pd = NewPlaylist);
302  std::vector<std::string> get_paths_for_new_sources (bool allow_replacing, const std::string& import_file_path,
303  uint32_t channels, std::vector<std::string> const & smf_track_names, bool use_smf_file_names);
304 
305  int bring_all_sources_into_session (std::function<void(uint32_t,uint32_t,std::string)> callback);
306 
307  void process (pframes_t nframes);
308 
311 
314  BufferSet& get_scratch_buffers (ChanCount count = ChanCount::ZERO, bool silence = true);
315  BufferSet& get_route_buffers (ChanCount count = ChanCount::ZERO, bool silence = true);
317 
319 
320  bool have_rec_enabled_track () const;
321  bool have_rec_disabled_track () const;
322 
323  bool have_captured() const { return _have_captured; }
324 
325  samplecnt_t capture_duration () const { return _capture_duration; }
326  unsigned int capture_xruns () const { return _capture_xruns; }
327  unsigned int export_xruns () const { return _export_xruns; }
328 
330  Butler* butler() { return _butler; }
331  void butler_transport_work (bool have_process_lock = false);
332 
334 
335  int load_routes (const XMLNode&, int);
336  std::shared_ptr<RouteList const> get_routes() const {
337  return routes.reader ();
338  }
339 
340  std::shared_ptr<RTTaskList> rt_tasklist () { return _rt_tasklist; }
341  std::shared_ptr<IOTaskList> io_tasklist () { return _io_tasklist; }
342 
344 
345  CoreSelection& selection () const { return *_selection; }
346 
347  /* because the set of Stripables consists of objects managed
348  * independently, in multiple containers within the Session (or objects
349  * owned by the session), we fill out a list in-place rather than
350  * return a pointer to a copy of the (RCU) managed list, as happens
351  * with get_routes()
352  */
353 
356  std::shared_ptr<RouteList> get_tracks() const;
357  std::shared_ptr<RouteList> get_routes_with_internal_returns() const;
358  std::shared_ptr<RouteList> get_routes_with_regions_at (timepos_t const &) const;
359 
360  uint32_t nstripables (bool with_monitor = false) const;
361  uint32_t nroutes() const { return routes.reader()->size(); }
362  uint32_t ntracks () const;
363  uint32_t naudiotracks () const;
364  uint32_t nbusses () const;
365  bool empty () const;
366 
367  bool plot_process_graph (std::string const& file_name) const;
368 
369  std::shared_ptr<BundleList const> bundles () {
370  return _bundles.reader ();
371  }
372 
374 
375  template<class T> void foreach_route (T *obj, void (T::*func)(Route&), bool sort = true);
376  template<class T> void foreach_route (T *obj, void (T::*func)(std::shared_ptr<Route>), bool sort = true);
377  template<class T, class A> void foreach_route (T *obj, void (T::*func)(Route&, A), A arg, bool sort = true);
378 
379  template<class A> void foreach_track (void (Track::*method)(A), A arg);
380  template<class A1, class A2> void foreach_track (void (Track::*method)(A1, A2), A1 arg1, A2 arg2);
381 
382  void foreach_route (void (Route::*method)());
383  template<class A> void foreach_route (void (Route::*method)(A), A arg);
384  template<class A1, class A2> void foreach_route (void (Route::*method)(A1, A2), A1 arg1, A2 arg2);
385 
386  static const std::string session_name_is_legal (const std::string&);
387 
388  bool io_name_is_legal (const std::string&) const;
389  std::shared_ptr<Route> route_by_name (std::string) const;
390  std::shared_ptr<Route> route_by_id (PBD::ID) const;
391  std::shared_ptr<Stripable> stripable_by_name (std::string) const;
392  std::shared_ptr<Stripable> stripable_by_id (PBD::ID) const;
394  std::shared_ptr<Route> get_remote_nth_route (PresentationInfo::order_t n) const;
395  std::shared_ptr<Route> route_by_selected_count (uint32_t cnt) const;
396  void routes_using_input_from (const std::string& str, RouteList& rl);
397 
398  bool route_name_unique (std::string) const;
399  bool route_name_internal (std::string) const;
400 
401  uint32_t track_number_decimals () const {
402  return _track_number_decimals;
403  }
404 
405  bool get_record_enabled() const {
406  return (record_status () >= Enabled);
407  }
408 
410  return _record_status.load();
411  }
412 
413  bool actively_recording () const {
414  return record_status() == Recording;
415  }
416 
417  bool record_enabling_legal () const;
418  void maybe_enable_record (bool rt_context = false);
419  void disable_record (bool rt_context, bool force = false);
421 
424 
426 
428 
429  /* Emitted when all i/o connections are complete */
430 
432 
433  /* Record status signals */
434 
435  PBD::Signal<void()> RecordStateChanged; /* signals changes in recording state (i.e. are we recording) */
436  /* XXX may 2015: paul says: it isn't clear to me that this has semantics that cannot be inferrred
437  from the previous signal and session state.
438  */
439  PBD::Signal<void()> RecordArmStateChanged; /* signals changes in recording arming */
440 
441  PBD::Signal<void()> UpdateRouteRecordState; /* signals potential change in route recording arming */
442 
445 
446  /* Emited when session is loaded */
448 
449  /* Transport mechanism signals */
450 
459 
460  PBD::Signal<void(samplepos_t)> PositionChanged; /* sent after any non-sequential motion */
463 
466 
468  /* This is emitted after one or more routes are added that are actually
469  Tracks with an instrument plugin.
470  */
475  PBD::Signal<void(std::shared_ptr<RouteGroup>)> RouteGroupPropertyChanged;
479  PBD::Signal<void(std::shared_ptr<RouteGroup>, std::weak_ptr<Route> )> RouteAddedToRouteGroup;
483  PBD::Signal<void(std::shared_ptr<RouteGroup>, std::weak_ptr<Route> )> RouteRemovedFromRouteGroup;
484 
488 
489  /* Step Editing status changed */
491 
492  /* Timecode state signals */
494 
496 
500  void request_stop (bool abort = false, bool clear_state = false, TransportRequestSource origin = TRS_UI);
502 
504 
505  void request_play_loop (bool yn, bool leave_rolling = false);
506  bool get_play_loop () const { return play_loop; }
507 
508  samplepos_t last_transport_start () const { return _last_roll_location; }
509  void goto_end ();
510  void goto_start (bool and_roll = false);
512  void allow_auto_play (bool yn);
513 
516 
517  void trigger_stop_all (bool now = true);
518 
522  void request_overwrite_buffer (std::shared_ptr<Track>, OverwriteReason);
525 
526  bool global_locate_pending() const { return _global_locate_pending; }
527  bool locate_pending() const;
528  bool locate_initiated() const;
529  bool declick_in_progress () const;
530  bool transport_locked () const;
531 
532  bool had_destructive_tracks () const;
534 
535  int wipe ();
536 
542  samplecnt_t sample_rate () const { return _current_sample_rate; }
544  samplecnt_t nominal_sample_rate () const { return _base_sample_rate; }
545  samplecnt_t frames_per_hour () const { return _frames_per_hour; }
546 
547  double samples_per_timecode_frame() const { return _samples_per_timecode_frame; }
548  samplecnt_t timecode_frames_per_hour() const { return _timecode_frames_per_hour; }
549 
551  return mtc_timecode_bits; /* encoding of SMTPE type for MTC */
552  }
553 
555  bool timecode_drop_frames() const;
556 
557  /* Locations */
558 
559  Locations *locations() { return _locations; }
560 
564 
567  void set_session_extents (timepos_t const & start, timepos_t const & end);
568  bool session_range_is_free () const { return _session_range_is_free; }
570 
571  pframes_t get_block_size () const { return current_block_size; }
572  samplecnt_t worst_output_latency () const { return _worst_output_latency; }
573  samplecnt_t worst_input_latency () const { return _worst_input_latency; }
574  samplecnt_t worst_route_latency () const { return _worst_route_latency; }
575  samplecnt_t io_latency () const { return _io_latency; }
578 
580 
581  struct SaveAs {
582  std::string new_parent_folder; /* parent folder where new session folder will be created */
583  std::string new_name; /* name of newly saved session */
584  bool switch_to; /* true if we should be working on newly saved session after save-as; false otherwise */
585  bool include_media; /* true if the newly saved session should contain references to media */
586  bool copy_media; /* true if media files (audio, media, etc) should be copied into newly saved session; false otherwise */
587  bool copy_external; /* true if external media should be consolidated into the newly saved session; false otherwise */
588 
589  std::string final_session_folder_name; /* filled in by * Session::save_as(), provides full path to newly saved session */
590 
591  /* emitted as we make progress. 3 arguments passed to signal
592  * handler:
593  *
594  * 1: percentage complete measured as a fraction (0-1.0) of
595  * total data copying done.
596  * 2: number of files copied so far
597  * 3: total number of files to copy
598  *
599  * Handler should return true for save-as to continue, or false
600  * to stop (and remove all evidence of partial save-as).
601  */
602  PBD::Signal<bool(float,int64_t,int64_t)> Progress;
603 
604  /* if save_as() returns non-zero, this string will indicate the reason why.
605  */
606  std::string failure_message;
607  };
608 
609  int save_as (SaveAs&);
610 
620  int save_state (std::string snapshot_name = "",
621  bool pending = false,
622  bool switch_to_snapshot = false,
623  bool template_only = false,
624  bool for_archive = false,
625  bool only_used_assets = false);
626 
630  FLAC_24BIT
631  };
632 
633  int archive_session (const std::string&, const std::string&,
634  ArchiveEncode compress_audio = FLAC_16BIT,
636  bool only_used_sources = false,
637  PBD::Progress* p = 0);
638 
639  int restore_state (std::string snapshot_name);
640  int save_template (const std::string& template_name, const std::string& description = "", bool replace_existing = false);
641  int save_history (std::string snapshot_name = "");
642  int restore_history (std::string snapshot_name);
643  void remove_state (std::string snapshot_name);
644  void rename_state (std::string old_name, std::string new_name);
646  int rename (const std::string&);
647  bool get_nsm_state () const { return _under_nsm_control; }
648  void set_nsm_state (bool state) { _under_nsm_control = state; }
650 
652 
653  PBD::Signal<void(std::string)> StateSaved;
655 
656  /* emitted when session needs to be saved due to some internal
657  * event or condition (i.e. not in response to a user request).
658  *
659  * Only one object should
660  * connect to this signal and take responsibility.
661  *
662  * Argument is the snapshot name to use when saving.
663  */
664  PBD::Signal<void(std::string)> SaveSessionRequested;
665 
666  /* emitted during a session save to allow other entities to add state, via
667  * extra XML, to the session state
668  */
670 
671  std::vector<std::string> possible_states() const;
672  static std::vector<std::string> possible_states (std::string path);
673 
677  CreateRouteGroup
678  };
679 
681  RouteImportInfo (std::string const& n, PresentationInfo const& p, int mb)
682  : name (n)
683  , pi (p)
684  , mixbus (mb)
685  {}
686 
687  std::string name;
689  int mixbus;
690 
691  bool operator< (RouteImportInfo const& o) {
692  if (mixbus != o.mixbus) {
693  return mixbus < o.mixbus;
694  }
695  return name < o.name;
696  }
697 
698  bool operator== (RouteImportInfo const& o) {
699  return mixbus == o.mixbus && name == o.name;
700  }
701  };
702 
703  bool export_route_state (std::shared_ptr<RouteList> rl, const std::string& path, bool with_sources);
704  int import_route_state (const std::string& path, std::map<PBD::ID, PBD::ID> const&, RouteGroupImportMode rgim = CreateRouteGroup, PBD::Progress* p = 0);
705 
706  std::map<PBD::ID, RouteImportInfo> parse_route_state (const std::string& path, bool& match_pbd_id);
707 
709  void add_instant_xml (XMLNode&, bool write_to_config = true);
710  XMLNode* instant_xml (const std::string& str);
711 
713  Clean = 0x0,
714  Dirty = 0x1,
715  CannotSave = 0x2,
716  Deletion = 0x4,
717  InitialConnecting = 0x8,
718  Loading = 0x10,
719  InCleanup = 0x20,
720  PeakCleanup = 0x40
721  };
722 
724  public:
725  StateProtector (Session* s) : _session (s) {
727  }
729  if (PBD::atomic_dec_and_test (_session->_suspend_save)) {
730  while (_session->_save_queued) {
731  _session->_save_queued = false;
732  _session->save_state ("");
733  }
734  while (_session->_save_queued_pending) {
735  _session->_save_queued_pending = false;
736  _session->save_state ("", true);
737  }
738  }
739  }
740  private:
742  };
743 
745  public:
746  ProcessorChangeBlocker (Session* s, bool rc = true);
748 
749  private:
752  };
753 
754  std::shared_ptr<RouteGroup> new_route_group (const std::string&);
755  void add_route_group (std::shared_ptr<RouteGroup>);
756  void remove_route_group (std::shared_ptr<RouteGroup> rg);
758 
759  std::shared_ptr<RouteGroup> route_group_by_name (std::string);
760 
761  PBD::Signal<void(std::shared_ptr<RouteGroup>)> route_group_added;
764 
765  void foreach_route_group (std::function<void(std::shared_ptr<RouteGroup>)> f) {
766  for (auto & rg : _route_groups) {
767  f (rg);
768  }
769  }
770 
771  RouteGroupList const & route_groups () const {
772  return _route_groups;
773  }
774 
775  /* fundamental operations. duh. */
776 
778  int input_channels,
779  int output_channels,
780  std::shared_ptr<RouteGroup> route_group,
781  uint32_t how_many,
782  std::string name_template,
784  TrackMode mode = Normal,
785  bool input_auto_connect = true,
786  bool trigger_visibility = false
787  );
788 
789  /* Call this repeatedly with different track name templates and finally call add_routes.
790  * useful for speeding up imports of various kinds that involve lots of tracks */
792  RouteList& routes,
793  AudioTrackList& tracks,
794  int input_channels,
795  int output_channels,
796  std::shared_ptr<RouteGroup> route_group,
797  uint32_t how_many,
798  std::string name_template,
800  TrackMode mode = Normal,
801  bool input_auto_connect = true,
802  bool trigger_visibility = false
803  );
804 
805  std::list<std::shared_ptr<MidiTrack> > new_midi_track (
806  const ChanCount& input, const ChanCount& output, bool strict_io,
807  std::shared_ptr<PluginInfo> instrument,
808  Plugin::PresetRecord* pset,
809  std::shared_ptr<RouteGroup> route_group, uint32_t how_many, std::string name_template,
811  TrackMode mode,
812  bool input_auto_connect,
813  bool trigger_visibility = false
814  );
815 
816  RouteList new_audio_route (int input_channels, int output_channels, std::shared_ptr<RouteGroup> route_group, uint32_t how_many, std::string name_template, PresentationInfo::Flag, PresentationInfo::order_t);
817  RouteList new_midi_route (std::shared_ptr<RouteGroup> route_group, uint32_t how_many, std::string name_template, bool strict_io, std::shared_ptr<PluginInfo> instrument, Plugin::PresetRecord*, PresentationInfo::Flag, PresentationInfo::order_t);
818 
819  void remove_routes (std::shared_ptr<RouteList>);
820  void remove_route (std::shared_ptr<Route>);
821 
822  void add_routes (RouteList&, bool input_auto_connect, bool output_auto_connect, PresentationInfo::order_t);
823 
824  void resort_routes ();
825 
826  AudioEngine & engine() { return _engine; }
827  AudioEngine const & engine () const { return _engine; }
828 
829  static std::string default_track_name_pattern (DataType);
830 
831  /* Time */
832 
833  samplepos_t transport_sample () const { return _transport_sample; }
834  samplepos_t record_location () const { return _last_record_location; }
835  samplepos_t audible_sample (bool* latent_locate = NULL) const;
836  samplepos_t requested_return_sample() const { return _requested_return_sample; }
838  std::optional<samplepos_t> const & nominal_jack_transport_sample() { return _nominal_jack_transport_sample; }
839 
840  bool compute_audible_delta (samplepos_t& pos_and_delta) const;
841  samplecnt_t remaining_latency_preroll () const { return _remaining_latency_preroll; }
842 
852  pullup_Minus4Minus1
853  };
854 
856 
857  void timecode_to_sample(Timecode::Time& timecode, samplepos_t& sample, bool use_offset, bool use_subframes) const;
858  void sample_to_timecode(samplepos_t sample, Timecode::Time& timecode, bool use_offset, bool use_subframes) const;
862 
864  void timecode_duration_string (char *, size_t len, samplecnt_t) const;
865 
868 
871 
872  void request_sync_source (std::shared_ptr<TransportMaster>);
873  bool synced_to_engine() const;
874 
875  double engine_speed() const { return _engine_speed; }
876  double actual_speed() const;
877  double transport_speed (bool incl_preroll = false) const;
879  bool transport_stopped() const;
890  bool transport_rolling() const;
892  bool transport_locating() const;
893 
894  bool silent () { return _silent; }
895 
896  bool punch_is_possible () const;
897  bool loop_is_possible () const;
899 
901 
902  unsigned int get_xrun_count () const {return _xrun_count; }
904 
905  /* region info */
906 
907  std::shared_ptr<Region> find_whole_file_parent (std::shared_ptr<Region const>) const;
908 
909  std::shared_ptr<Region> XMLRegionFactory (const XMLNode&, bool full);
910  std::shared_ptr<AudioRegion> XMLAudioRegionFactory (const XMLNode&, bool full);
911  std::shared_ptr<MidiRegion> XMLMidiRegionFactory (const XMLNode&, bool full);
912 
913  void deinterlace_midi_region ( std::shared_ptr<MidiRegion> mr );
914 
915  /* source management */
916 
918  bool sample_rate_convert (ImportStatus&, std::string infile, std::string& outfile);
919  std::string build_tmp_convert_name (std::string file);
920 
921  std::shared_ptr<ExportHandler> get_export_handler ();
922  std::shared_ptr<ExportStatus> get_export_status ();
923 
924  int start_audio_export (samplepos_t position, bool realtime = false, bool region_export = false);
925 
927  static PBD::Signal<void(std::string, std::string, bool, samplepos_t)> Exported;
928 
929  void add_source (std::shared_ptr<Source>);
930  void remove_source (std::weak_ptr<Source>, bool drop_references = true);
931 
933  bool can_cleanup_peakfiles () const;
937 
939 
940  int destroy_sources (std::list<std::shared_ptr<Source> > const&);
941 
944  void last_capture_sources (std::list<std::shared_ptr<Source> >&) const;
946 
951  static PBD::Signal<int(std::shared_ptr<Playlist> )> AskAboutPlaylistDeletion;
952 
957 
960 
964 
970  static PBD::Signal<void()> AfterConnect;
971 
972  std::shared_ptr<AudioFileSource> create_audio_source_for_session (
973  size_t, std::string const &, uint32_t);
974 
975  std::shared_ptr<MidiSource> create_midi_source_for_session (std::string const &);
976  std::shared_ptr<MidiSource> create_midi_source_by_stealing_name (std::shared_ptr<Track>);
977 
978  std::shared_ptr<Source> source_by_id (const PBD::ID&);
979  std::shared_ptr<AudioFileSource> audio_source_by_path_and_channel (const std::string&, uint16_t) const;
980  std::shared_ptr<MidiSource> midi_source_by_path (const std::string&, bool need_source_lock) const;
981  uint32_t count_sources_by_origin (const std::string&);
982 
983  void add_playlist (std::shared_ptr<Playlist>);
984 
985  /* Curves and AutomationLists (TODO when they go away) */
987 
988  /* auditioning */
989 
990  std::shared_ptr<Auditioner> the_auditioner() { return auditioner; }
992  void audition_region (std::shared_ptr<Region>);
994  bool is_auditioning () const;
995 
997 
998  /* session script */
999  void register_lua_function (const std::string&, const std::string&, const LuaScriptParamList&);
1000  void unregister_lua_function (const std::string& name);
1001  std::vector<std::string> registered_lua_functions ();
1002  uint32_t registered_lua_function_count () const { return _n_lua_scripts; }
1003  void scripts_changed (); // called from lua, updates _n_lua_scripts
1004 
1006 
1007  /* I/O Plugin */
1009 
1010  void load_io_plugin (std::shared_ptr<IOPlug>);
1011  bool unload_io_plugin (std::shared_ptr<IOPlug>);
1012 
1013  std::shared_ptr<IOPlug> nth_io_plug (uint32_t n) {
1014  std::shared_ptr<IOPlugList const> iop (_io_plugins.reader ());
1015  if (n < iop->size ()) {
1016  return (*iop)[n];
1017  }
1018  return std::shared_ptr<IOPlug> ();
1019  }
1020 
1021  std::shared_ptr<IOPlugList const> io_plugs () const {
1022  return _io_plugins.reader ();
1023  }
1024 
1025  /* flattening stuff */
1026 
1027  std::shared_ptr<Region> write_one_track (Track&, samplepos_t start, samplepos_t end,
1028  bool overwrite, std::vector<std::shared_ptr<Source> >&, InterThreadInfo& wot,
1029  std::shared_ptr<Processor> endpoint,
1030  bool include_endpoint, bool for_export, bool for_freeze,
1031  std::string const& source_name = "", std::string const& region_name = "");
1033 
1034  /* session-wide solo/mute/rec-enable */
1035 
1036  bool muted () const;
1037  std::vector<std::weak_ptr<AutomationControl> > cancel_all_mute ();
1038 
1039  bool soloing () const { return _non_soloed_outs_muted; }
1040  bool listening () const;
1041  bool solo_isolated () const { return _solo_isolated_cnt > 0; }
1043 
1046 
1047  void clear_all_solo_state (std::shared_ptr<RouteList const>);
1048  void prepare_momentary_solo (SoloMuteRelease* smr = NULL, bool exclusive = false, std::shared_ptr<Route> route = std::shared_ptr<Route> ());
1049 
1051 
1052  /* Control-based methods */
1053 
1054  void set_controls (std::shared_ptr<AutomationControlList>, double val, PBD::Controllable::GroupControlDisposition);
1055  void set_control (std::shared_ptr<AutomationControl>, double val, PBD::Controllable::GroupControlDisposition);
1056 
1057  void set_exclusive_input_active (std::shared_ptr<RouteList> rt, bool onoff, bool flip_others = false);
1058 
1066 
1068 
1069  /* monitor/master out */
1071 
1073  bool monitor_active() const { return (_monitor_out && _monitor_out->monitor_control () && _monitor_out->monitor_control ()->monitor_active()); }
1074 
1075  std::shared_ptr<Route> monitor_out() const { return _monitor_out; }
1076  std::shared_ptr<Route> master_out() const { return _master_out; }
1077  std::shared_ptr<GainControl> master_volume () const;
1078  std::shared_ptr<Route> surround_master() const { return _surround_master; }
1079 
1080  PresentationInfo::order_t master_order_key () const { return _master_out ? _master_out->presentation_info ().order () : -1; }
1082 
1083  void globally_add_internal_sends (std::shared_ptr<Route> dest, Placement p, bool);
1084  void globally_set_send_gains_from_track (std::shared_ptr<Route> dest);
1085  void globally_set_send_gains_to_zero (std::shared_ptr<Route> dest);
1086  void globally_set_send_gains_to_unity (std::shared_ptr<Route> dest);
1087  void add_internal_sends (std::shared_ptr<Route> dest, Placement p, std::shared_ptr<RouteList> senders);
1088  void add_internal_send (std::shared_ptr<Route>, int, std::shared_ptr<Route>);
1089  void add_internal_send (std::shared_ptr<Route>, std::shared_ptr<Processor>, std::shared_ptr<Route>);
1090 
1091  static void set_disable_all_loaded_plugins (bool yn) {
1092  _disable_all_loaded_plugins = yn;
1093  }
1095  return _disable_all_loaded_plugins;
1096  }
1097  static void set_bypass_all_loaded_plugins (bool yn) {
1098  _bypass_all_loaded_plugins = yn;
1099  }
1101  return _bypass_all_loaded_plugins;
1102  }
1103 
1104  uint32_t next_send_id();
1106  uint32_t next_aux_send_id();
1107  uint32_t next_return_id();
1108  uint32_t next_insert_id();
1109  void mark_send_id (uint32_t);
1110  void mark_surround_send_id (uint32_t);
1111  void mark_aux_send_id (uint32_t);
1112  void mark_return_id (uint32_t);
1113  void mark_insert_id (uint32_t);
1114  void unmark_send_id (uint32_t);
1115  void unmark_surround_send_id (uint32_t);
1116  void unmark_aux_send_id (uint32_t);
1117  void unmark_return_id (uint32_t);
1118  void unmark_insert_id (uint32_t);
1119 
1120  bool vapor_barrier ();
1122 
1123  /* s/w "RAID" management */
1124 
1125  std::optional<samplecnt_t> available_capture_duration();
1126 
1127  /* I/O bundles */
1128 
1129  void add_bundle (std::shared_ptr<Bundle>, bool emit_signal = true);
1130  void remove_bundle (std::shared_ptr<Bundle>);
1131  std::shared_ptr<Bundle> bundle_by_name (std::string) const;
1132 
1134 
1135  void midi_panic ();
1136 
1137  /* History (for editors, mixers, UIs etc.) */
1138 
1142  void undo (uint32_t n);
1146  void redo (uint32_t n);
1147 
1148  PBD::UndoHistory& history() { return _history; }
1149 
1150  uint32_t undo_depth() const { return _history.undo_depth(); }
1151  uint32_t redo_depth() const { return _history.redo_depth(); }
1152  std::string next_undo() const { return _history.next_undo(); }
1153  std::string next_redo() const { return _history.next_redo(); }
1154 
1155 
1156  std::map<PBD::ID,PBD::StatefulDestructible*> registry;
1157 
1158  // these commands are implemented in libs/ardour/session_command.cc
1162 
1163  /* clicking */
1164 
1165  std::shared_ptr<IO> click_io() { return _click_io; }
1166  std::shared_ptr<Amp> click_gain() { return _click_gain; }
1167 
1168  /* disk, buffer loads */
1169 
1170  uint32_t playback_load ();
1171  uint32_t capture_load ();
1172 
1173  /* ranges */
1174 
1175  void request_play_range (std::list<TimelineRange>*, bool leave_rolling = false);
1177  bool get_play_range () const { return _play_range; }
1178 
1180 
1181  /* preroll */
1183 
1186 
1187  samplecnt_t preroll_record_trim_len () const { return _preroll_record_trim_len; }
1188 
1189  /* temporary hacks to allow selection to be pushed from GUI into backend.
1190  Whenever we move the selection object into libardour, these will go away.
1191  */
1196 
1198 
1199  /* buffers for gain and pan */
1200 
1206 
1207  /* VST support */
1208 
1210  static const char* vst_can_do_strings[];
1211  static const int vst_can_do_string_count;
1212 
1213  static intptr_t vst_callback (
1214  AEffect* effect,
1215  int32_t opcode,
1216  int32_t index,
1217  intptr_t value,
1218  void* ptr,
1219  float opt
1220  );
1221 
1222  static PBD::Signal<void()> SendFeedback;
1223 
1224  /* Speakers */
1225 
1226  std::shared_ptr<Speakers> get_speakers ();
1227 
1228  /* Controllables */
1229 
1230  std::shared_ptr<ARDOUR::Trigger> trigger_by_id (PBD::ID) const;
1231 
1232  std::shared_ptr<Processor> processor_by_id (PBD::ID) const;
1233 
1234  std::shared_ptr<PBD::Controllable> controllable_by_id (const PBD::ID&);
1235  std::shared_ptr<AutomationControl> automation_control_by_id (const PBD::ID&);
1236 
1237  void add_controllable (std::shared_ptr<PBD::Controllable>);
1238 
1239  std::shared_ptr<PBD::Controllable> solo_cut_control() const;
1240  std::shared_ptr<PBD::Controllable> recently_touched_controllable () const;
1241 
1242  bool apply_nth_mixer_scene (size_t);
1243  bool apply_nth_mixer_scene (size_t, RouteList const&);
1244  void store_nth_mixer_scene (size_t);
1245  bool nth_mixer_scene_valid (size_t) const;
1246  size_t last_touched_mixer_scene_idx () {return _last_touched_mixer_scene_idx;}
1247 
1248  std::shared_ptr<MixerScene> nth_mixer_scene (size_t, bool create_if_missing = false);
1249  std::vector<std::shared_ptr<MixerScene>> mixer_scenes () const;
1250 
1252 
1253  SessionConfiguration* cfg () { return &config; }
1254 
1255  bool exporting () const {
1256  return _exporting;
1257  }
1258 
1259  bool realtime_export() const {
1260  return _realtime_export;
1261  }
1262 
1263  bool bounce_processing() const {
1264  return _bounce_processing_active;
1265  }
1266 
1267  /* this is a private enum, but setup_enum_writer() needs it,
1268  and i can't find a way to give that function
1269  friend access. sigh.
1270  */
1271 
1273  PostTransportStop = 0x1,
1274  PostTransportLocate = 0x2,
1275  PostTransportAbort = 0x8,
1276  PostTransportOverWrite = 0x10,
1277  PostTransportAudition = 0x20,
1278  PostTransportReverse = 0x40,
1279  PostTransportClearSubstate = 0x80,
1280  PostTransportAdjustPlaybackBuffering = 0x100,
1281  PostTransportAdjustCaptureBuffering = 0x200,
1282  PostTransportLoopChanged = 0x400
1283  };
1284 
1285  std::shared_ptr<SessionPlaylists> playlists () const { return _playlists; }
1286 
1288  void queue_full_time_code () { _send_timecode_update = true; }
1289  void queue_song_position_pointer () { /* currently does nothing */ }
1290 
1291  bool step_editing() const { return (_step_editors > 0); }
1292 
1296 
1297  std::vector<std::string> source_search_path(DataType) const;
1298  void ensure_search_path_includes (const std::string& path, DataType type);
1299  void remove_dir_from_search_path (const std::string& path, DataType type);
1300 
1301  std::list<std::string> unknown_processors () const;
1302 
1303  std::list<std::string> missing_filesources (DataType) const;
1304 
1310 
1315 
1316  /* handlers can return an integer value:
1317  0: config.set_audio_search_path() or config.set_midi_search_path() was used
1318  to modify the search path and we should try to find it again.
1319  1: quit entire session load
1320  2: as 0, but don't ask about other missing files
1321  3: don't ask about other missing files, and just mark this one missing
1322  -1: just mark this one missing
1323  any other value: as -1
1324  */
1325  static PBD::Signal<int(Session*,std::string,DataType)> MissingFile;
1326 
1327  void set_missing_file_replacement (const std::string& mfr) {
1328  _missing_file_replacement = mfr;
1329  }
1330 
1332  static PBD::Signal<void()> Quit;
1333 
1337  static PBD::Signal<void(std::string,std::string)> VersionMismatch;
1338 
1339  SceneChanger* scene_changer() const { return _scene_changer; }
1340 
1341  /* asynchronous MIDI control ports */
1342 
1343  std::shared_ptr<Port> mmc_output_port () const;
1344  std::shared_ptr<Port> mmc_input_port () const;
1345  std::shared_ptr<Port> trigger_input_port () const;
1346  std::shared_ptr<Port> scene_input_port () const;
1347  std::shared_ptr<Port> scene_output_port () const;
1348 
1349  std::shared_ptr<AsyncMIDIPort> vkbd_output_port () const;
1350 
1351  /* synchronous MIDI ports used for synchronization */
1352 
1353  std::shared_ptr<MidiPort> midi_clock_output_port () const;
1354  std::shared_ptr<MidiPort> mtc_output_port () const;
1355  std::shared_ptr<Port> ltc_output_port() const { return _ltc_output_port; }
1356 
1357  MIDI::MachineControl& mmc() { return *_mmc; }
1358 
1360  void reconnect_mmc_ports (bool);
1361 
1363 
1364  VCAManager& vca_manager() { return *_vca_manager; }
1365  VCAManager* vca_manager_ptr() { return _vca_manager; }
1366 
1368 
1372  std::shared_ptr<TransportMaster> transport_master() const;
1373 
1376  bool import_sndfile_as_region (std::string path, SrcQuality quality, timepos_t& pos, SourceList& sources, ImportStatus& status, uint32_t current, uint32_t total);
1377 
1378  typedef struct ptflookup {
1379  uint16_t index1;
1380  uint16_t index2;
1382 
1383  bool operator ==(const struct ptflookup& other) {
1384  return (this->index1 == other.index1);
1385  }
1386  } PtfLookup;
1387  std::vector<PtfLookup> ptfregpair;
1388 
1390  OverallProcess = 0,
1391  ProcessFunction = 1,
1392  NoRoll = 2,
1393  Roll = 3,
1394  /* end */
1395  NTT = 4
1396  };
1397 
1398  PBD::TimingStats dsp_stats[NTT];
1399 
1400  int32_t first_cue_within (samplepos_t s, samplepos_t e, bool& was_recorded);
1401  void trigger_cue_row (int32_t);
1402  CueEvents const & cue_events() const { return _cue_events; }
1403 
1404  int num_triggerboxes () const;
1405  std::shared_ptr<TriggerBox> triggerbox_at (int32_t route_index) const;
1406  TriggerPtr trigger_at (int32_t route_index, int32_t row_index) const;
1407  bool bang_trigger_at(int32_t route_index, int32_t row_index, float velocity = 1.0);
1408  bool unbang_trigger_at(int32_t route_index, int32_t row_index);
1409  void clear_cue (int row_index);
1410  std::shared_ptr<TriggerBox> armed_triggerbox () const;
1411  std::shared_ptr<TriggerBox> rec_enabled_triggerbox () const;
1412 
1415 
1416  AnyTime global_quantization() const { return _global_quantization; }
1419 
1420 protected:
1421  friend class AudioEngine;
1422  void set_block_size (pframes_t nframes);
1424 
1425  friend class Route;
1426  void update_latency_compensation (bool force, bool called_from_backend);
1427 
1428  /* transport API */
1429 
1430  void locate (samplepos_t, bool for_loop_end=false, bool force=false, bool with_mmc=true);
1431  void stop_transport (bool abort = false, bool clear_state = false);
1432  void start_transport (bool after_loop);
1434  void post_locate ();
1437  bool user_roll_after_locate () const;
1439  samplepos_t position() const { return _transport_sample; }
1440  void set_transport_speed (double speed);
1441  void set_default_play_speed (double spd);
1444 
1445 private:
1446  int create (const std::string& mix_template, BusProfile const *, bool unnamed);
1447  void destroy ();
1448 
1449  static std::atomic<unsigned int> _name_id_counter;
1450  static void init_name_id_counter (unsigned int n);
1451  static unsigned int name_id_counter ();
1452 
1453  std::shared_ptr<SessionPlaylists> _playlists;
1454 
1455  /* stuff used in process() should be close together to
1456  maximise cache hits
1457  */
1458 
1459  typedef void (Session::*process_function_type)(pframes_t);
1460 
1462  process_function_type process_function;
1463  process_function_type last_process_function;
1466  samplecnt_t _base_sample_rate; // sample-rate of the session at creation time, "native" SR
1467  samplecnt_t _current_sample_rate; // this includes video pullup offset
1469  std::atomic<int> _seek_counter;
1470  std::atomic<int> _butler_seek_counter;
1473  bool _silent;
1476 
1477  // varispeed playback -- TODO: move out of session to backend.
1480 
1492  unsigned int _capture_xruns;
1493  unsigned int _export_xruns;
1496  uint32_t _listen_cnt;
1501  unsigned int _xrun_count;
1502 
1504 
1505  mutable std::atomic<int> _processing_prohibited;
1506  mutable std::atomic<RecordState> _record_status;
1507 
1510 
1513 
1514  std::optional<bool> _vapor_available;
1515  std::optional<bool> _vapor_exportable;
1516 
1517  void update_latency (bool playback);
1518  void set_owned_port_public_latency (bool playback);
1519  bool update_route_latency (bool reverse, bool apply_to_delayline, bool* delayline_update_needed);
1523 
1526 
1528 
1532 
1538 
1540 
1542  void unblock_processing() { _processing_prohibited.store (0); }
1543  bool processing_blocked() const { return _processing_prohibited.load (); }
1544 
1546 
1547  /* Transport master DLL */
1548 
1550  Stopped, /* no incoming or invalid signal/data for master to run with */
1551  Waiting, /* waiting to get full lock on incoming signal/data */
1552  Running /* lock achieved, master is generating meaningful speed & position */
1553  };
1554 
1556 
1564  };
1565 
1570  double catch_speed;
1571 
1573  : action (TransportMasterRelax)
1574  , target (0)
1575  , roll_disposition (MustStop)
1576  , catch_speed (0.) {}
1577  };
1578 
1580  double plan_master_strategy (pframes_t nframes, double master_speed, samplepos_t master_transport_sample, double catch_speed);
1581  double plan_master_strategy_engine (pframes_t nframes, double master_speed, samplepos_t master_transport_sample, double catch_speed);
1583 
1585 
1587 
1590 
1596 
1597  std::shared_ptr<ExportHandler> export_handler;
1598  std::shared_ptr<ExportStatus> export_status;
1599 
1600  int pre_export ();
1603  void finalize_export_internal (bool stop_freewheel);
1605 
1607 
1609  int process_routes (pframes_t, bool& need_butler);
1610  int silent_process_routes (pframes_t, bool& need_butler);
1611 
1616  bool maybe_stop (samplepos_t limit);
1618 
1620  std::string _path;
1621  std::string _name;
1622  bool _is_new;
1628  std::atomic<bool> play_loop;
1631 
1632  const std::unique_ptr<SessionDirectory> _session_dir;
1633 
1634  void hookup_io ();
1635  void graph_reordered (bool called_from_backend);
1636 
1638  void set_snapshot_name (const std::string &);
1639  void save_snapshot_name (const std::string &);
1641 
1644 
1645  friend class StateProtector;
1646  std::atomic<int> _suspend_save;
1647  volatile bool _save_queued;
1648  volatile bool _save_queued_pending;
1650 
1654 
1655  int load_options (const XMLNode&);
1656  int load_state (std::string snapshot_name, bool from_template = false);
1657  static int parse_stateful_loading_version (const std::string&);
1658 
1663 
1666 
1667 #ifdef USE_TLSF
1668  PBD::TLSF _mempool;
1669 #else
1671 #endif
1674  luabridge::LuaRef * _lua_run;
1675  luabridge::LuaRef * _lua_add;
1676  luabridge::LuaRef * _lua_del;
1677  luabridge::LuaRef * _lua_list;
1678  luabridge::LuaRef * _lua_load;
1679  luabridge::LuaRef * _lua_save;
1680  luabridge::LuaRef * _lua_cleanup;
1681  uint32_t _n_lua_scripts;
1682 
1683  void setup_lua ();
1686 
1688 
1689  std::vector<std::shared_ptr<MixerScene>> _mixer_scenes;
1691 
1693 
1695 
1696  static const PostTransportWork ProcessCannotProceedMask = PostTransportWork (PostTransportAudition);
1697 
1698  std::atomic<PostTransportWork> _post_transport_work; /* accessed only atomic ops */
1699  PostTransportWork post_transport_work() const { return _post_transport_work.load(); }
1700  void set_post_transport_work (PostTransportWork ptw) { _post_transport_work.store (ptw); }
1702 
1705 
1711 
1712  void update_skips (Location*, bool consolidate);
1713  void update_marks (Location* loc);
1717 
1720 
1725 
1728 
1729  void pre_engine_init (std::string path);
1733 
1735 
1738 
1739  void enable_record ();
1740 
1742  if (max_samplepos - val < _transport_sample) {
1743  _transport_sample = max_samplepos;
1744  } else {
1745  _transport_sample += val;
1746  }
1747  }
1748 
1750  if (val < _transport_sample) {
1751  _transport_sample -= val;
1752  } else {
1753  _transport_sample = 0;
1754  }
1755  }
1756 
1758  static void *session_loader_thread (void *arg);
1759 
1760  void *do_work();
1761 
1762  /* Signal Forwarding */
1765  static void *emit_thread (void *);
1768 
1769  pthread_t _rt_emit_thread;
1771 
1772  pthread_mutex_t _rt_emit_mutex;
1773  pthread_cond_t _rt_emit_cond;
1775 
1776  /* Auto Connect Thread */
1777  static void *auto_connect_thread (void *);
1781 
1783  std::atomic<int> _ac_thread_active;
1784  pthread_mutex_t _auto_connect_mutex;
1785  pthread_cond_t _auto_connect_cond;
1786 
1788  public:
1789  AutoConnectRequest (std::shared_ptr <Route> r,
1790  bool ci, bool co,
1791  const ChanCount& is,
1792  const ChanCount& os,
1793  const ChanCount& io,
1794  const ChanCount& oo)
1795  : route (std::weak_ptr<Route> (r))
1796  , connect_inputs (ci)
1797  , connect_outputs (co)
1798  , input_start (is)
1799  , output_start (os)
1800  , input_offset (io)
1801  , output_offset (oo)
1802  {}
1803 
1804  std::weak_ptr <Route> route;
1811  };
1812 
1814 
1815  typedef std::queue<AutoConnectRequest> AutoConnectQueue;
1818  std::atomic<unsigned int> _latency_recompute_pending;
1819 
1820  void get_physical_ports (std::vector<std::string>& inputs, std::vector<std::string>& outputs, DataType type,
1821  MidiPortFlags include = MidiPortFlags (0),
1822  MidiPortFlags exclude = MidiPortFlags (0));
1823 
1826 
1827  /* SessionEventManager interface */
1828 
1832 
1833  /* MIDI Machine Control */
1834 
1835  void spp_start ();
1836  void spp_continue ();
1837  void spp_stop ();
1838 
1846  void mmc_track_record_status (MIDI::MachineControl &, uint32_t track, bool enabled);
1850  void mmc_shuttle (MIDI::MachineControl &mmc, float speed, bool forw);
1851  void mmc_record_enable (MIDI::MachineControl &mmc, size_t track, bool enabled);
1852 
1854  double step_speed;
1855 
1856  typedef std::function<bool()> MidiTimeoutCallback;
1857  typedef std::list<MidiTimeoutCallback> MidiTimeoutList;
1858 
1862 
1863  MIDI::byte mtc_msg[16];
1864  MIDI::byte mtc_timecode_bits; /* encoding of SMTPE type for MTC */
1865  MIDI::byte midi_msg[16];
1869 
1870  double _samples_per_timecode_frame; /* has to be floating point because of drop sample */
1873 
1874  /* cache the most-recently requested time conversions. This helps when we
1875  * have multiple clocks showing the same time (e.g. the transport sample) */
1879 
1881 
1883 
1886 
1888  int32_t ltc_buf_off;
1889  int32_t ltc_buf_len;
1890 
1891  double ltc_speed;
1892  int32_t ltc_enc_byte;
1894  double ltc_enc_cnt;
1898 
1901 
1904 
1912 
1914 
1915  int no_roll (pframes_t nframes);
1916  int fail_roll (pframes_t nframes);
1917 
1918  bool non_realtime_work_pending() const { return static_cast<bool>(post_transport_work()); }
1919  bool process_can_proceed() const { return !(post_transport_work() & ProcessCannotProceedMask); }
1920 
1922 
1924 
1926 
1927  void set_play_loop (bool yn, bool change_transport_state);
1928  void unset_play_loop (bool change_transport_state = false);
1929  void overwrite_some_buffers (std::shared_ptr<Route>, OverwriteReason);
1931  int micro_locate (samplecnt_t distance);
1932 
1937  };
1938 
1939  std::atomic<PunchLoopLock> _punch_or_loop;
1940  std::atomic<int> _current_usecs_per_track;
1941 
1942  bool punch_active () const;
1943  void unset_punch ();
1945  bool maybe_allow_only_loop (bool play_loop = false);
1947 
1949  void realtime_stop (bool abort, bool clear_state);
1950  void realtime_locate (bool);
1953  void non_realtime_stop (bool abort, int entry_request_count, bool& finished, bool will_locate);
1954  void non_realtime_overwrite (int entry_request_count, bool& finished, bool reset_loop_declicks);
1955  void engine_halted ();
1957  void xrun_recovery ();
1958  void set_track_loop (bool);
1962 
1963  /* These are synchronous and so can only be called from within the process
1964  * cycle
1965  */
1966 
1970 
1971  /* edit/mix groups */
1972 
1973  int load_route_groups (const XMLNode&, int);
1974 
1976  void route_group_emptied (std::shared_ptr<RouteGroup>);
1977 
1978  /* routes stuff */
1979 
1981 
1982  void add_routes_inner (RouteList&, bool input_auto_connect, bool output_auto_connect, PresentationInfo::order_t);
1987 
1989  bool strict_io,
1990  std::shared_ptr<PluginInfo> instrument,
1991  Plugin::PresetRecord* pset,
1992  ChanCount& existing_outputs
1993  );
1994 
1995  std::shared_ptr<Route> XMLRouteFactory (const XMLNode&, int);
1996  std::shared_ptr<Route> XMLRouteFactory_2X (const XMLNode&, int);
1997  std::shared_ptr<Route> XMLRouteFactory_3X (const XMLNode&, int);
1998 
2000 
2001  bool find_route_name (std::string const &, uint32_t& id, std::string& name, bool);
2003  void auto_connect_route (std::shared_ptr<Route>, bool, bool, const ChanCount&, const ChanCount&, const ChanCount& io = ChanCount(), const ChanCount& oo = ChanCount());
2004  void midi_output_change_handler (IOChange change, std::weak_ptr<Route> midi_track);
2005 
2006  /* track numbering */
2007 
2010 
2011  /* solo/mute/notifications */
2012 
2015  void route_solo_changed (bool self_solo_change, PBD::Controllable::GroupControlDisposition group_override, std::weak_ptr<Route>);
2016  void route_solo_isolated_changed (std::weak_ptr<Route>);
2017 
2018  void update_route_solo_state (std::shared_ptr<RouteList const> r = std::shared_ptr<RouteList const>());
2019 
2022 
2024 
2025  struct SoloChange {
2026  SoloChange (bool s, PBD::Controllable::GroupControlDisposition g, std::weak_ptr<Route> r)
2027  : self_solo_changed (s)
2028  , gcd (g)
2029  , route (r)
2030  {}
2033  std::weak_ptr<Route> route;
2034  };
2035 #ifdef _MSC_VER
2036  std::vector<SoloChange> _solo_change_queue;
2037 #else
2038  std::vector<SoloChange, PBD::StackAllocator<SoloChange, 8>> _solo_change_queue;
2039 #endif
2040 
2041  /* REGION MANAGEMENT */
2042 
2044 
2045  int load_regions (const XMLNode& node);
2046  int load_compounds (const XMLNode& node);
2047 
2048  void route_added_to_route_group (std::shared_ptr<RouteGroup>, std::weak_ptr<Route>);
2049  void route_removed_from_route_group (std::shared_ptr<RouteGroup>, std::weak_ptr<Route>);
2050  void route_group_property_changed (std::weak_ptr<RouteGroup>);
2051 
2052  /* SOURCES */
2053 
2055 
2056 public:
2057 
2058  /* Emited when a new source is added to the session */
2059  PBD::Signal< void(std::weak_ptr<Source> )> SourceAdded;
2060  PBD::Signal< void(std::weak_ptr<Source> )> SourceRemoved;
2061 
2062  typedef std::map<PBD::ID,std::shared_ptr<Source> > SourceMap;
2063 
2064  void foreach_source (std::function<void( std::shared_ptr<Source> )> f) {
2065  PBD::Mutex::Lock ls (source_lock);
2066  for (SourceMap::iterator i = sources.begin(); i != sources.end(); ++i) {
2067  f ( (*i).second );
2068  }
2069  }
2070 
2071  bool playlist_is_active( std::shared_ptr<Playlist>);
2072  ARDOUR::CueMarkers pending_source_markers; // source markers created while recording
2073 
2074 private:
2075  void reset_write_sources (bool mark_write_complete);
2077 
2078  int load_sources (const XMLNode& node);
2080 
2081  std::shared_ptr<Source> XMLSourceFactory (const XMLNode&);
2082 
2083  /* PLAYLISTS */
2084 
2085  void remove_playlist (std::weak_ptr<Playlist>);
2086  void track_playlist_changed (std::weak_ptr<Track>);
2087  void playlist_region_added (std::weak_ptr<Region>);
2088  void playlist_ranges_moved (std::list<Temporal::RangeMove> const &);
2089  void playlist_regions_extended (std::list<Temporal::Range> const &);
2090 
2091  /* CURVES and AUTOMATION LISTS */
2092  std::map<PBD::ID, AutomationList*> automation_lists;
2093 
2095  std::map<PBD::ID, std::string> _diskstreams_2X;
2096 
2097  /* DEFAULT FADE CURVES */
2098 
2101 
2102  /* AUDITIONING */
2103 
2104  std::shared_ptr<Auditioner> auditioner;
2105  void set_audition (std::shared_ptr<Region>);
2107  std::shared_ptr<Region> pending_audition_region;
2108 
2109  /* EXPORT */
2110 
2111  /* FLATTEN */
2112 
2114 
2115  /* INSERT AND SEND MANAGEMENT */
2116 
2117  boost::dynamic_bitset<uint32_t> send_bitset;
2118  boost::dynamic_bitset<uint32_t> surround_send_bitset;
2119  boost::dynamic_bitset<uint32_t> aux_send_bitset;
2120  boost::dynamic_bitset<uint32_t> return_bitset;
2121  boost::dynamic_bitset<uint32_t> insert_bitset;
2122 
2123  /* S/W RAID */
2124 
2126  uint32_t blocks;
2128  std::string path;
2129 
2131  : blocks (0)
2132  , blocks_unknown (true)
2133  {}
2134  };
2135 
2137  bool operator() (space_and_path a, space_and_path b) {
2138  if (a.blocks_unknown != b.blocks_unknown) {
2139  return !a.blocks_unknown;
2140  }
2141  return a.blocks > b.blocks;
2142  }
2143  };
2144 
2145  void setup_raid_path (std::string path);
2146 
2147  std::vector<space_and_path> session_dirs;
2148  std::vector<space_and_path>::iterator last_rr_session_dir;
2156 
2158 
2160 
2161  mutable std::atomic<int> _playback_load;
2162  mutable std::atomic<int> _capture_load;
2163 
2164  /* I/O bundles */
2165 
2168  int load_bundles (XMLNode const &);
2169 
2171 
2173 
2175 
2176  enum snapshot_t {
2179  SwitchToSnapshot
2180  };
2181 
2182  XMLNode& state (bool save_template,
2183  snapshot_t snapshot_type = NormalSave,
2184  bool for_archive = false,
2185  bool only_used_assets = false) const;
2186 
2187  XMLNode& get_state () const;
2188  int set_state (const XMLNode& node, int version); // not idempotent
2190 
2191  bool maybe_copy_midifile (snapshot_t, std::shared_ptr<Source> src, XMLNode*);
2192 
2193  void collect_sources_of_this_snapshot (std::set<std::shared_ptr<Source>>&, bool incl_unused = true) const;
2194 
2195  /* click track */
2196  typedef std::list<Click*> Clicks;
2200  std::shared_ptr<IO> _click_io;
2201  std::shared_ptr<Amp> _click_gain;
2210 
2211  static const Sample default_click[];
2213  static const Sample default_click_emphasis[];
2215 
2219  void setup_click_sounds (int which);
2220  void setup_click_sounds (Sample**, Sample const *, samplecnt_t*, samplecnt_t, std::string const &);
2221  void clear_clicks ();
2224  void add_click (samplepos_t pos, bool emphasis);
2226 
2227  /* range playback */
2228 
2229  std::list<TimelineRange> current_audio_range;
2231  void set_play_range (std::list<TimelineRange>&, bool leave_rolling);
2233 
2234  /* temporary hacks to allow selection to be pushed from GUI into backend
2235  Whenever we move the selection object into libardour, these will go away.
2236  */
2239 
2241 
2244 
2245  /* main outs */
2246  uint32_t main_outs;
2247 
2248  std::shared_ptr<Route> _master_out;
2249  std::shared_ptr<Route> _monitor_out;
2250  std::shared_ptr<Route> _surround_master;
2251 
2252  friend class PortManager;
2256  void auto_connect_io (std::shared_ptr<IO>);
2257 
2258  void setup_route_monitor_sends (bool enable, bool need_process_lock);
2259  void setup_route_surround_sends (bool enable, bool need_process_lock);
2260 
2261  int find_all_sources (std::string path, std::set<std::string>& result);
2262  int find_all_sources_across_snapshots (std::set<std::string>& result, bool exclude_this_snapshot);
2263 
2264  typedef std::set<std::shared_ptr<PBD::Controllable> > Controllables;
2267 
2268  std::shared_ptr<PBD::Controllable> _solo_cut_control;
2269 
2270  void controllable_touched (std::weak_ptr<PBD::Controllable>);
2271  std::weak_ptr<PBD::Controllable> _recently_touched_controllable;
2272 
2276 
2277  void config_changed (std::string, bool);
2278 
2280 
2281  void set_history_depth (uint32_t depth);
2282 
2285 
2286  mutable bool have_looped;
2287 
2289 
2291  std::atomic<int> _have_rec_enabled_track;
2292  std::atomic<int> _have_rec_disabled_track;
2293 
2294  static int ask_about_playlist_deletion (std::shared_ptr<Playlist>);
2295 
2296  /* realtime "apply to set of routes" operations */
2297  template<typename T> SessionEvent*
2298  get_rt_event (std::shared_ptr<RouteList const> rl, T targ, SessionEvent::RTeventCallback after, PBD::Controllable::GroupControlDisposition group_override,
2299  void (Session::*method) (std::shared_ptr<RouteList const>, T, PBD::Controllable::GroupControlDisposition)) {
2301  ev->rt_slot = std::bind (method, this, rl, targ, group_override);
2302  ev->rt_return = after;
2304 
2305  return ev;
2306  }
2307 
2308  /* specialized version realtime "apply to set of routes" operations */
2309  template<typename T1, typename T2> SessionEvent*
2310  get_rt_event (std::shared_ptr<RouteList const> rl, T1 t1arg, T2 t2arg, SessionEvent::RTeventCallback after, PBD::Controllable::GroupControlDisposition group_override,
2311  void (Session::*method) (std::shared_ptr<RouteList const>, T1, T2, PBD::Controllable::GroupControlDisposition)) {
2313  ev->rt_slot = std::bind (method, this, rl, t1arg, t2arg, group_override);
2314  ev->rt_return = after;
2316 
2317  return ev;
2318  }
2319 
2320  /* specialized version realtime "apply to set of controls" operations */
2321  SessionEvent* get_rt_event (std::shared_ptr<WeakAutomationControlList> cl, double arg, PBD::Controllable::GroupControlDisposition group_override) {
2323  ev->rt_slot = std::bind (&Session::rt_set_controls, this, cl, arg, group_override);
2326 
2327  return ev;
2328  }
2329 
2330  void rt_set_controls (std::shared_ptr<WeakAutomationControlList>, double val, PBD::Controllable::GroupControlDisposition group_override);
2331  void rt_clear_all_solo_state (std::shared_ptr<RouteList const>, bool yn, PBD::Controllable::GroupControlDisposition group_override);
2332 
2334 
2336  uint32_t _step_editors;
2337 
2339  mutable std::atomic<int> _suspend_timecode_transmission;
2340 
2343 
2346 
2347  std::shared_ptr<Speakers> _speakers;
2348  void load_nested_sources (const XMLNode& node);
2349 
2354 
2355  friend class IOPlug;
2356  std::shared_ptr<Graph> _process_graph;
2357  std::shared_ptr<GraphChain> _graph_chain;
2358  std::shared_ptr<GraphChain> _io_graph_chain[2];
2359 
2360  void resort_routes_using (std::shared_ptr<RouteList>);
2362 
2365 
2367 
2371 
2373 
2374  std::shared_ptr<Port> _ltc_output_port;
2375 
2376  std::shared_ptr<RTTaskList> _rt_tasklist;
2377  std::shared_ptr<IOTaskList> _io_tasklist;
2378 
2379  /* Scene Changing */
2381 
2382  /* persistent, non-track related MIDI ports */
2385 
2386  void setup_ltc ();
2387  void setup_click ();
2389  void setup_bundles ();
2391 
2394 
2395  void save_as_bring_callback (uint32_t, uint32_t, std::string);
2396 
2397  static const uint32_t session_end_shift;
2398 
2399  std::string _template_state_dir;
2400 
2402 
2403  std::shared_ptr<Route> get_midi_nth_route_by_id (PresentationInfo::order_t n) const;
2404 
2405  std::string created_with;
2406  mutable std::string modified_with;
2407 
2408  void midi_track_presentation_info_changed (PBD::PropertyChange const &, std::weak_ptr<MidiTrack>);
2409  void rewire_selected_midi (std::shared_ptr<MidiTrack>);
2411  void disconnect_port_for_rewire (std::string const& port) const;
2412  std::weak_ptr<MidiTrack> current_midi_target;
2413 
2414  StripableList _soloSelection; //the items that are soloe'd during a solo-selection operation; need to unsolo after the roll
2415 
2417 
2419  std::optional<samplepos_t> _nominal_jack_transport_sample;
2420 
2422 
2423  std::string unnamed_file_name () const;
2424 
2425  std::atomic<int> _update_pretty_names;
2426 
2429 
2431  bool operator() (CueEvent const & c, samplepos_t s) {
2432  return c.time < s;
2433  }
2434  };
2435 
2437  void sync_cues ();
2439 
2440  std::atomic<int32_t> _pending_cue;
2441  std::atomic<int32_t> _active_cue;
2444 
2446  void handle_slots_empty_status (std::weak_ptr<Route> const &);
2447 
2449 
2451 };
2452 
2453 
2454 } // namespace ARDOUR
2455 
static const ChanCount ZERO
Definition: chan_count.h:208
std::list< Location * > LocationList
Definition: location.h:252
static const Flag MixerStripables
static const Flag MixerRoutes
std::function< void(SessionEvent *)> RTeventCallback
RTeventCallback rt_return
std::function< void(void)> rt_slot
static const samplepos_t Immediate
PBD::EventLoop * event_loop
virtual ~SessionException()
Definition: session.h:199
std::string _message
Definition: session.h:204
SessionException(const std::string msg)
Definition: session.h:198
virtual const char * what() const
Definition: session.h:201
ProcessorChangeBlocker(Session *s, bool rc=true)
void process_without_events(pframes_t)
void add_internal_sends(std::shared_ptr< Route > dest, Placement p, std::shared_ptr< RouteList > senders)
int send_midi_time_code_for_cycle(samplepos_t, samplepos_t, pframes_t nframes)
std::string created_with
Definition: session.h:2405
PBD::Signal< void(RouteList &)> RouteAdded
Definition: session.h:467
void clear_all_solo_state(std::shared_ptr< RouteList const >)
void mark_surround_send_id(uint32_t)
luabridge::LuaRef * _lua_load
Definition: session.h:1678
std::shared_ptr< Route > route_by_name(std::string) const
int load_regions(const XMLNode &node)
std::shared_ptr< Auditioner > the_auditioner()
Definition: session.h:990
void emit_thread_start()
std::shared_ptr< Stripable > get_remote_nth_stripable(PresentationInfo::order_t n, PresentationInfo::Flag) const
int next_quarter_frame_to_send
Definition: session.h:1868
std::map< PBD::ID, std::shared_ptr< Source > > SourceMap
Definition: session.h:2062
SceneChanger * scene_changer() const
Definition: session.h:1339
std::atomic< int > _ignore_route_processor_changes
Definition: session.h:2369
const std::unique_ptr< SessionDirectory > _session_dir
Definition: session.h:1632
std::shared_ptr< IOTaskList > io_tasklist()
Definition: session.h:341
bool follow_transport_master(pframes_t nframes)
void step_back_from_record()
PBD::ScopedConnectionList loop_connections
Definition: session.h:1726
boost::dynamic_bitset< uint32_t > aux_send_bitset
Definition: session.h:2119
std::shared_ptr< Route > master_out() const
Definition: session.h:1076
bool loop_is_possible() const
void add_surround_master()
std::queue< AutoConnectRequest > AutoConnectQueue
Definition: session.h:1815
std::shared_ptr< Bundle > bundle_by_name(std::string) const
static std::vector< std::string > possible_states(std::string path)
void setup_route_surround_sends(bool enable, bool need_process_lock)
void realtime_locate(bool)
PBD::UndoHistory & history()
Definition: session.h:1148
void last_capture_sources(std::list< std::shared_ptr< Source > > &) const
samplecnt_t preroll_samples(samplepos_t) const
PBD::Signal< void(bool)> SoloActive
Definition: session.h:1059
bool _rt_emit_pending
Definition: session.h:1774
void remove_surround_master()
float default_fade_msecs
Definition: session.h:2100
samplecnt_t _worst_route_latency
Definition: session.h:1486
void click(samplepos_t start, samplecnt_t nframes)
void auto_punch_changed(Location *)
void send_ltc_for_cycle(samplepos_t, samplepos_t, pframes_t)
void sync_source_changed(SyncSource, samplepos_t pos, pframes_t cycle_nframes)
void stop_transport(bool abort=false, bool clear_state=false)
void end_unnamed_status() const
void timecode_duration_string(char *, size_t len, samplecnt_t) const
bool solo_isolated() const
Definition: session.h:1041
void audition_playlist()
pan_t ** pan_automation_buffer() const
void process(pframes_t nframes)
TriggerPtr trigger_at(int32_t route_index, int32_t row_index) const
PBD::UUID _uuid
Definition: session.h:1619
bool empty() const
void unset_play_loop(bool change_transport_state=false)
CoreSelection * _selection
Definition: session.h:2416
std::map< PBD::ID, std::string > _diskstreams_2X
Definition: session.h:2095
std::shared_ptr< Graph > _process_graph
Definition: session.h:2356
void set_session_extents(timepos_t const &start, timepos_t const &end)
bool import_sndfile_as_region(std::string path, SrcQuality quality, timepos_t &pos, SourceList &sources, ImportStatus &status, uint32_t current, uint32_t total)
samplecnt_t _remaining_latency_preroll
Definition: session.h:1474
XMLNode * instant_xml(const std::string &str)
samplecnt_t remaining_latency_preroll() const
Definition: session.h:841
void maybe_find_pending_cue()
PBD::Mutex controllables_lock
Definition: session.h:2265
void load_io_plugin(std::shared_ptr< IOPlug >)
int restore_state(std::string snapshot_name)
std::shared_ptr< TransportMaster > transport_master() const
void try_run_lua(pframes_t)
void resort_io_plugs()
XMLNode & get_sources_as_xml()
bool _ignore_skips_updates
Definition: session.h:1719
void mark_aux_send_id(uint32_t)
uint64_t _total_free_4k_blocks
Definition: session.h:2149
double timecode_frames_per_second() const
void set_owned_port_public_latency(bool playback)
int fail_roll(pframes_t nframes)
bool in_cleanup() const
Definition: session.h:261
void request_default_play_speed(double speed, TransportRequestSource origin=TRS_UI)
void run_click(samplepos_t start, samplecnt_t nframes)
bool no_questions_about_missing_files
Definition: session.h:2157
int32_t first_cue_within(samplepos_t s, samplepos_t e, bool &was_recorded)
std::atomic< int > _update_pretty_names
Definition: session.h:2425
PBD::Signal< void()> DirtyChanged
Definition: session.h:268
PBD::Signal< void(samplepos_t)> Xrun
Definition: session.h:461
void request_transport_speed_nonzero(double, TransportRequestSource origin=TRS_UI)
std::string raid_path() const
Location * _session_range_location
session range, or 0 if there is nothing in the session yet
Definition: session.h:1471
void follow_playhead_priority()
void request_stop(bool abort=false, bool clear_state=false, TransportRequestSource origin=TRS_UI)
double samples_per_timecode_frame() const
Definition: session.h:547
bool step_editing() const
Definition: session.h:1291
void auto_loop_changed(Location *)
static unsigned int name_id_counter()
Locations * locations()
Definition: session.h:559
void reset_write_sources(bool mark_write_complete)
static PBD::Signal< void(samplepos_t)> StartTimeChanged
Definition: session.h:869
static PBD::Signal< void(std::string, std::string)> VersionMismatch
Definition: session.h:1337
BufferSet & get_mix_buffers(ChanCount count=ChanCount::ZERO)
CueEvents const & cue_events() const
Definition: session.h:1402
int load_state(std::string snapshot_name, bool from_template=false)
void finalize_export_internal(bool stop_freewheel)
void use_rf_shuttle_speed()
bool auto_play_legal
Definition: session.h:1481
bool plot_process_graph(std::string const &file_name) const
std::shared_ptr< MidiSource > midi_source_by_path(const std::string &, bool need_source_lock) const
std::list< Click * > Clicks
Definition: session.h:2196
std::string new_audio_source_path(const std::string &, uint32_t nchans, uint32_t chan, bool take_required)
void mtc_tx_resync_latency(bool)
bool transport_stopped() const
void non_realtime_set_speed()
pframes_t get_block_size() const
Definition: session.h:571
void auto_connect(const AutoConnectRequest &)
bool select_playhead_priority_target(samplepos_t &)
BufferSet & get_silent_buffers(ChanCount count=ChanCount::ZERO)
void toggle_all_tracks_record_enabled()
std::shared_ptr< Route > _monitor_out
Definition: session.h:2249
void remove_dir_from_search_path(const std::string &path, DataType type)
bool _region_export
Definition: session.h:1594
std::shared_ptr< Source > source_by_id(const PBD::ID &)
std::shared_ptr< Route > XMLRouteFactory(const XMLNode &, int)
bool ltc_timecode_negative_offset
Definition: session.h:1900
void undo(uint32_t n)
samplecnt_t worst_output_latency() const
Definition: session.h:572
SceneChanger * _scene_changer
Definition: session.h:2380
void add_internal_send(std::shared_ptr< Route >, int, std::shared_ptr< Route >)
void cleanup_event(SessionEvent *, int)
uint32_t next_insert_id()
PBD::RWLock _click_lock
Definition: session.h:2206
void request_roll_at_and_return(samplepos_t start, samplepos_t return_to)
void step_edit_status_change(bool)
bool new_audio_routes_tracks_bulk(RouteList &routes, AudioTrackList &tracks, int input_channels, int output_channels, std::shared_ptr< RouteGroup > route_group, uint32_t how_many, std::string name_template, PresentationInfo::order_t order, TrackMode mode=Normal, bool input_auto_connect=true, bool trigger_visibility=false)
PBD::ScopedConnectionList ltc_tx_connections
Definition: session.h:1911
void set_snapshot_name(const std::string &)
PBD::Mutex source_lock
Definition: session.h:2054
std::atomic< int > _current_usecs_per_track
Definition: session.h:1940
static const samplecnt_t default_click_emphasis_length
Definition: session.h:2214
RouteGroupList const & route_groups() const
Definition: session.h:771
void mmc_record_strobe(MIDI::MachineControl &)
bool have_last_capture_sources() const
void set_transport_speed(double speed)
void trigger_cue_row(int32_t)
bool _route_deletion_in_progress
Definition: session.h:1985
samplecnt_t sample_rate() const
Definition: session.h:542
bool export_route_state(std::shared_ptr< RouteList > rl, const std::string &path, bool with_sources)
bool maybe_sync_start(pframes_t &)
void maybe_write_autosave()
void disable_record(bool rt_context, bool force=false)
int stop_audio_export()
PBD::Signal< void()> SoloChanged
Definition: session.h:1060
static intptr_t vst_callback(AEffect *effect, int32_t opcode, int32_t index, intptr_t value, void *ptr, float opt)
bool record_enabling_legal() const
int freeze_all(InterThreadInfo &)
uint32_t next_aux_send_id()
bool audio_source_name_is_unique(const std::string &name)
void setup_click_sounds(Sample **, Sample const *, samplecnt_t *, samplecnt_t, std::string const &)
bool exporting() const
Definition: session.h:1255
void set_worst_input_latency()
void pre_engine_init(std::string path)
int64_t _last_mmc_step
Definition: session.h:1853
bool _had_destructive_tracks
Definition: session.h:2421
process_function_type process_function
Definition: session.h:1462
static const samplecnt_t bounce_chunk_size
Definition: session.h:1545
void update_route_record_state()
int import_route_state(const std::string &path, std::map< PBD::ID, PBD::ID > const &, RouteGroupImportMode rgim=CreateRouteGroup, PBD::Progress *p=0)
void process_audition(pframes_t)
PBD::Signal< void()> LuaScriptsChanged
Definition: session.h:1005
int load_bundles(XMLNode const &)
const SessionDirectory & session_directory() const
Definition: session.h:270
void setup_route_monitor_sends(bool enable, bool need_process_lock)
std::map< PBD::ID, AutomationList * > automation_lists
Definition: session.h:2092
void import_pt_sources(PTFFormat &ptf, ImportStatus &status)
void process_export_fw(pframes_t)
void unregister_lua_function(const std::string &name)
void controllable_touched(std::weak_ptr< PBD::Controllable >)
PBD::Signal< void(std::shared_ptr< RouteGroup >, std::weak_ptr< Route >)> RouteRemovedFromRouteGroup
Definition: session.h:483
std::shared_ptr< AudioFileSource > create_audio_source_for_session(size_t, std::string const &, uint32_t)
TransportFSM * _transport_fsm
Definition: session.h:1694
bool nth_mixer_scene_valid(size_t) const
ltcsnd_sample_t * ltc_enc_buf
Definition: session.h:1885
PBD::Signal< void()> BundleAddedOrRemoved
Definition: session.h:1133
void reconnect_mmc_ports(bool)
uint32_t ntracks() const
std::string next_undo() const
Definition: session.h:1152
double default_play_speed()
int load_options(const XMLNode &)
std::set< std::shared_ptr< PBD::Controllable > > Controllables
Definition: session.h:2264
void remove_bundle(std::shared_ptr< Bundle >)
bool non_realtime_work_pending() const
Definition: session.h:1918
Temporal::Range _range_selection
Definition: session.h:2237
void request_suspend_timecode_transmission()
int process_routes(pframes_t, bool &need_butler)
void add_routes(RouteList &, bool input_auto_connect, bool output_auto_connect, PresentationInfo::order_t)
std::string _missing_file_replacement
Definition: session.h:1503
samplepos_t master_wait_end
Definition: session.h:1555
void send_mclk_for_cycle(samplepos_t, samplepos_t, pframes_t, samplecnt_t)
bool _total_free_4k_blocks_uncertain
Definition: session.h:2154
double _samples_per_timecode_frame
Definition: session.h:1870
uint32_t _n_lua_scripts
Definition: session.h:1681
MIDI::MachineControl & mmc()
Definition: session.h:1357
void mmc_deferred_play(MIDI::MachineControl &)
samplepos_t last_loopend
Definition: session.h:1630
void auto_punch_end_changed(Location *)
Timecode::Time last_timecode
Definition: session.h:1878
MidiClockTicker * midi_clock
Definition: session.h:2372
TransportMasterStrategy transport_master_strategy
Definition: session.h:1579
void non_realtime_stop(bool abort, int entry_request_count, bool &finished, bool will_locate)
std::shared_ptr< Auditioner > auditioner
Definition: session.h:2104
std::shared_ptr< MidiPort > midi_clock_output_port() const
void set_range_selection(Temporal::timepos_t const &start, Temporal::timepos_t const &end)
std::shared_ptr< RTTaskList > _rt_tasklist
Definition: session.h:2376
bool inital_connect_or_deletion_in_progress() const
Definition: session.h:262
std::string get_best_session_directory_for_new_audio()
void locate(samplepos_t, bool for_loop_end=false, bool force=false, bool with_mmc=true)
std::string _name
Definition: session.h:1621
bool transport_rolling() const
bool timecode_transmission_suspended() const
timepos_t current_start() const
std::shared_ptr< Route > route_by_selected_count(uint32_t cnt) const
double _engine_speed
Definition: session.h:1478
PBD::Signal< void()> SurroundMasterAddedOrRemoved
Definition: session.h:1065
void butler_completed_transport_work()
void load_and_connect_instruments(RouteList &, bool strict_io, std::shared_ptr< PluginInfo > instrument, Plugin::PresetRecord *pset, ChanCount &existing_outputs)
bool compute_audible_delta(samplepos_t &pos_and_delta) const
bool declick_in_progress() const
void request_roll(TransportRequestSource origin=TRS_UI)
static void set_disable_all_loaded_plugins(bool yn)
Definition: session.h:1091
bool _solo_change_in_progress
Definition: session.h:2023
void midi_output_change_handler(IOChange change, std::weak_ptr< Route > midi_track)
bool writable() const
Definition: session.h:247
bool maybe_stop(samplepos_t limit)
MidiControlUI * midi_control_ui
Definition: session.h:1921
samplepos_t _last_record_location
Definition: session.h:1662
std::shared_ptr< Region > XMLRegionFactory(const XMLNode &, bool full)
std::optional< samplepos_t > const & nominal_jack_transport_sample()
Definition: session.h:838
PBD::Signal< void()> PunchLoopConstraintChange
Definition: session.h:898
PBD::Signal< void()> MtcOrLtcInputPortChanged
Definition: session.h:493
std::shared_ptr< RouteList > get_routes_with_regions_at(timepos_t const &) const
@ TransportMasterLocate
Definition: session.h:1560
@ TransportMasterRelax
Definition: session.h:1558
@ TransportMasterNoRoll
Definition: session.h:1559
@ TransportMasterStart
Definition: session.h:1561
PBD::Mutex save_state_lock
Definition: session.h:1651
void rt_clear_all_solo_state(std::shared_ptr< RouteList const >, bool yn, PBD::Controllable::GroupControlDisposition group_override)
std::shared_ptr< RouteList > get_routes_with_internal_returns() const
std::string format_audio_source_name(const std::string &legalized_base, uint32_t nchan, uint32_t chan, bool take_required, uint32_t cnt, bool related_exists)
static std::string default_track_name_pattern(DataType)
bool routes_deletion_in_progress() const
Definition: session.h:255
void update_send_delaylines()
int bring_all_sources_into_session(std::function< void(uint32_t, uint32_t, std::string)> callback)
bool io_name_is_legal(const std::string &) const
samplepos_t _transport_sample
Definition: session.h:1468
PBD::Signal< void()> RecordPassCompleted
Definition: session.h:443
std::shared_ptr< MidiSource > create_midi_source_for_session(std::string const &)
void non_realtime_overwrite(int entry_request_count, bool &finished, bool reset_loop_declicks)
std::shared_ptr< RTTaskList > rt_tasklist()
Definition: session.h:340
XMLTree * state_tree
Definition: session.h:1642
std::string plugins_dir() const
Plugin state.
bool apply_nth_mixer_scene(size_t)
std::shared_ptr< ARDOUR::Trigger > trigger_by_id(PBD::ID) const
float default_fade_steepness
Definition: session.h:2099
void session_loaded()
std::list< TimelineRange > current_audio_range
Definition: session.h:2229
void remove_pending_capture_state()
AnyTime global_quantization() const
Definition: session.h:1416
void process_export(pframes_t)
bool listening() const
int save_history(std::string snapshot_name="")
void ensure_buffers(ChanCount howmany=ChanCount::ZERO)
void mmc_locate(MIDI::MachineControl &, const MIDI::byte *)
PBD::Mutex _auto_connect_queue_lock
Definition: session.h:1816
void mmc_pause(MIDI::MachineControl &)
bool pending_auto_loop
Definition: session.h:1665
std::shared_ptr< SessionPlaylists > _playlists
Definition: session.h:1453
std::shared_ptr< AsyncMIDIPort > vkbd_output_port() const
std::shared_ptr< IOPlug > nth_io_plug(uint32_t n)
Definition: session.h:1013
void route_solo_changed(bool self_solo_change, PBD::Controllable::GroupControlDisposition group_override, std::weak_ptr< Route >)
samplecnt_t _count_in_samples
Definition: session.h:2218
samplecnt_t calc_preroll_subcycle(samplecnt_t) const
bool first_file_data_format_reset
Definition: session.h:2274
void sample_to_timecode(samplepos_t sample, Timecode::Time &timecode, bool use_offset, bool use_subframes) const
void resort_routes_using(std::shared_ptr< RouteList >)
void set_worst_output_latency()
void clear_cue(int row_index)
PBD::Signal< void()> SessionLoaded
Definition: session.h:447
double compute_speed_from_master(pframes_t nframes)
std::optional< samplecnt_t > available_capture_duration()
std::string build_tmp_convert_name(std::string file)
MIDI::byte get_mtc_timecode_bits() const
Definition: session.h:550
double plan_master_strategy_engine(pframes_t nframes, double master_speed, samplepos_t master_transport_sample, double catch_speed)
std::atomic< unsigned int > _latency_recompute_pending
Definition: session.h:1818
std::shared_ptr< Route > XMLRouteFactory_2X(const XMLNode &, int)
void unset_preroll_record_trim()
void get_track_statistics()
bool request_locate_to_mark(std::string const &, LocateTransportDisposition ltd=RollIfAppropriate, TransportRequestSource origin=TRS_UI)
bool should_roll_after_locate() const
RecordState record_status() const
Definition: session.h:409
static const samplecnt_t default_click_length
Definition: session.h:2212
std::shared_ptr< ExportStatus > get_export_status()
PBD::Signal< void(bool)> StepEditStatusChange
Definition: session.h:490
void rewire_selected_midi(std::shared_ptr< MidiTrack >)
void collect_sources_of_this_snapshot(std::set< std::shared_ptr< Source >> &, bool incl_unused=true) const
void set_exclusive_input_active(std::shared_ptr< RouteList > rt, bool onoff, bool flip_others=false)
samplepos_t _requested_return_sample
Definition: session.h:1482
int tb_with_filled_slots
Definition: session.h:2445
std::weak_ptr< MidiTrack > current_midi_target
Definition: session.h:2412
RouteGroupList _route_groups
Definition: session.h:1975
int32_t ltc_buf_len
Definition: session.h:1889
SessionEvent * get_rt_event(std::shared_ptr< RouteList const > rl, T1 t1arg, T2 t2arg, SessionEvent::RTeventCallback after, PBD::Controllable::GroupControlDisposition group_override, void(Session::*method)(std::shared_ptr< RouteList const >, T1, T2, PBD::Controllable::GroupControlDisposition))
Definition: session.h:2310
void route_added_to_route_group(std::shared_ptr< RouteGroup >, std::weak_ptr< Route >)
void globally_set_send_gains_to_unity(std::shared_ptr< Route > dest)
PBD::ScopedConnectionList punch_connections
Definition: session.h:1721
void add_automation_list(AutomationList *)
void set_deletion_in_progress()
void playlist_ranges_moved(std::list< Temporal::RangeMove > const &)
void globally_set_send_gains_to_zero(std::shared_ptr< Route > dest)
void end_time_changed(samplepos_t)
bool have_looped
Used in audible_sample.
Definition: session.h:2286
bool _rt_thread_active
Definition: session.h:1770
static void init_name_id_counter(unsigned int n)
void reset_native_file_format()
bool _update_send_delaylines
Definition: session.h:1489
void ltc_tx_resync_latency(bool)
Timecode::Time transmitting_timecode_time
Definition: session.h:1867
void maybe_enable_record(bool rt_context=false)
samplepos_t audible_sample(bool *latent_locate=NULL) const
void scripts_changed()
double actual_speed() const
int32_t ltc_buf_off
Definition: session.h:1888
void queue_event(SessionEvent *)
boost::dynamic_bitset< uint32_t > insert_bitset
Definition: session.h:2121
PBD::Signal< void()> RecordStateChanged
Definition: session.h:435
void remove_playlist(std::weak_ptr< Playlist >)
bool _reconnecting_routes_in_progress
Definition: session.h:1984
std::shared_ptr< PBD::Controllable > recently_touched_controllable() const
static PBD::Signal< void(samplepos_t)> EndTimeChanged
Definition: session.h:870
std::shared_ptr< Amp > _click_gain
Definition: session.h:2201
samplecnt_t worst_input_latency() const
Definition: session.h:573
bool locate_initiated() const
void request_bounded_roll(samplepos_t start, samplepos_t end)
void redo(uint32_t n)
bool _have_captured
Definition: session.h:1490
void send_song_position_pointer(samplepos_t)
samplecnt_t nominal_sample_rate() const
Definition: session.h:544
std::string externals_dir() const
Links to external files.
int archive_session(const std::string &, const std::string &, ArchiveEncode compress_audio=FLAC_16BIT, PBD::FileArchive::CompressionLevel compression_level=PBD::FileArchive::CompressGood, bool only_used_sources=false, PBD::Progress *p=0)
void set_history_depth(uint32_t depth)
bool transport_state_rolling() const
void cut_copy_section(Temporal::timepos_t const &start, Temporal::timepos_t const &end, Temporal::timepos_t const &to, SectionOperation const op)
double _signalled_varispeed
Definition: session.h:1479
std::atomic< int > _playback_load
Definition: session.h:2161
void load_nested_sources(const XMLNode &node)
uint32_t undo_depth() const
Definition: session.h:1150
std::string path() const
Definition: session.h:241
void request_transport_speed(double speed, TransportRequestSource origin=TRS_UI)
luabridge::LuaRef * _lua_cleanup
Definition: session.h:1680
std::shared_ptr< Port > ltc_output_port() const
Definition: session.h:1355
PBD::Signal< void(std::shared_ptr< RouteGroup >)> RouteGroupPropertyChanged
Definition: session.h:475
void mmc_rewind(MIDI::MachineControl &)
bool processing_blocked() const
Definition: session.h:1543
pthread_cond_t _rt_emit_cond
Definition: session.h:1773
void playlist_region_added(std::weak_ptr< Region >)
static PBD::Signal< void()> AfterConnect
Definition: session.h:970
samplecnt_t _capture_duration
Definition: session.h:1491
int post_engine_init()
std::atomic< int > _have_rec_enabled_track
Definition: session.h:2291
void save_snapshot_name(const std::string &)
void register_lua_function(const std::string &, const std::string &, const LuaScriptParamList &)
void send_mmc_locate(samplepos_t)
boost::dynamic_bitset< uint32_t > surround_send_bitset
Definition: session.h:2118
bool cannot_save() const
Definition: session.h:260
samplepos_t current_end_sample() const
void add_bundle(std::shared_ptr< Bundle >, bool emit_signal=true)
void set_audition(std::shared_ptr< Region >)
bool _non_soloed_outs_muted
Definition: session.h:1494
SessionConfiguration config
Definition: session.h:1251
std::shared_ptr< TriggerBox > triggerbox_at(int32_t route_index) const
bool need_declick_before_locate() const
void force_locate(samplepos_t sample, LocateTransportDisposition)
void enable_record()
void route_group_property_changed(std::weak_ptr< RouteGroup >)
static PBD::Signal< int()> AskAboutPendingState
Definition: session.h:963
bool is_auditioning() const
int rename(const std::string &)
PBD::Signal< void()> QuantizationChanged
Definition: session.h:1418
void setup_engine_resampling()
void clear_deletion_in_progress()
void setup_thread_local_variables()
std::shared_ptr< IOPlugList const > io_plugs() const
Definition: session.h:1021
PBD::Signal< void()> IOConnectionsComplete
Definition: session.h:431
bool transport_master_no_external_or_using_engine() const
unsigned int _capture_xruns
Definition: session.h:1492
luabridge::LuaRef * _lua_add
Definition: session.h:1675
void store_nth_mixer_scene(size_t)
void trigger_stop_all(bool now=true)
void request_cancel_play_range()
void update_latency(bool playback)
void send_latency_compensation_change()
bool last_timecode_valid
Definition: session.h:1876
void ensure_route_presentation_info_gap(PresentationInfo::order_t, uint32_t gap_size)
std::shared_ptr< Route > route_by_id(PBD::ID) const
Sample * click_data
Definition: session.h:2202
std::string new_midi_source_path(const std::string &, bool need_source_lock=true)
void auto_connect_monitor_bus()
std::atomic< int32_t > _pending_cue
Definition: session.h:2440
void initialize_latencies()
bool _click_rec_only
Definition: session.h:2199
samplecnt_t capture_duration() const
Definition: session.h:325
int create(const std::string &mix_template, BusProfile const *, bool unnamed)
void mark_insert_id(uint32_t)
void emit_thread_terminate()
PBD::Signal< void()> MuteChanged
Definition: session.h:1061
bool loop_changing
Definition: session.h:1629
pframes_t _pframes_since_last_mtc
Definition: session.h:1627
std::shared_ptr< PBD::Controllable > solo_cut_control() const
std::list< std::string > missing_filesources(DataType) const
void consolidate_skips(Location *)
int cleanup_peakfiles()
bool rechain_ioplug_graph(bool)
PBD::Signal< void(std::string)> StateSaved
Definition: session.h:653
void add_internal_send(std::shared_ptr< Route >, std::shared_ptr< Processor >, std::shared_ptr< Route >)
bool ensure_stripable_sort_order()
void solo_selection(StripableList &, bool)
static unsigned int next_name_id()
void probe_ctrl_surfaces()
void prepare_momentary_solo(SoloMuteRelease *smr=NULL, bool exclusive=false, std::shared_ptr< Route > route=std::shared_ptr< Route >())
double ltc_speed
Definition: session.h:1891
void _locations_changed(const Locations::LocationList &)
void auto_connect_thread_run()
boost::dynamic_bitset< uint32_t > return_bitset
Definition: session.h:2120
void setup_midi_control()
bool should_stop_before_locate() const
int silent_process_routes(pframes_t, bool &need_butler)
std::string snap_name() const
Definition: session.h:243
gain_t * gain_automation_buffer() const
void import_files(ImportStatus &)
void handle_slots_empty_status(std::weak_ptr< Route > const &)
std::shared_ptr< Amp > click_gain()
Definition: session.h:1166
void reset_record_status()
std::shared_ptr< Port > mmc_input_port() const
void unmark_surround_send_id(uint32_t)
bool get_play_range() const
Definition: session.h:1177
double ltc_enc_cnt
Definition: session.h:1894
BufferSet & get_noinplace_buffers(ChanCount count=ChanCount::ZERO)
bool loading() const
Definition: session.h:259
uint32_t _listen_cnt
Definition: session.h:1496
Controllables controllables
Definition: session.h:2266
XMLNode & get_control_protocol_state() const
bool timecode_drop_frames() const
void overwrite_some_buffers(std::shared_ptr< Route >, OverwriteReason)
void set_play_loop(bool yn, bool change_transport_state)
RouteList new_midi_route(std::shared_ptr< RouteGroup > route_group, uint32_t how_many, std::string name_template, bool strict_io, std::shared_ptr< PluginInfo > instrument, Plugin::PresetRecord *, PresentationInfo::Flag, PresentationInfo::order_t)
bool get_play_loop() const
Definition: session.h:506
std::atomic< int32_t > _active_cue
Definition: session.h:2441
void ltc_tx_parse_offset()
bool transport_will_roll_forwards() const
samplecnt_t _worst_input_latency
Definition: session.h:1485
void refresh_disk_space()
int midi_read(MIDI::Port *)
std::list< MidiTimeoutCallback > MidiTimeoutList
Definition: session.h:1857
PBD::Signal< void(bool)> AuditionActive
Definition: session.h:996
std::shared_ptr< MidiRegion > XMLMidiRegionFactory(const XMLNode &, bool full)
bool pending_abort
Definition: session.h:1664
static bool get_disable_all_loaded_plugins()
Definition: session.h:1094
void timecode_time_subframes(samplepos_t when, Timecode::Time &)
void time_domain_changed()
void location_added(Location *)
static int ask_about_playlist_deletion(std::shared_ptr< Playlist >)
void clear_range_selection()
void maybe_update_tempo_from_midiclock_tempo(float bpm)
PostTransportWork post_transport_work() const
Definition: session.h:1699
void ensure_buffers_unlocked(ChanCount howmany)
PBD::Signal< void(std::shared_ptr< RouteGroup >, std::weak_ptr< Route >)> RouteAddedToRouteGroup
Definition: session.h:479
std::string analysis_dir() const
Analysis data.
void set_sample_rate(samplecnt_t nframes)
void reset_xrun_count()
uint32_t next_send_id()
void ltc_tx_recalculate_position()
bool maybe_copy_midifile(snapshot_t, std::shared_ptr< Source > src, XMLNode *)
uint32_t naudiotracks() const
void queue_latency_recompute()
void foreach_route(void(Route::*method)())
bool should_ignore_transport_request(TransportRequestSource, TransportRequestType)
std::shared_ptr< PBD::Controllable > _solo_cut_control
Definition: session.h:2268
void ensure_search_path_includes(const std::string &path, DataType type)
std::shared_ptr< Port > trigger_input_port() const
void setup_bundles()
std::vector< std::string > get_paths_for_new_sources(bool allow_replacing, const std::string &import_file_path, uint32_t channels, std::vector< std::string > const &smf_track_names, bool use_smf_file_names)
bool mmc_step_timeout()
luabridge::LuaRef * _lua_del
Definition: session.h:1676
int num_triggerboxes() const
void remove_source(std::weak_ptr< Source >, bool drop_references=true)
void remove_monitor_section()
samplepos_t compute_stop_limit() const
int find_all_sources_across_snapshots(std::set< std::string > &result, bool exclude_this_snapshot)
void set_default_play_speed(double spd)
uint32_t count_sources_by_origin(const std::string &)
std::shared_ptr< Region > pending_audition_region
Definition: session.h:2107
bool _adding_routes_in_progress
Definition: session.h:1983
void non_realtime_locate()
samplecnt_t _timecode_frames_per_hour
Definition: session.h:1872
static int get_info_from_path(const std::string &xmlpath, float &sample_rate, SampleFormat &data_format, std::string &program_version, XMLNode *engine_hints=0)
VCAManager & vca_manager()
Definition: session.h:1364
volatile bool _save_queued_pending
Definition: session.h:1648
void start_time_changed(samplepos_t)
PBD::Signal< void()> Located
Definition: session.h:465
void reconnect_ltc_output()
void add_instant_xml(XMLNode &, bool write_to_config=true)
The instant xml file is written to the session directory.
std::shared_ptr< Processor > processor_by_id(PBD::ID) const
void set_play_range(std::list< TimelineRange > &, bool leave_rolling)
void schedule_butler_for_transport_work()
SourceMap sources
Definition: session.h:2076
void start_domain_bounce(Temporal::DomainBounceInfo &)
bool vapor_export_barrier()
double engine_speed() const
Definition: session.h:875
luabridge::LuaRef * _lua_list
Definition: session.h:1677
bool have_rec_disabled_track() const
void reset_punch_loop_constraint()
void reconnect_midi_scene_ports(bool)
std::string uuid() const
Definition: session.h:240
samplepos_t _clicks_cleared
Definition: session.h:2217
std::string unnamed_file_name() const
uint32_t registered_lua_function_count() const
Definition: session.h:1002
LatencyRange ltc_out_latency
Definition: session.h:1902
XMLNode & get_state() const
void set_had_destructive_tracks(bool yn)
std::shared_ptr< ExportStatus > export_status
Definition: session.h:1598
static PBD::Signal< void()> RouteTemplatesChanged
Definition: session.h:651
samplepos_t _last_roll_location
Definition: session.h:1659
void resort_routes()
bool had_destructive_tracks() const
void notify_presentation_info_change(PBD::PropertyChange const &)
std::shared_ptr< Route > _master_out
Definition: session.h:2248
void rt_set_controls(std::shared_ptr< WeakAutomationControlList >, double val, PBD::Controllable::GroupControlDisposition group_override)
std::shared_ptr< MidiPort > mtc_output_port() const
void route_solo_isolated_changed(std::weak_ptr< Route >)
void reset_last_capture_sources()
void adjust_capture_buffering()
void reorder_route_groups(RouteGroupList)
void unmark_aux_send_id(uint32_t)
void request_play_range(std::list< TimelineRange > *, bool leave_rolling=false)
void request_sync_source(std::shared_ptr< TransportMaster >)
PBD::Signal< void(int)> SurroundObjectCountChanged
Definition: session.h:427
bool _send_timecode_update
Flag to send a full sample (Timecode) MTC message this cycle.
Definition: session.h:1880
void engine_running()
VCAManager * _vca_manager
Definition: session.h:2401
void sync_locations_to_skips()
samplepos_t requested_return_sample() const
Definition: session.h:836
void add_routes_inner(RouteList &, bool input_auto_connect, bool output_auto_connect, PresentationInfo::order_t)
std::atomic< int > _ac_thread_active
Definition: session.h:1783
bool actively_recording() const
Definition: session.h:413
void set_requested_return_sample(samplepos_t return_to)
std::list< std::string > unknown_processors() const
timepos_t current_end() const
bool transport_locating() const
samplecnt_t worst_route_latency() const
Definition: session.h:574
samplecnt_t _current_sample_rate
Definition: session.h:1467
std::shared_ptr< PBD::Controllable > controllable_by_id(const PBD::ID &)
std::atomic< int > _ignored_a_processor_change
Definition: session.h:2370
std::shared_ptr< AudioFileSource > audio_source_by_path_and_channel(const std::string &, uint16_t) const
samplepos_t transport_sample() const
Definition: session.h:833
std::shared_ptr< Port > scene_input_port() const
unsigned int get_xrun_count() const
Definition: session.h:902
PBD::Signal< void()> route_group_removed
Definition: session.h:762
samplepos_t current_start_sample() const
void location_removed(Location *)
std::shared_ptr< Speakers > get_speakers()
int immediately_post_engine()
std::map< PBD::ID, PBD::StatefulDestructible * > registry
Definition: session.h:1156
void locations_changed()
luabridge::LuaRef * _lua_run
Definition: session.h:1674
bool _session_range_is_free
Definition: session.h:1472
samplecnt_t click_length
Definition: session.h:2204
size_t last_touched_mixer_scene_idx()
Definition: session.h:1246
void flush_all_inserts()
bool bang_trigger_at(int32_t route_index, int32_t row_index, float velocity=1.0)
void graph_reordered(bool called_from_backend)
bool _pre_export_mmc_enabled
Definition: session.h:1604
void remove_state(std::string snapshot_name)
unsigned int export_xruns() const
Definition: session.h:327
void set_global_quantization(AnyTime const &)
bool bounce_processing() const
Definition: session.h:1263
int flatten_one_track(AudioTrack &, samplepos_t start, samplecnt_t cnt)
void cleanup_regions()
SerializedRCUManager< BundleList > _bundles
Definition: session.h:2166
samplecnt_t any_duration_to_samples(samplepos_t position, AnyTime const &duration)
double plan_master_strategy(pframes_t nframes, double master_speed, samplepos_t master_transport_sample, double catch_speed)
PBD::Signal< void()> BatchUpdateEnd
Definition: session.h:275
uint32_t track_number_decimals() const
Definition: session.h:401
static bool _disable_all_loaded_plugins
Definition: session.h:2283
ARDOUR::CueMarkers pending_source_markers
Definition: session.h:2072
void route_listen_changed(PBD::Controllable::GroupControlDisposition, std::weak_ptr< Route >)
LuaState lua
Definition: session.h:1672
std::string automation_dir() const
Automation data.
boost::dynamic_bitset< uint32_t > send_bitset
Definition: session.h:2117
bool peaks_cleanup_in_progres() const
Definition: session.h:258
PBD::Signal< void()> session_routes_reconnected
Definition: session.h:1067
std::string new_audio_source_path_for_embedded(const std::string &existing_path)
Temporal::Range _object_selection
Definition: session.h:2238
void remove_routes(std::shared_ptr< RouteList >)
std::optional< bool > _vapor_available
Definition: session.h:1514
void add_post_transport_work(PostTransportWork ptw)
samplecnt_t preroll_record_trim_len() const
Definition: session.h:1187
void mark_return_id(uint32_t)
bool unload_io_plugin(std::shared_ptr< IOPlug >)
std::shared_ptr< Region > write_one_track(Track &, samplepos_t start, samplepos_t end, bool overwrite, std::vector< std::shared_ptr< Source > > &, InterThreadInfo &wot, std::shared_ptr< Processor > endpoint, bool include_endpoint, bool for_export, bool for_freeze, std::string const &source_name="", std::string const &region_name="")
static void set_bypass_all_loaded_plugins(bool yn)
Definition: session.h:1097
void realtime_stop(bool abort, bool clear_state)
SessionEvent * get_rt_event(std::shared_ptr< WeakAutomationControlList > cl, double arg, PBD::Controllable::GroupControlDisposition group_override)
Definition: session.h:2321
void reset_transport_speed(TransportRequestSource origin=TRS_UI)
samplecnt_t _preroll_record_trim_len
Definition: session.h:2242
bool roll_started_loop
Definition: session.h:2288
void route_mute_changed()
bool route_name_unique(std::string) const
ChanCount _required_thread_buffers
Definition: session.h:1530
void setup_click_sounds(int which)
void count_existing_track_channels(ChanCount &in, ChanCount &out)
double step_speed
Definition: session.h:1854
bool update_route_latency(bool reverse, bool apply_to_delayline, bool *delayline_update_needed)
gain_t * trim_automation_buffer() const
LTCEncoder * ltc_encoder
Definition: session.h:1884
PBD::Signal< void()> MonitorChanged
Definition: session.h:1063
void close_all_sources()
bool first_file_header_format_reset
Definition: session.h:2275
static const SessionEvent::RTeventCallback rt_cleanup
Definition: session.h:1050
void post_transport_motion()
static PBD::Signal< void()> Quit
Definition: session.h:1332
MIDI::byte mtc_timecode_bits
Definition: session.h:1864
PBD::Signal< void(bool)> LatencyUpdated
Definition: session.h:579
uint32_t nstripables(bool with_monitor=false) const
void port_registry_changed()
double transport_speed(bool incl_preroll=false) const
std::shared_ptr< Stripable > stripable_by_id(PBD::ID) const
void set_all_tracks_record_enabled(bool)
samplepos_t _export_preroll
Definition: session.h:1595
samplecnt_t _worst_output_latency
Definition: session.h:1484
void set_missing_file_replacement(const std::string &mfr)
Definition: session.h:1327
PBD::Signal< void()> ClearedLastCaptureSources
Definition: session.h:444
void engine_halted()
std::shared_ptr< Port > _ltc_output_port
Definition: session.h:2374
RouteList new_route_from_template(uint32_t how_many, PresentationInfo::order_t insert_at, const std::string &template_path, const std::string &name, PlaylistDisposition pd=NewPlaylist)
void finalize_audio_export(TransportRequestSource trs)
void set_track_loop(bool)
void cancel_all_solo()
void timecode_time(Timecode::Time &)
Sample * click_emphasis_data
Definition: session.h:2203
std::vector< std::shared_ptr< MixerScene > > _mixer_scenes
Definition: session.h:1689
void unset_dirty(bool emit_dirty_changed=false)
PBD::Mutex lua_lock
Definition: session.h:1673
pframes_t current_block_size
Definition: session.h:1483
uint32_t _track_number_decimals
Definition: session.h:2009
unsigned int capture_xruns() const
Definition: session.h:326
PBD::Signal< void()> IOPluginsChanged
Definition: session.h:1008
bool _send_qf_mtc
Definition: session.h:1623
bool reconnection_in_progress() const
Definition: session.h:254
static const uint32_t session_end_shift
Definition: session.h:2397
bool _count_in_once
Definition: session.h:2243
bool solo_selection_active()
void update_skips(Location *, bool consolidate)
PBD::Signal< void()> RecordArmStateChanged
Definition: session.h:439
bool _realtime_export
Definition: session.h:1593
PBD::Signal< void(Location *)> auto_punch_location_changed
Definition: session.h:562
int save_as(SaveAs &)
void auto_connect_io(std::shared_ptr< IO >)
void decrement_transport_position(samplecnt_t val)
Definition: session.h:1749
AudioEngine const & engine() const
Definition: session.h:827
bool _global_locate_pending
Definition: session.h:2418
PBD::Signal< void(std::shared_ptr< RouteGroup >)> route_group_added
Definition: session.h:761
void config_changed(std::string, bool)
CueEvents _cue_events
Definition: session.h:2436
PBD::Signal< void()> FBSendsChanged
Definition: session.h:487
PBD::Mutex save_source_lock
Definition: session.h:1652
void mmc_step(MIDI::MachineControl &, int)
void clear_object_selection()
void process_rtop(SessionEvent *)
std::atomic< int > _capture_load
Definition: session.h:2162
void set_control(std::shared_ptr< AutomationControl >, double val, PBD::Controllable::GroupControlDisposition)
void auto_punch_start_changed(Location *)
SessionEvent * get_rt_event(std::shared_ptr< RouteList const > rl, T targ, SessionEvent::RTeventCallback after, PBD::Controllable::GroupControlDisposition group_override, void(Session::*method)(std::shared_ptr< RouteList const >, T, PBD::Controllable::GroupControlDisposition))
Definition: session.h:2298
void set_post_transport_work(PostTransportWork ptw)
Definition: session.h:1700
PBD::Signal< void()> SessionSaveUnderway
Definition: session.h:669
std::shared_ptr< Port > scene_output_port() const
int cleanup_sources(CleanupReport &)
PBD::Signal< void()> IsolatedChanged
Definition: session.h:1062
XMLNode & get_template()
void foreach_source(std::function< void(std::shared_ptr< Source >)> f)
Definition: session.h:2064
std::atomic< PunchLoopLock > _punch_or_loop
Definition: session.h:1939
static int parse_stateful_loading_version(const std::string &)
AudioEngine & _engine
Definition: session.h:1461
PBD::Signal< void()> locations_modified
Definition: session.h:563
PBD::Signal< void(samplepos_t)> PositionChanged
Definition: session.h:460
bool _was_seamless
Definition: session.h:1499
PBD::Mutex peak_cleanup_lock
Definition: session.h:1653
process_function_type last_process_function
Definition: session.h:1463
Clicks clicks
Definition: session.h:2197
Butler * _butler
Definition: session.h:1692
PBD::Signal< void(Location *)> auto_loop_location_changed
Definition: session.h:561
std::shared_ptr< IOTaskList > _io_tasklist
Definition: session.h:2377
SessionConfiguration * cfg()
Definition: session.h:1253
PBD::ScopedConnectionList skip_update_connections
Definition: session.h:1718
int add_master_bus(ChanCount const &)
std::atomic< PostTransportWork > _post_transport_work
Definition: session.h:1698
samplepos_t position() const
Definition: session.h:1439
int load_routes(const XMLNode &, int)
bool _bounce_processing_active
Definition: session.h:1464
GraphEdges _current_route_graph
Definition: session.h:2353
std::shared_ptr< Route > surround_master() const
Definition: session.h:1078
bool synced_to_engine() const
std::atomic< RecordState > _record_status
Definition: session.h:1506
void setup_raid_path(std::string path)
std::atomic< int > _processing_prohibited
Definition: session.h:1505
void reassign_track_numbers()
std::shared_ptr< ExportHandler > export_handler
Definition: session.h:1597
std::optional< bool > _vapor_exportable
Definition: session.h:1515
BufferSet & get_route_buffers(ChanCount count=ChanCount::ZERO, bool silence=true)
std::shared_ptr< IO > _click_io
Definition: session.h:2200
static const int vst_can_do_string_count
Definition: session.h:1211
bool unbang_trigger_at(int32_t route_index, int32_t row_index)
void refill_all_track_buffers()
void disconnect_port_for_rewire(std::string const &port) const
void add_playlist(std::shared_ptr< Playlist >)
std::shared_ptr< Route > get_remote_nth_route(PresentationInfo::order_t n) const
void globally_add_internal_sends(std::shared_ptr< Route > dest, Placement p, bool)
void timecode_duration(samplecnt_t, Timecode::Time &) const
uint32_t capture_load()
PBD::Signal< void(std::string)> SaveSessionRequested
Definition: session.h:664
MIDI::MachineControl * _mmc
Definition: session.h:2384
void get_physical_ports(std::vector< std::string > &inputs, std::vector< std::string > &outputs, DataType type, MidiPortFlags include=MidiPortFlags(0), MidiPortFlags exclude=MidiPortFlags(0))
static PBD::Signal< void()> SendFeedback
Definition: session.h:1222
samplecnt_t io_latency() const
Definition: session.h:575
void audition_region(std::shared_ptr< Region >)
void flush_cue_recording()
RouteList new_audio_route(int input_channels, int output_channels, std::shared_ptr< RouteGroup > route_group, uint32_t how_many, std::string name_template, PresentationInfo::Flag, PresentationInfo::order_t)
void * do_work()
std::atomic< int > _have_rec_disabled_track
Definition: session.h:2292
std::shared_ptr< RouteGroup > route_group_by_name(std::string)
void request_resume_timecode_transmission()
void unblock_processing()
Definition: session.h:1542
SerializedRCUManager< RouteList > routes
Definition: session.h:1980
static PBD::Signal< int(Session *, std::string, DataType)> MissingFile
Definition: session.h:1325
std::shared_ptr< GainControl > master_volume() const
bool implement_master_strategy()
bool save_default_options()
pthread_t _rt_emit_thread
Definition: session.h:1769
PBD::ReallocPool _mempool
Definition: session.h:1670
AutoConnectQueue _auto_connect_queue
Definition: session.h:1817
std::string modified_with
Definition: session.h:2406
pthread_mutex_t _auto_connect_mutex
Definition: session.h:1784
BufferSet & get_scratch_buffers(ChanCount count=ChanCount::ZERO, bool silence=true)
bool global_locate_pending() const
Definition: session.h:526
void cancel_audition()
PBD::ScopedConnection _click_io_connection
Definition: session.h:2208
std::atomic< int > _suspend_save
Definition: session.h:1646
void setup_click_state(const XMLNode *)
bool get_record_enabled() const
Definition: session.h:405
static void * auto_connect_thread(void *)
Locations * _locations
Definition: session.h:1706
void luabindings_session_rt(lua_State *)
unsigned int _export_xruns
Definition: session.h:1493
double outbound_mtc_timecode_frame
Definition: session.h:1866
void route_group_emptied(std::shared_ptr< RouteGroup >)
static const std::string session_name_is_legal(const std::string &)
std::shared_ptr< TriggerBox > armed_triggerbox() const
std::shared_ptr< RouteList const > get_routes() const
Definition: session.h:336
PresentationInfo::order_t master_order_key() const
Definition: session.h:1080
std::list< std::shared_ptr< MidiTrack > > new_midi_track(const ChanCount &input, const ChanCount &output, bool strict_io, std::shared_ptr< PluginInfo > instrument, Plugin::PresetRecord *pset, std::shared_ptr< RouteGroup > route_group, uint32_t how_many, std::string name_template, PresentationInfo::order_t, TrackMode mode, bool input_auto_connect, bool trigger_visibility=false)
uint32_t next_return_id()
samplecnt_t convert_to_samples(AnyTime const &position)
samplepos_t record_location() const
Definition: session.h:834
static PBD::Signal< int(std::shared_ptr< Playlist >)> AskAboutPlaylistDeletion
Definition: session.h:951
size_t _last_touched_mixer_scene_idx
Definition: session.h:1475
CoreSelection & selection() const
Definition: session.h:345
void update_route_solo_state(std::shared_ptr< RouteList const > r=std::shared_ptr< RouteList const >())
VCAManager * vca_manager_ptr()
Definition: session.h:1365
RouteList get_routelist(bool mixer_order=false, PresentationInfo::Flag fl=PresentationInfo::MixerRoutes) const
std::shared_ptr< AutomationControl > automation_control_by_id(const PBD::ID &)
AudioEngine & engine()
Definition: session.h:826
void timecode_to_sample(Timecode::Time &timecode, samplepos_t &sample, bool use_offset, bool use_subframes) const
volatile bool _save_queued
Definition: session.h:1647
std::function< bool()> MidiTimeoutCallback
Definition: session.h:1856
void mark_send_id(uint32_t)
bool have_rec_enabled_track() const
std::shared_ptr< MixerScene > nth_mixer_scene(size_t, bool create_if_missing=false)
PBD::Signal< void(RouteList &)> InstrumentRouteAdded
Definition: session.h:471
void playlist_regions_extended(std::list< Temporal::Range > const &)
uint32_t main_outs
Definition: session.h:2246
static int vst_current_loading_id
Definition: session.h:1209
void mmc_record_exit(MIDI::MachineControl &)
pthread_cond_t _auto_connect_cond
Definition: session.h:1785
void queue_full_time_code()
Definition: session.h:1288
SerializedRCUManager< IOPlugList > _io_plugins
Definition: session.h:1687
std::shared_ptr< TriggerBox > rec_enabled_triggerbox() const
std::shared_ptr< Speakers > _speakers
Definition: session.h:2347
int find_all_sources(std::string path, std::set< std::string > &result)
void add_controllable(std::shared_ptr< PBD::Controllable >)
std::atomic< int > _butler_seek_counter
Definition: session.h:1470
PBD::Signal< void()> TransportStateChange
Definition: session.h:458
gain_t * send_gain_automation_buffer() const
void emit_thread_run()
std::shared_ptr< Port > mmc_output_port() const
std::vector< std::weak_ptr< AutomationControl > > cancel_all_mute()
void xrun_recovery()
void request_locate(samplepos_t sample, bool force=false, LocateTransportDisposition ltd=RollIfAppropriate, TransportRequestSource origin=TRS_UI)
bool rechain_process_graph(GraphNodeList &)
void mmc_stop(MIDI::MachineControl &)
bool sample_rate_convert(ImportStatus &, std::string infile, std::string &outfile)
static PBD::Signal< int(samplecnt_t, samplecnt_t)> AskAboutSampleRateMismatch
Definition: session.h:956
int save_template(const std::string &template_name, const std::string &description="", bool replace_existing=false)
uint32_t redo_depth() const
Definition: session.h:1151
void set_track_monitor_input_status(bool)
bool playlist_is_active(std::shared_ptr< Playlist >)
std::shared_ptr< Route > monitor_out() const
Definition: session.h:1075
bool waiting_for_sync_offset
Definition: session.h:1465
Timecode::TimecodeFormat ltc_enc_tcformat
Definition: session.h:1887
void process_with_events(pframes_t)
StateOfTheState _state_of_the_state
Definition: session.h:1643
PBD::Signal< void()> MonitorBusAddedOrRemoved
Definition: session.h:1064
std::shared_ptr< Source > XMLSourceFactory(const XMLNode &)
XMLNode * _bundle_xml_node
Definition: session.h:2167
void process_event(SessionEvent *)
bool soloing() const
Definition: session.h:1039
samplecnt_t _io_latency
Definition: session.h:1487
void request_count_in_record()
void set_auto_loop_location(Location *)
void route_processors_changed(RouteProcessorChange)
std::atomic< int > _seek_counter
Definition: session.h:1469
MidiPortManager * _midi_ports
Definition: session.h:2383
void schedule_playback_buffering_adjustment()
void add_route_group(std::shared_ptr< RouteGroup >)
void reset_monitor_section()
bool muted() const
void foreach_route_group(std::function< void(std::shared_ptr< RouteGroup >)> f)
Definition: session.h:765
AnyTime _global_quantization
Definition: session.h:2450
std::shared_ptr< Route > _surround_master
Definition: session.h:2250
std::shared_ptr< SessionPlaylists > playlists() const
Definition: session.h:1285
samplecnt_t click_emphasis_length
Definition: session.h:2205
bool apply_nth_mixer_scene(size_t, RouteList const &)
void clear_active_cue()
std::atomic< int > _suspend_timecode_transmission
Definition: session.h:2339
void auto_connect_thread_start()
std::shared_ptr< RouteGroup > new_route_group(const std::string &)
bool punch_active() const
std::vector< space_and_path >::iterator last_rr_session_dir
Definition: session.h:2148
Session(AudioEngine &, const std::string &fullpath, const std::string &snapshot_name, BusProfile const *bus_profile=0, std::string mix_template="", bool unnamed=false, samplecnt_t samplerate=0)
void schedule_capture_buffering_adjustment()
XMLNode & state(bool save_template, snapshot_t snapshot_type=NormalSave, bool for_archive=false, bool only_used_assets=false) const
bool session_range_is_free() const
Definition: session.h:568
int no_roll(pframes_t nframes)
std::shared_ptr< BundleList const > bundles()
Definition: session.h:369
void non_realtime_set_audition()
samplepos_t ltc_timecode_offset
Definition: session.h:1899
PBD::Signal< void(std::weak_ptr< Source >)> SourceAdded
Definition: session.h:2059
void request_preroll_record_trim(samplepos_t start, samplecnt_t preroll)
pthread_mutex_t _rt_emit_mutex
Definition: session.h:1772
bool user_roll_after_locate() const
PBD::Signal< void()> route_groups_reordered
Definition: session.h:763
static PBD::Signal< void(samplecnt_t, samplecnt_t)> NotifyAboutSampleRateMismatch
Definition: session.h:959
static bool get_bypass_all_loaded_plugins()
Definition: session.h:1100
void queue_song_position_pointer()
Definition: session.h:1289
bool locate_pending() const
samplepos_t ltc_prev_cycle
Definition: session.h:1897
bool vapor_barrier()
void routes_using_input_from(const std::string &str, RouteList &rl)
PBD::Signal< void(std::weak_ptr< Source >)> SourceRemoved
Definition: session.h:2060
void butler_transport_work(bool have_process_lock=false)
samplepos_t ltc_enc_pos
Definition: session.h:1893
void mmc_record_enable(MIDI::MachineControl &mmc, size_t track, bool enabled)
std::shared_ptr< MidiSource > create_midi_source_by_stealing_name(std::shared_ptr< Track >)
int cleanup_trash_sources(CleanupReport &)
bool path_is_within_session(const std::string &)
std::string name() const
Definition: session.h:242
Butler * butler()
Definition: session.h:330
void send_immediate_mmc(MIDI::MachineControlCommand)
std::vector< SoloChange, PBD::StackAllocator< SoloChange, 8 > > _solo_change_queue
Definition: session.h:2038
std::shared_ptr< AudioRegion > XMLAudioRegionFactory(const XMLNode &, bool full)
void add_monitor_section()
uint32_t _send_latency_changes
Definition: session.h:1488
AudioTrackList new_audio_track(int input_channels, int output_channels, std::shared_ptr< RouteGroup > route_group, uint32_t how_many, std::string name_template, PresentationInfo::order_t order, TrackMode mode=Normal, bool input_auto_connect=true, bool trigger_visibility=false)
MidiTimeoutList midi_timeouts
Definition: session.h:1859
std::vector< std::string > registered_lua_functions()
void add_source(std::shared_ptr< Source >)
samplecnt_t worst_latency_preroll() const
int32_t ltc_enc_byte
Definition: session.h:1892
std::shared_ptr< Route > XMLRouteFactory_3X(const XMLNode &, int)
samplecnt_t frames_per_hour() const
Definition: session.h:545
void auto_connect_surround_master()
std::optional< samplepos_t > _nominal_jack_transport_sample
Definition: session.h:2419
bool get_nsm_state() const
Definition: session.h:647
void timecode_time(samplepos_t when, Timecode::Time &)
std::map< PBD::ID, RouteImportInfo > parse_route_state(const std::string &path, bool &match_pbd_id)
std::string _path
Definition: session.h:1620
uint32_t _solo_isolated_cnt
Definition: session.h:1497
int start_audio_export(samplepos_t position, bool realtime=false, bool region_export=false)
bool monitor_active() const
Definition: session.h:1073
static void * session_loader_thread(void *arg)
void remove_route(std::shared_ptr< Route >)
int send_full_time_code(samplepos_t, pframes_t nframes)
void set_auto_punch_location(Location *)
void cue_marker_change(Location *)
static PBD::Signal< void()> FeedbackDetected
Definition: session.h:1309
void set_controls(std::shared_ptr< AutomationControlList >, double val, PBD::Controllable::GroupControlDisposition)
void set_block_size(pframes_t nframes)
PBD::RWLock _mixer_scenes_lock
Definition: session.h:1690
bool _route_reorder_in_progress
Definition: session.h:1986
void click_io_resync_latency(bool)
samplepos_t last_transport_start() const
Definition: session.h:508
std::atomic< bool > play_loop
Definition: session.h:1628
void unset_play_range()
void mmc_fast_forward(MIDI::MachineControl &)
void mmc_shuttle(MIDI::MachineControl &mmc, float speed, bool forw)
int load_sources(const XMLNode &node)
std::string next_redo() const
Definition: session.h:1153
bool find_route_name(std::string const &, uint32_t &id, std::string &name, bool)
int set_state(const XMLNode &node, int version)
bool transport_master_is_external() const
bool transport_locked() const
int load_route_groups(const XMLNode &, int)
void auto_connect_master_bus()
Click * get_click()
void mmc_record_pause(MIDI::MachineControl &)
std::shared_ptr< GraphChain > _graph_chain
Definition: session.h:2357
void rewire_midi_selection_ports()
PBD::Signal< void()> BatchUpdateStart
Definition: session.h:274
void setup_midi_machine_control()
samplecnt_t worst_latency_preroll_buffer_size_ceil() const
samplecnt_t timecode_frames_per_hour() const
Definition: session.h:548
std::string _current_snapshot_name
Definition: session.h:1640
void remove_route_group(std::shared_ptr< RouteGroup > rg)
bool transport_stopped_or_stopping() const
uint32_t playback_load()
void import_pt_rest(PTFFormat &ptf)
void deinterlace_midi_region(std::shared_ptr< MidiRegion > mr)
void unmark_insert_id(uint32_t)
void register_with_memento_command_factory(PBD::ID, PBD::StatefulDestructible *)
samplecnt_t _click_io_latency
Definition: session.h:2207
unsigned int _xrun_count
Definition: session.h:1501
virtual ~Session()
PBD::Signal< void()> UpdateRouteRecordState
Definition: session.h:441
void add_click(samplepos_t pos, bool emphasis)
std::weak_ptr< PBD::Controllable > _recently_touched_controllable
Definition: session.h:2271
void save_as_bring_callback(uint32_t, uint32_t, std::string)
luabridge::LuaRef * _lua_save
Definition: session.h:1679
void adjust_playback_buffering()
pthread_t _auto_connect_thread
Definition: session.h:1782
void solo_control_mode_changed()
void request_overwrite_buffer(std::shared_ptr< Track >, OverwriteReason)
void emit_route_signals()
PBD::ScopedConnection export_freewheel_connection
Definition: session.h:1606
std::string _template_state_dir
Definition: session.h:2399
void listen_position_changed()
void auto_connect_thread_terminate()
PBD::Signal< void()> StateReady
Definition: session.h:654
RouteList new_route_from_template(uint32_t how_many, PresentationInfo::order_t insert_at, XMLNode &, const std::string &name, PlaylistDisposition pd=NewPlaylist)
std::shared_ptr< RouteList > get_tracks() const
void track_playlist_changed(std::weak_ptr< Track >)
std::shared_ptr< Route > get_midi_nth_route_by_id(PresentationInfo::order_t n) const
samplepos_t _last_roll_or_reversal_location
Definition: session.h:1661
int destroy_sources(std::list< std::shared_ptr< Source > > const &)
PBD::Mutex region_lock
Definition: session.h:2043
std::vector< space_and_path > session_dirs
Definition: session.h:2147
samplepos_t ltc_enc_off
Definition: session.h:1895
PBD::Command * stateful_diff_command_factory(XMLNode *)
std::vector< PtfLookup > ptfregpair
Definition: session.h:1387
std::shared_ptr< Region > find_whole_file_parent(std::shared_ptr< Region const >) const
void rename_state(std::string old_name, std::string new_name)
samplecnt_t _frames_per_hour
Definition: session.h:1871
size_t _required_thread_buffersize
Definition: session.h:1531
int save_state(std::string snapshot_name="", bool pending=false, bool switch_to_snapshot=false, bool template_only=false, bool for_archive=false, bool only_used_assets=false)
void unmark_return_id(uint32_t)
uint32_t next_surround_send_id()
void setup_bundles_rcu()
int remove_last_capture()
PBD::Mutex space_lock
Definition: session.h:2155
bool maybe_allow_only_punch()
void finish_domain_bounce(Temporal::DomainBounceInfo &)
bool dirty() const
Definition: session.h:256
void goto_start(bool and_roll=false)
@ pullup_Minus4Plus1
Definition: session.h:850
@ pullup_Plus4Minus1
Definition: session.h:846
void route_removed_from_route_group(std::shared_ptr< RouteGroup >, std::weak_ptr< Route >)
LatencyRange mtc_out_latency
Definition: session.h:1903
std::vector< std::string > source_search_path(DataType) const
void update_marks(Location *loc)
gain_t * scratch_automation_buffer() const
int load_compounds(const XMLNode &node)
std::shared_ptr< ExportHandler > get_export_handler()
bool punch_is_possible() const
void remove_empty_sounds()
XMLNode * _engine_state
Definition: session.h:2170
void auto_connect_thread_wakeup()
void unmark_send_id(uint32_t)
static PBD::Signal< void()> SuccessfulGraphSort
Definition: session.h:1314
void set_next_event()
bool _no_save_signal
Definition: session.h:1649
std::string construct_peak_filepath(const std::string &audio_path, const bool in_session=false, const bool old_peak_name=false) const
static void * emit_thread(void *)
bool route_name_internal(std::string) const
PBD::Mutex _update_latency_lock
Definition: session.h:1813
samplepos_t post_export_position
Definition: session.h:1589
std::shared_ptr< IO > click_io()
Definition: session.h:1165
std::vector< std::shared_ptr< MixerScene > > mixer_scenes() const
bool can_cleanup_peakfiles() const
samplecnt_t _base_sample_rate
Definition: session.h:1466
bool _export_rolling
Definition: session.h:1592
void update_latency_compensation(bool force, bool called_from_backend)
bool maybe_allow_only_loop(bool play_loop=false)
bool process_can_proceed() const
Definition: session.h:1919
bool deletion_in_progress() const
Definition: session.h:257
void ltc_tx_initialize()
void mmc_track_record_status(MIDI::MachineControl &, uint32_t track, bool enabled)
void _sync_locations_to_skips()
bool post_export_sync
Definition: session.h:1588
bool realtime_export() const
Definition: session.h:1259
static std::string get_snapshot_from_instant(const std::string &session_dir)
bool silent()
Definition: session.h:894
void sync_cues_from_list(Locations::LocationList const &)
bool have_external_connections_for_current_backend(bool tracks_only=true) const
uint32_t nbusses() const
void increment_transport_position(samplecnt_t val)
Definition: session.h:1741
void auto_connect_route(std::shared_ptr< Route >, bool, bool, const ChanCount &, const ChanCount &, const ChanCount &io=ChanCount(), const ChanCount &oo=ChanCount())
int backend_sync_callback(TransportState, samplepos_t)
uint32_t _step_editors
Definition: session.h:2336
void set_object_selection(Temporal::timepos_t const &start, Temporal::timepos_t const &end)
bool have_captured() const
Definition: session.h:323
void sync_time_vars()
void ltc_tx_cleanup()
StripableList get_stripables() const
static std::atomic< unsigned int > _name_id_counter
Definition: session.h:1449
StripableList _soloSelection
Definition: session.h:2414
void globally_set_send_gains_from_track(std::shared_ptr< Route > dest)
bool _play_range
Definition: session.h:2230
void block_processing()
void get_stripables(StripableList &, PresentationInfo::Flag fl=PresentationInfo::MixerStripables) const
void start_transport(bool after_loop)
int restore_history(std::string snapshot_name)
void set_nsm_state(bool state)
Definition: session.h:648
void set_session_range_is_free(bool)
Temporal::GridIterator _click_iterator
Definition: session.h:2209
bool unnamed() const
void maybe_update_session_range(timepos_t const &, timepos_t const &)
int micro_locate(samplecnt_t distance)
void tempo_map_changed()
static bool _bypass_all_loaded_plugins
Definition: session.h:2284
void request_play_loop(bool yn, bool leave_rolling=false)
PBD::Command * memento_command_factory(XMLNode *n)
std::shared_ptr< Stripable > stripable_by_name(std::string) const
void allow_auto_play(bool yn)
static PBD::Signal< void(std::string, std::string, bool, samplepos_t)> Exported
Definition: session.h:927
std::vector< std::string > possible_states() const
int start_midi_thread()
PBD::Signal< void()> TransportLooped
Definition: session.h:462
samplepos_t last_timecode_when
Definition: session.h:1877
bool _under_nsm_control
Definition: session.h:1500
void midi_track_presentation_info_changed(PBD::PropertyChange const &, std::weak_ptr< MidiTrack >)
PBD::Signal< int(samplecnt_t)> ProcessExport
Definition: session.h:926
static PBD::Signal< void(std::string)> Dialog
Definition: session.h:272
uint32_t nroutes() const
Definition: session.h:361
Definition: LuaRef.h:52
static EventLoop * get_event_loop_for_thread()
Definition: id.h:33
Definition: tlsf.h:30
Definition: uuid.h:31
Definition: xml++.h:114
Definition: xml++.h:74
GtkImageIconNameData name
Definition: gtkimage.h:6
#define LIBARDOUR_API
libltc - en+decode linear timecode
unsigned char ltcsnd_sample_t
Definition: ltc.h:82
PBD::PropertyDescriptor< uint32_t > order
PBD::PropertyDescriptor< timepos_t > start
std::list< std::shared_ptr< RouteGroup > > RouteGroupList
std::shared_ptr< Trigger > TriggerPtr
Definition: triggerbox.h:82
std::set< CueMarker > CueMarkers
uint32_t pframes_t
std::vector< std::shared_ptr< Source > > SourceList
std::vector< CueEvent > CueEvents
std::list< std::shared_ptr< Stripable > > StripableList
Temporal::samplecnt_t samplecnt_t
void setup_enum_writer()
std::list< std::shared_ptr< GraphNode > > GraphNodeList
std::list< std::shared_ptr< Route > > RouteList
std::vector< LuaScriptParamPtr > LuaScriptParamList
Definition: luascripting.h:106
Temporal::samplepos_t samplepos_t
std::list< std::shared_ptr< AudioTrack > > AudioTrackList
std::shared_ptr< PBD::Controllable > Controllable
Definition: console1.h:80
Definition: editor.h:85
DebugBits IOTaskList
DebugBits Graph
DebugBits AudioEngine
Definition: session.h:1421
DebugBits Butler
Definition: axis_view.h:42
void atomic_inc(std::atomic< T > &aval)
Definition: atomic.h:29
bool atomic_dec_and_test(std::atomic< T > &aval)
Definition: atomic.h:26
static const samplepos_t max_samplepos
TimecodeFormat
Definition: time.h:38
bool operator==(const ProcessorSelection &a, const ProcessorSelection &b)
AutoConnectRequest(std::shared_ptr< Route > r, bool ci, bool co, const ChanCount &is, const ChanCount &os, const ChanCount &io, const ChanCount &oo)
Definition: session.h:1789
std::weak_ptr< Route > route
Definition: session.h:1804
RouteImportInfo(std::string const &n, PresentationInfo const &p, int mb)
Definition: session.h:681
std::string final_session_folder_name
Definition: session.h:589
std::string failure_message
Definition: session.h:606
std::string new_parent_folder
Definition: session.h:582
std::string new_name
Definition: session.h:583
PBD::Signal< bool(float, int64_t, int64_t)> Progress
Definition: session.h:602
std::weak_ptr< Route > route
Definition: session.h:2033
PBD::Controllable::GroupControlDisposition gcd
Definition: session.h:2032
SoloChange(bool s, PBD::Controllable::GroupControlDisposition g, std::weak_ptr< Route > r)
Definition: session.h:2026
LocateTransportDisposition roll_disposition
Definition: session.h:1569
uint32_t blocks
4kB blocks
Definition: session.h:2126
bool blocks_unknown
true if blocks is unknown
Definition: session.h:2127