You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdemultimedia/arts/modules/effects/synth_stereo_compressor_imp...

133 lines
3.3 KiB

/* This file is part of the KDE project
Copyright (C) 2002 Arnold Krille <arnold@arnoldarts.de>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "artsmoduleseffects.h"
#include <stdsynthmodule.h>
#include <flowsystem.h>
#include <debug.h>
using namespace Arts;
namespace Arts {
class Synth_STEREO_COMPRESSOR_impl : virtual public Synth_STEREO_COMPRESSOR_skel,
virtual public StdSynthModule
{
public:
Synth_STEREO_COMPRESSOR_impl()
{
attack( 10 );
release( 10 );
threshold( 1 );
ratio( 0.8 );
output( 1 );
_thru = false;
_run = false;
}
void streamStart()
{
_run = true;
compleft.start();
compright.start();
if(!_thru)
connectComp(true);
else
connectThru(true);
}
void streamEnd()
{
_run = false;
connectComp(false);
connectThru(false);
compleft.stop();
compright.stop();
}
float attack() { return compleft.attack(); };
void attack( float f ) { compleft.attack(f); compright.attack(f); }
float release() { return compleft.release(); };
void release( float f ) { compleft.release(f); compright.release(f); }
float threshold() { return compleft.threshold(); };
void threshold( float f ) { compleft.threshold(f); compright.threshold(f); }
float ratio() { return compleft.ratio(); };
void ratio( float f ) { compleft.ratio(f); compright.ratio(f); }
float output() { return compleft.output(); };
void output( float f ) { compleft.output(f); compright.output(f); }
bool thru() { return _thru; }
void thru( bool f )
{
if( _thru != f )
{
if(!_thru)
connectComp(false);
else
connectThru(false);
_thru = f;
if(!_thru)
connectComp(true);
else
connectThru(true);
}
}
private:
Synth_COMPRESSOR compleft, compright;
bool _thru;
bool _run;
void connectComp( bool _connect )
{
if(_connect)
{
_node()->virtualize("inleft",compleft._node(),"invalue");
_node()->virtualize("inright",compright._node(),"invalue");
_node()->virtualize("outleft",compleft._node(),"outvalue");
_node()->virtualize("outright",compright._node(),"outvalue");
}
else
{
_node()->devirtualize("inleft",compleft._node(),"invalue");
_node()->devirtualize("inright",compright._node(),"invalue");
_node()->devirtualize("outleft",compleft._node(),"outvalue");
_node()->devirtualize("outright",compright._node(),"outvalue");
}
}
void connectThru( bool _connect )
{
if(_connect)
{
_node()->virtualize("inleft",_node(),"outleft");
_node()->virtualize("inright",_node(),"outright");
}
else
{
_node()->devirtualize("inleft",_node(),"outleft");
_node()->devirtualize("inright",_node(),"outright");
}
}
};
REGISTER_IMPLEMENTATION(Synth_STEREO_COMPRESSOR_impl);
}