1
#include "artsmodulesmixers.h"
2
#include "flowsystem.h"
3
#include "stdsynthmodule.h"
7
class SimpleMixerChannel_impl : virtual public SimpleMixerChannel_skel,
8
virtual public StdSynthModule
11
Synth_STD_EQUALIZER _equalizerLeft, _equalizerRight;
12
StereoEffectStack _insertEffects;
13
Synth_MUL mulGainLeft, mulGainRight;
14
Synth_MUL mulVolumeLeft, mulVolumeRight;
15
float _gainLeft, _gainRight, _pan, _volumeLeft, _volumeRight, pLeft, pRight;
18
SimpleMixerChannel_impl()
19
: _gainLeft(1.0), _gainRight(1.0), _pan(0), _volumeLeft(1.0), _volumeRight(1.0), pLeft(1), pRight(1)
21
setValue(mulVolumeLeft,"invalue2",_volumeLeft*pLeft);
22
setValue(mulVolumeRight,"invalue2",_volumeRight*pRight);
23
setValue(mulGainLeft,"invalue2",_gainLeft);
24
setValue(mulGainRight,"invalue2",_gainRight);
27
Synth_STD_EQUALIZER equalizerLeft() { return _equalizerLeft; }
28
Synth_STD_EQUALIZER equalizerRight() { return _equalizerRight; }
29
StereoEffectStack insertEffects() { return _insertEffects; }
31
float gainLeft() { return _gainLeft; }
32
void gainLeft(float g)
36
setValue(mulGainLeft,"invalue2",g);
41
float gainRight() { return _gainRight; }
42
void gainRight(float g)
46
setValue(mulGainRight,"invalue2",g);
51
float volumeLeft() { return _volumeLeft; }
52
void volumeLeft(float v)
54
if(v != _volumeLeft) {
56
setValue(mulVolumeLeft,"invalue2",v*pLeft);
57
volumeLeft_changed(v);
61
float volumeRight() { return _volumeRight; }
62
void volumeRight(float v)
64
if(v != _volumeRight) {
66
setValue(mulVolumeRight,"invalue2",v*pRight);
67
volumeRight_changed(v);
71
float pan() { return _pan; }
83
setValue(mulVolumeLeft,"invalue2",_volumeLeft*pLeft);
84
setValue(mulVolumeRight,"invalue2",_volumeRight*pRight);
89
std::string name() { return _name; }
90
void name(const std::string& newName)
92
if(_name != newName) {
94
name_changed(newName);
100
_equalizerLeft.start();
101
_equalizerRight.start();
102
_insertEffects.start();
103
mulVolumeLeft.start();
104
mulVolumeRight.start();
106
mulGainRight.start();
108
_node()->virtualize("inleft",mulGainLeft._node(),"invalue1");
109
_node()->virtualize("inright",mulGainRight._node(),"invalue1");
110
connect(mulGainLeft,"outvalue",_equalizerLeft,"invalue");
111
connect(mulGainRight,"outvalue",_equalizerRight,"invalue");
112
connect(_equalizerLeft,"outvalue",_insertEffects,"inleft");
113
connect(_equalizerRight,"outvalue",_insertEffects,"inright");
114
connect(_insertEffects,"outleft",mulVolumeLeft,"invalue1");
115
connect(_insertEffects,"outright",mulVolumeRight,"invalue1");
116
_node()->virtualize("outleft",mulVolumeLeft._node(),"outvalue");
117
_node()->virtualize("outright",mulVolumeRight._node(),"outvalue");
121
_equalizerLeft.stop();
122
_equalizerRight.stop();
123
_insertEffects.stop();
124
mulVolumeLeft.stop();
125
mulVolumeRight.stop();
130
REGISTER_IMPLEMENTATION(SimpleMixerChannel_impl);