summaryrefslogtreecommitdiff
path: root/nyqstk/include/Flute.h
diff options
context:
space:
mode:
Diffstat (limited to 'nyqstk/include/Flute.h')
-rw-r--r--nyqstk/include/Flute.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/nyqstk/include/Flute.h b/nyqstk/include/Flute.h
new file mode 100644
index 0000000..5b6f3bd
--- /dev/null
+++ b/nyqstk/include/Flute.h
@@ -0,0 +1,108 @@
+/***************************************************/
+/*! \class Flute
+ \brief STK flute physical model class.
+
+ This class implements a simple flute
+ physical model, as discussed by Karjalainen,
+ Smith, Waryznyk, etc. The jet model uses
+ a polynomial, a la Cook.
+
+ This is a digital waveguide model, making its
+ use possibly subject to patents held by Stanford
+ University, Yamaha, and others.
+
+ Control Change Numbers:
+ - Jet Delay = 2
+ - Noise Gain = 4
+ - Vibrato Frequency = 11
+ - Vibrato Gain = 1
+ - Breath Pressure = 128
+
+ by Perry R. Cook and Gary P. Scavone, 1995 - 2005.
+*/
+/***************************************************/
+
+#ifndef STK_FLUTE_H
+#define STK_FLUTE_H
+
+#include "Instrmnt.h"
+#include "JetTable.h"
+#include "DelayL.h"
+#include "OnePole.h"
+#include "PoleZero.h"
+#include "Noise.h"
+#include "ADSR.h"
+#include "SineWave.h"
+
+namespace Nyq
+{
+
+class Flute : public Instrmnt
+{
+ public:
+ //! Class constructor, taking the lowest desired playing frequency.
+ /*!
+ An StkError will be thrown if the rawwave path is incorrectly set.
+ */
+ Flute(StkFloat lowestFrequency);
+
+ //! Class destructor.
+ ~Flute();
+
+ //! Reset and clear all internal state.
+ void clear();
+
+ //! Set instrument parameters for a particular frequency.
+ void setFrequency(StkFloat frequency);
+
+ //! Set the reflection coefficient for the jet delay (-1.0 - 1.0).
+ void setJetReflection(StkFloat coefficient);
+
+ //! Set the reflection coefficient for the air column delay (-1.0 - 1.0).
+ void setEndReflection(StkFloat coefficient);
+
+ //! Set the length of the jet delay in terms of a ratio of jet delay to air column delay lengths.
+ void setJetDelay(StkFloat aRatio);
+
+ //! Apply breath velocity to instrument with given amplitude and rate of increase.
+ void startBlowing(StkFloat amplitude, StkFloat rate);
+
+ //! Decrease breath velocity with given rate of decrease.
+ void stopBlowing(StkFloat rate);
+
+ //! Start a note with the given frequency and amplitude.
+ void noteOn(StkFloat frequency, StkFloat amplitude);
+
+ //! Stop a note with the given amplitude (speed of decay).
+ void noteOff(StkFloat amplitude);
+
+ //! Perform the control change specified by \e number and \e value (0.0 - 128.0).
+ void controlChange(int number, StkFloat value);
+
+ protected:
+
+ StkFloat computeSample( void );
+
+ DelayL jetDelay_;
+ DelayL boreDelay_;
+ JetTable jetTable_;
+ OnePole filter_;
+ PoleZero dcBlock_;
+ Noise noise_;
+ ADSR adsr_;
+ SineWave vibrato_;
+ unsigned long length_;
+ StkFloat lastFrequency_;
+ StkFloat maxPressure_;
+ StkFloat jetReflection_;
+ StkFloat endReflection_;
+ StkFloat noiseGain_;
+ StkFloat vibratoGain_;
+ StkFloat outputGain_;
+ StkFloat jetRatio_;
+
+};
+
+} // namespace Nyq
+
+#endif