Ardour  9.2-129-gdf5e1050bd
rta_manager.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2025 Robin Gareus <robin@gareus.org>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18 #pragma once
19 
20 #include "pbd/ringbuffer.h"
21 
22 #include "ardour/ardour.h"
23 #include "ardour/dsp_filter.h"
24 #include "ardour/delivery.h"
25 #include "ardour/session_handle.h"
26 #include "ardour/types.h"
27 
31  , public sigc::trackable
32 {
33 public:
34  static RTAManager* instance ();
36 
37  class RTA : public sigc::trackable
38  {
39  public:
40  RTA (std::shared_ptr<ARDOUR::Route>);
41  ~RTA ();
42 
43  RTA (RTA const&) = delete;
44 
45  bool init ();
46  void reset ();
47  bool run ();
48 
51 
53 
54  std::shared_ptr<ARDOUR::Route> route () const;
55  std::shared_ptr<ARDOUR::Delivery> delivery () const;
56  std::vector<PerceptualAnalyzer*> const& analyzers () const;
57 
58  private:
60  using RTARingBufferPtr = std::shared_ptr<RTARingBuffer>;
61  using RTABufferList = std::vector<RTARingBufferPtr>;
63 
65 
66  std::shared_ptr<ARDOUR::Route> _route;
67  std::vector<PerceptualAnalyzer*> _analyzers;
69  size_t _blocksize;
70  size_t _stepsize;
71  size_t _offset;
76  };
77 
79 
80  XMLNode& get_state () const;
81 
82  void attach (std::shared_ptr<ARDOUR::Route>);
83  void remove (std::shared_ptr<ARDOUR::Route>);
84  bool attached (std::shared_ptr<ARDOUR::Route>) const;
85  void clear ();
86 
87  std::list<RTA> const& rta () const
88  {
89  return _rta;
90  }
91 
92  void set_active (bool);
95 
97  {
98  return _speed;
99  }
101  {
102  return _warp;
103  }
104 
107 
108 private:
111 
112  void run_rta ();
114  void route_removed (std::weak_ptr<ARDOUR::Route>);
116  void parameter_changed (std::string);
117 
118  std::list<RTA> _rta;
119  bool _active;
122  bool _clearing;
123  sigc::connection _update_connection;
124 };
boost::shared_ptr< RTABufferList > RTABufferListPtr
Definition: delivery.h:130
std::shared_ptr< ARDOUR::Delivery > delivery() const
RTABufferListPtr _ringbuffers
Definition: rta_manager.h:72
std::shared_ptr< ARDOUR::Route > route() const
std::vector< PerceptualAnalyzer * > _analyzers
Definition: rta_manager.h:67
size_t _blocksize
Definition: rta_manager.h:69
ARDOUR::Delivery::RTABufferListPtr RTABufferListPtr
Definition: rta_manager.h:62
PBD::ScopedConnectionList _route_connections
Definition: rta_manager.h:75
std::vector< RTARingBufferPtr > RTABufferList
Definition: rta_manager.h:61
RTA(std::shared_ptr< ARDOUR::Route >)
ARDOUR::samplecnt_t _rate
Definition: rta_manager.h:68
size_t _stepsize
Definition: rta_manager.h:70
std::vector< PerceptualAnalyzer * > const & analyzers() const
RTA(RTA const &)=delete
void set_rta_warp(ARDOUR::DSP::PerceptualAnalyzer::Warp)
std::shared_ptr< ARDOUR::Route > _route
Definition: rta_manager.h:66
PerceptualAnalyzer::Warp _warp
Definition: rta_manager.h:74
PerceptualAnalyzer::Speed _speed
Definition: rta_manager.h:73
std::shared_ptr< RTARingBuffer > RTARingBufferPtr
Definition: rta_manager.h:60
void route_io_changed()
void set_rta_speed(ARDOUR::DSP::PerceptualAnalyzer::Speed)
static RTAManager * instance()
void limit_active_rta()
std::list< RTA > const & rta() const
Definition: rta_manager.h:87
void run_rta()
void route_removed(std::weak_ptr< ARDOUR::Route >)
static RTAManager * _instance
Definition: rta_manager.h:110
void set_rta_warp(ARDOUR::DSP::PerceptualAnalyzer::Warp)
ARDOUR::DSP::PerceptualAnalyzer::Warp rta_warp() const
Definition: rta_manager.h:100
bool _clearing
Definition: rta_manager.h:122
void set_active(bool)
XMLNode & get_state() const
void set_rta_speed(ARDOUR::DSP::PerceptualAnalyzer::Speed)
ARDOUR::DSP::PerceptualAnalyzer::Warp _warp
Definition: rta_manager.h:121
void remove(std::shared_ptr< ARDOUR::Route >)
void session_going_away()
void clear()
void set_session(ARDOUR::Session *)
std::list< RTA > _rta
Definition: rta_manager.h:118
PBD::Signal< void()> SettingsChanged
Definition: rta_manager.h:106
sigc::connection _update_connection
Definition: rta_manager.h:123
PBD::Signal< void()> SignalReady
Definition: rta_manager.h:105
ARDOUR::DSP::PerceptualAnalyzer::Speed _speed
Definition: rta_manager.h:120
bool attached(std::shared_ptr< ARDOUR::Route >) const
void attach(std::shared_ptr< ARDOUR::Route >)
void parameter_changed(std::string)
bool _active
Definition: rta_manager.h:119
ARDOUR::DSP::PerceptualAnalyzer::Speed rta_speed() const
Definition: rta_manager.h:96
Definition: xml++.h:114
Temporal::samplecnt_t samplecnt_t