diff --git a/data/locale/en.ts b/data/locale/en.ts index b21db762d..736caf963 100644 --- a/data/locale/en.ts +++ b/data/locale/en.ts @@ -42,11 +42,11 @@ If you're interested in translating LMMS in another language or want to imp - <html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html> + LMMS - LMMS + <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> @@ -651,6 +651,60 @@ If you're interested in translating LMMS in another language or want to imp + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Ammount + + + + + DelayControlsDialog + + Delay + + + + Delay Time Samples: + + + + Feedback + + + + Feedback Ammount: + + + + Lfo Hz + + + + Lfo Hz: + + + + Lfo Amt + + + + Lfo Amt: + + + DualFilterControlDialog @@ -7016,6 +7070,10 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer + + A native delay plugin + + projectNotes diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 8311c4fa6..1ba586768 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -5,6 +5,7 @@ ADD_SUBDIRECTORY(bit_invader) ADD_SUBDIRECTORY(carlabase) ADD_SUBDIRECTORY(carlapatchbay) ADD_SUBDIRECTORY(carlarack) +ADD_SUBDIRECTORY(delay) ADD_SUBDIRECTORY(DualFilter) ADD_SUBDIRECTORY(dynamics_processor) ADD_SUBDIRECTORY(flp_import) diff --git a/plugins/delay/CMakeLists.txt b/plugins/delay/CMakeLists.txt new file mode 100644 index 000000000..0663b9458 --- /dev/null +++ b/plugins/delay/CMakeLists.txt @@ -0,0 +1,3 @@ +INCLUDE(BuildPlugin) + +BUILD_PLUGIN(delay delayeffect.cpp delaycontrols.cpp delaycontrolsdialog.cpp lfo.cpp stereodelay.cpp MOCFILES delaycontrols.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/delay/artwork.png b/plugins/delay/artwork.png new file mode 100644 index 000000000..19b18740f Binary files /dev/null and b/plugins/delay/artwork.png differ diff --git a/plugins/delay/delaycontrols.cpp b/plugins/delay/delaycontrols.cpp new file mode 100644 index 000000000..32a7a793a --- /dev/null +++ b/plugins/delay/delaycontrols.cpp @@ -0,0 +1,73 @@ +/* + * delaycontrols.cpp - definition of DelayControls class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include + +#include "delaycontrols.h" +#include "delayeffect.h" +#include "engine.h" +#include "song.h" + +DelayControls::DelayControls(DelayEffect* effect): + EffectControls( effect ), + m_effect ( effect ), + m_delayTimeModel( 2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Delay Samples" )) , + m_feebackModel(0.0f,0.0f,1.0f,0.01f,this,tr( "Feedback" ) ), + m_lfoTimeModel(2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Lfo Frequency" ) ), + m_lfoAmmountModel(0.0f,0.0f,0.5f,0.01f, this, tr ( "Lfo Ammount" ) ) +{ + +} + + + + +void DelayControls::changeControl() +{ + //engine::getSong()->setModified(); +} + + + + +void DelayControls::loadSettings(const QDomElement &_this) +{ + m_delayTimeModel.loadSettings(_this, "DelayTimeSamples" ); + m_feebackModel.loadSettings( _this, "FeebackAmmount" ); + m_lfoTimeModel.loadSettings( _this , "LfoFrequency"); + m_lfoAmmountModel.loadSettings( _this, "LfoAmmount"); +} + + + + +void DelayControls::saveSettings(QDomDocument& doc, QDomElement& _this) +{ + m_delayTimeModel.saveSettings( doc, _this, "DelayTimeSamples"); + m_feebackModel.saveSettings( doc, _this ,"FeebackAmmount"); + m_lfoTimeModel.saveSettings( doc, _this, "LfoFrequency"); + m_lfoAmmountModel.saveSettings( doc, _this ,"LfoAmmount"); +} + +#include "moc_delaycontrols.cxx" diff --git a/plugins/delay/delaycontrols.h b/plugins/delay/delaycontrols.h new file mode 100644 index 000000000..4947bf93e --- /dev/null +++ b/plugins/delay/delaycontrols.h @@ -0,0 +1,72 @@ +/* + * delaycontrols.h - declaration of DelayControl class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef DELAYCONTROLS_H +#define DELAYCONTROLS_H + +#include "EffectControls.h" +#include "knob.h" +#include "delaycontrolsdialog.h" + + + +class DelayEffect; + +class DelayControls : public EffectControls +{ + Q_OBJECT +public: + DelayControls( DelayEffect* effect ); + virtual ~DelayControls() + { + } + virtual void saveSettings( QDomDocument& doc, QDomElement& parent ); + virtual void loadSettings( const QDomElement& _this ); + inline virtual QString nodeName() const + { + return "Delay"; + } + virtual int controlCount(){ + return 4; + } + virtual EffectControlDialog* createView() + { + return new DelayControlsDialog( this ); + } + +private slots: + void changeControl(); + +private: + DelayEffect* m_effect; + TempoSyncKnobModel m_delayTimeModel; + FloatModel m_feebackModel; + TempoSyncKnobModel m_lfoTimeModel; + FloatModel m_lfoAmmountModel; + + friend class DelayControlsDialog; + friend class DelayEffect; +}; + +#endif // DELAYCONTROLS_H diff --git a/plugins/delay/delaycontrolsdialog.cpp b/plugins/delay/delaycontrolsdialog.cpp new file mode 100644 index 000000000..a27e4cdb2 --- /dev/null +++ b/plugins/delay/delaycontrolsdialog.cpp @@ -0,0 +1,70 @@ +/* + * delaycontrolsdialog.cpp - definition of DelayControlsDialog class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "delaycontrolsdialog.h" +#include "delaycontrols.h" +#include "embed.h" +#include "TempoSyncKnob.h" + + + + +DelayControlsDialog::DelayControlsDialog(DelayControls *controls) : + EffectControlDialog( controls ) +{ + setAutoFillBackground( true ); + QPalette pal; + pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); + setPalette( pal ); + setFixedSize( 100,125 ); + + TempoSyncKnob* sampleDelayKnob = new TempoSyncKnob( knobBright_26, this ); + sampleDelayKnob->move( 20,30 ); + sampleDelayKnob->setVolumeKnob( false ); + sampleDelayKnob->setModel( &controls->m_delayTimeModel ); + sampleDelayKnob->setLabel( tr( "Delay" ) ); + sampleDelayKnob->setHintText( tr( "Delay Time Samples:" ) + " ", "" ); + + knob * feedbackKnob = new knob( knobBright_26, this); + feedbackKnob->move( 60,30 ); + feedbackKnob->setVolumeKnob(true); + feedbackKnob->setModel( &controls->m_feebackModel); + feedbackKnob->setLabel( tr( "Feedback" ) ); + feedbackKnob->setHintText( tr ( "Feedback Ammount:" ) + " ", ""); + + TempoSyncKnob * lfoFreqKnob = new TempoSyncKnob( knobBright_26, this); + lfoFreqKnob->move( 20,80 ); + lfoFreqKnob->setVolumeKnob(false); + lfoFreqKnob->setModel( &controls->m_lfoTimeModel); + lfoFreqKnob->setLabel( tr( "Lfo Hz" ) ); + lfoFreqKnob->setHintText( tr ( "Lfo Hz:" ) + " ", ""); + + knob * lfoAmtKnob = new knob( knobBright_26, this); + lfoAmtKnob->move( 60,80 ); + lfoAmtKnob->setVolumeKnob(true); + lfoAmtKnob->setModel( &controls->m_lfoAmmountModel); + lfoAmtKnob->setLabel( tr( "Lfo Amt" ) ); + lfoAmtKnob->setHintText( tr ( "Lfo Amt:" ) + " ", ""); + +} diff --git a/plugins/delay/delaycontrolsdialog.h b/plugins/delay/delaycontrolsdialog.h new file mode 100644 index 000000000..1850c774b --- /dev/null +++ b/plugins/delay/delaycontrolsdialog.h @@ -0,0 +1,41 @@ +/* + * delaycontrolsdialog.h - declaration of DelayControlsDialog class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef DELAYCONTROLSDIALOG_H +#define DELAYCONTROLSDIALOG_H + +#include "EffectControlDialog.h" + +class DelayControls; + +class DelayControlsDialog : public EffectControlDialog +{ +public: + DelayControlsDialog(DelayControls* controls ); + virtual ~DelayControlsDialog() + { + } +}; + +#endif // DELAYCONTROLSDIALOG_H diff --git a/plugins/delay/delayeffect.cpp b/plugins/delay/delayeffect.cpp new file mode 100644 index 000000000..5da1a6299 --- /dev/null +++ b/plugins/delay/delayeffect.cpp @@ -0,0 +1,115 @@ +/* + * delayeffect.cpp - definition of the DelayEffect class. The Delay Plugin + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "delayeffect.h" +#include "engine.h" +#include "embed.cpp" + + +extern "C" +{ + +Plugin::Descriptor PLUGIN_EXPORT delay_plugin_descriptor = +{ + STRINGIFY( PLUGIN_NAME ), + "Delay", + QT_TRANSLATE_NOOP( "pluginBrowser", "A native delay plugin" ), + "Dave French ", + 0x0100, + Plugin::Effect, + new PluginPixmapLoader( "logo" ), + NULL, + NULL +} ; + + + + +DelayEffect::DelayEffect( Model* parent, const Plugin::Descriptor::SubPluginFeatures::Key* key ) : + Effect( &delay_plugin_descriptor, parent, key ), + m_delayControls( this ) +{ + m_delay = 0; + m_delay = new StereoDelay( engine::mixer()->processingSampleRate()* 20 ); + m_lfo = new Lfo( engine::mixer()->processingSampleRate() ); +} + + + +DelayEffect::~DelayEffect() +{ + if( m_delay ) + { + delete m_delay; + } + if( m_lfo ) + { + delete m_lfo; + } +} + + + + +bool DelayEffect::processAudioBuffer(sampleFrame* buf, const fpp_t frames) +{ + if( !isEnabled() || !isRunning () ) + { + return( false ); + } + double outSum = 0.0; + const float d = dryLevel(); + const float w = wetLevel(); + sample_t dryS[2]; + for( fpp_t f = 0; f < frames; ++f ) + { + dryS[0] = buf[f][0]; + dryS[1] = buf[f][1]; + m_lfo->setAmplitude( m_delayControls.m_lfoAmmountModel.value( f ) ); + m_lfo->setFrequency( 1.0 / m_delayControls.m_lfoTimeModel.value( f ) ); + m_delay->setLength( m_delayControls.m_delayTimeModel.value(f) * engine::mixer()->processingSampleRate() * m_lfo->tick() ); + m_delay->setFeedback( m_delayControls.m_feebackModel.value( f ) ); + m_delay->tick( &buf[f][0], &buf[f][1] ); + + buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] ); + buf[f][1] = ( d * dryS[1] ) + ( w * buf[f][1] ); + outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; + } + checkGate( outSum / frames ); + return isRunning(); +} + + + +extern "C" +{ + +//needed for getting plugin out of shared lib +Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data ) +{ + return new DelayEffect( parent , static_cast( data ) ); +} + +}} + diff --git a/plugins/delay/delayeffect.h b/plugins/delay/delayeffect.h new file mode 100644 index 000000000..58de87329 --- /dev/null +++ b/plugins/delay/delayeffect.h @@ -0,0 +1,49 @@ +/* + * delayeffect.h - declaration of DelayEffect class, the Delay plugin + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef DELAYEFFECT_H +#define DELAYEFFECT_H + +#include "Effect.h" +#include "delaycontrols.h" +#include "lfo.h" +#include "stereodelay.h" + +class DelayEffect : public Effect +{ +public: + DelayEffect(Model* parent , const Descriptor::SubPluginFeatures::Key* key ); + virtual ~DelayEffect(); + virtual bool processAudioBuffer( sampleFrame* buf, const fpp_t frames); + virtual EffectControls* controls() + { + return &m_delayControls; + } +private: + DelayControls m_delayControls; + StereoDelay* m_delay; + Lfo* m_lfo; +}; + +#endif // DELAYEFFECT_H diff --git a/plugins/delay/lfo.cpp b/plugins/delay/lfo.cpp new file mode 100644 index 000000000..b93e9ad46 --- /dev/null +++ b/plugins/delay/lfo.cpp @@ -0,0 +1,79 @@ +/* + * lfo.cpp - defination of Lfo class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "lfo.h" +#include + + + + +Lfo::Lfo( int samplerate ) +{ + m_samplerate = samplerate; + m_twoPiOverSr = TWOPI / samplerate; +} + + + +void Lfo::setFrequency( double frequency ) +{ + if( frequency < 0 || frequency > ( m_samplerate / 2.0 ) || frequency == m_frequency ) + { + return; + } + m_frequency = frequency; + m_increment = m_frequency * m_twoPiOverSr; +} + + + + +void Lfo::setAmplitude( float amplitude ) +{ + if( amplitude < 0.0 || amplitude > 1.0 ) + { + return; + } + m_amplitude = amplitude; +} + + + + +float Lfo::tick() +{ + float output = ( float )sin( m_phase ); + m_phase += m_increment; + if( m_phase >= TWOPI ) + { + m_phase -= TWOPI; + } + if( m_amplitude > 0.0001 ) + { + return ( ( output + 1.0 ) / 2.0 ) * m_amplitude; + } else + { + return 1; + } +} diff --git a/plugins/delay/lfo.h b/plugins/delay/lfo.h new file mode 100644 index 000000000..b561bbafa --- /dev/null +++ b/plugins/delay/lfo.h @@ -0,0 +1,53 @@ +/* + * lfo.h - declaration of Lfo class, a simple sine lfo + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef LFO_H +#define LFO_H + +#ifndef M_PI +#define M_PI (3.14159265358979321 ) +#endif +#define TWOPI ( 2.0 * M_PI ) + +class Lfo +{ +public: + Lfo( int samplerate ); + ~Lfo() + { + } + void setFrequency( double frequency ); + void setAmplitude( float amplitude ); + float tick(); + +private: + double m_frequency; + double m_phase; + double m_increment; + double m_amplitude; + double m_twoPiOverSr; + int m_samplerate; +}; + +#endif // LFO_H diff --git a/plugins/delay/logo.png b/plugins/delay/logo.png new file mode 100644 index 000000000..89e9f3680 Binary files /dev/null and b/plugins/delay/logo.png differ diff --git a/plugins/delay/stereodelay.cpp b/plugins/delay/stereodelay.cpp new file mode 100644 index 000000000..8344e2869 --- /dev/null +++ b/plugins/delay/stereodelay.cpp @@ -0,0 +1,100 @@ +/* + * stereodelay.cpp - defination of StereoDelay class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "stereodelay.h" +#include + + +StereoDelay::StereoDelay(int maxLength) +{ + m_buffer = 0; + m_buffer = ( float* )malloc(maxLength*2*sizeof( float ) ); + m_maxLength = maxLength; + m_length = m_maxLength; + m_index = 0; + m_feedback = 0.0f; + setLength( 0 ); +} + + + + +StereoDelay::~StereoDelay() +{ + if( m_buffer ) + { + free( m_buffer ); + } +} + + + + +void StereoDelay::setLength( int length ) +{ + if( length <= m_maxLength && length >= 0 ) + { + if( length < m_length ) + { + for( int i = length * 2; i < m_length *2; i++) + { + m_buffer[i] = 0.0f; + } + } + m_length = length; + } +} + + + + +void StereoDelay::setFeedback( float feedback ) +{ + m_feedback = feedback; +} + + + +float m_oldLeft; +float m_oldRight; +void StereoDelay::tick( float* left, float* right ) +{ + m_oldLeft = m_buffer[m_index]; + m_oldRight = m_buffer[m_index+1]; + m_buffer[m_index] = *left + ( m_oldLeft * m_feedback ); + m_buffer[m_index+1] = *right + ( m_oldRight * m_feedback ); + *left = m_oldLeft; + *right = m_oldRight; + m_index++; m_index++; + if( m_index > m_length ) + { + m_index = 0; + } +} + + + + + + diff --git a/plugins/delay/stereodelay.h b/plugins/delay/stereodelay.h new file mode 100644 index 000000000..f4e4431b7 --- /dev/null +++ b/plugins/delay/stereodelay.h @@ -0,0 +1,44 @@ +/* + * stereodelay.h - declaration of StereoDelay class. + * + * Copyright (c) 2014 David French + * + * This file is part of LMMS - http://lmms.io + * + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef STEREODELAY_H +#define STEREODELAY_H + +class StereoDelay +{ +public: + StereoDelay( int maxLength ); + ~StereoDelay(); + void setLength( int length ); + void setFeedback( float feedback ); + void tick( float* left, float* right ); +private: + float *m_buffer; + int m_maxLength; + int m_length; + int m_index; + float m_feedback; +}; + +#endif // STEREODELAY_H