1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/*
Copyright (C) 2010 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __ardour_monitor_processor_h__
#define __ardour_monitor_processor_h__
#include <vector>
#include "pbd/signals.h"
#include "ardour/types.h"
#include "ardour/processor.h"
class XMLNode;
namespace ARDOUR {
class Session;
class MonitorProcessor : public Processor
{
public:
MonitorProcessor (Session&);
bool display_to_user() const;
void run (BufferSet& /*bufs*/, sframes_t /*start_frame*/, sframes_t /*end_frame*/, nframes_t /*nframes*/, bool /*result_required*/);
XMLNode& state (bool full);
int set_state (const XMLNode&, int /* version */);
bool configure_io (ChanCount in, ChanCount out);
bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const;
void set_cut_all (bool);
void set_dim_all (bool);
void set_polarity (uint32_t, bool invert);
void set_cut (uint32_t, bool cut);
void set_dim (uint32_t, bool dim);
void set_solo (uint32_t, bool);
void set_mono (bool);
void set_dim_level (gain_t);
void set_solo_boost_level (gain_t);
gain_t dim_level() const { return _dim_level; }
gain_t solo_boost_level() const { return _solo_boost_level; }
bool dimmed (uint32_t chn) const;
bool soloed (uint32_t chn) const;
bool inverted (uint32_t chn) const;
bool cut (uint32_t chn) const;
bool cut_all () const;
bool dim_all () const;
bool mono () const;
PBD::Signal0<void> Changed;
private:
struct ChannelRecord {
gain_t current_gain;
gain_t cut;
bool dim;
gain_t polarity;
bool soloed;
ChannelRecord ()
: current_gain(1.0), cut(1.0), dim(false), polarity(1.0), soloed (false) {}
};
std::vector<ChannelRecord> _channels;
uint32_t solo_cnt;
bool _dim_all;
bool _cut_all;
bool _mono;
volatile gain_t _dim_level;
volatile gain_t _solo_boost_level;
void allocate_channels (uint32_t);
};
} /* namespace */
#endif /* __ardour_monitor_processor_h__ */
|