Ardour  9.0-pre0-1699-gfaebc7ab35
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/session_handle.h"
25 #include "ardour/types.h"
26 
27 namespace ARDOUR {
28  class Delivery;
29 }
30 
34  , public sigc::trackable
35 {
36 public:
37  static RTAManager* instance ();
39 
40  class RTA : public sigc::trackable
41  {
42  public:
43  RTA (std::shared_ptr<ARDOUR::Route>);
44  ~RTA ();
45 
46  RTA (RTA const&) = delete;
47 
48  bool init ();
49  void reset ();
50  bool run ();
51 
54 
56 
57  std::shared_ptr<ARDOUR::Route> route () const;
58  std::shared_ptr<ARDOUR::Delivery> delivery () const;
59  std::vector<PerceptualAnalyzer*> const& analyzers () const;
60 
61  private:
63  using RTARingBufferPtr = std::shared_ptr<RTARingBuffer>;
64  using RTABufferList = std::vector<RTARingBufferPtr>;
65  using RTABufferListPtr = std::shared_ptr<RTABufferList>;
66 
68 
69  std::shared_ptr<ARDOUR::Route> _route;
70  std::vector<PerceptualAnalyzer*> _analyzers;
72  size_t _blocksize;
73  size_t _stepsize;
74  size_t _offset;
79  };
80 
82 
83  XMLNode& get_state () const;
84 
85  void attach (std::shared_ptr<ARDOUR::Route>);
86  void remove (std::shared_ptr<ARDOUR::Route>);
87  bool attached (std::shared_ptr<ARDOUR::Route>) const;
88  void clear ();
89 
90  std::list<RTA> const& rta () const
91  {
92  return _rta;
93  }
94 
95  void set_active (bool);
98 
100  {
101  return _speed;
102  }
104  {
105  return _warp;
106  }
107 
110 
111 private:
114 
115  void run_rta ();
117  void route_removed (std::weak_ptr<ARDOUR::Route>);
118 
119  std::list<RTA> _rta;
120  bool _active;
123 
124  sigc::connection _update_connection;
125 };
std::shared_ptr< ARDOUR::Delivery > delivery() const
RTABufferListPtr _ringbuffers
Definition: rta_manager.h:75
std::shared_ptr< ARDOUR::Route > route() const
std::vector< PerceptualAnalyzer * > _analyzers
Definition: rta_manager.h:70
size_t _blocksize
Definition: rta_manager.h:72
PBD::ScopedConnectionList _route_connections
Definition: rta_manager.h:78
std::vector< RTARingBufferPtr > RTABufferList
Definition: rta_manager.h:64
RTA(std::shared_ptr< ARDOUR::Route >)
ARDOUR::samplecnt_t _rate
Definition: rta_manager.h:71
size_t _stepsize
Definition: rta_manager.h:73
std::vector< PerceptualAnalyzer * > const & analyzers() const
RTA(RTA const &)=delete
std::shared_ptr< RTABufferList > RTABufferListPtr
Definition: rta_manager.h:65
void set_rta_warp(ARDOUR::DSP::PerceptualAnalyzer::Warp)
std::shared_ptr< ARDOUR::Route > _route
Definition: rta_manager.h:69
PerceptualAnalyzer::Warp _warp
Definition: rta_manager.h:77
PerceptualAnalyzer::Speed _speed
Definition: rta_manager.h:76
std::shared_ptr< RTARingBuffer > RTARingBufferPtr
Definition: rta_manager.h:63
void route_io_changed()
void set_rta_speed(ARDOUR::DSP::PerceptualAnalyzer::Speed)
static RTAManager * instance()
std::list< RTA > const & rta() const
Definition: rta_manager.h:90
void run_rta()
void route_removed(std::weak_ptr< ARDOUR::Route >)
static RTAManager * _instance
Definition: rta_manager.h:113
void set_rta_warp(ARDOUR::DSP::PerceptualAnalyzer::Warp)
ARDOUR::DSP::PerceptualAnalyzer::Warp rta_warp() const
Definition: rta_manager.h:103
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:122
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:119
PBD::Signal< void()> SettingsChanged
Definition: rta_manager.h:109
sigc::connection _update_connection
Definition: rta_manager.h:124
PBD::Signal< void()> SignalReady
Definition: rta_manager.h:108
ARDOUR::DSP::PerceptualAnalyzer::Speed _speed
Definition: rta_manager.h:121
bool attached(std::shared_ptr< ARDOUR::Route >) const
void attach(std::shared_ptr< ARDOUR::Route >)
bool _active
Definition: rta_manager.h:120
ARDOUR::DSP::PerceptualAnalyzer::Speed rta_speed() const
Definition: rta_manager.h:99
Definition: xml++.h:114
Temporal::samplecnt_t samplecnt_t