summaryrefslogtreecommitdiff
path: root/nyqstk/include/Saxofony.h
diff options
context:
space:
mode:
Diffstat (limited to 'nyqstk/include/Saxofony.h')
-rw-r--r--nyqstk/include/Saxofony.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/nyqstk/include/Saxofony.h b/nyqstk/include/Saxofony.h
new file mode 100644
index 0000000..7609d4a
--- /dev/null
+++ b/nyqstk/include/Saxofony.h
@@ -0,0 +1,108 @@
+/***************************************************/
+/*! \class Saxofony
+ \brief STK faux conical bore reed instrument class.
+
+ This class implements a "hybrid" digital
+ waveguide instrument that can generate a
+ variety of wind-like sounds. It has also been
+ referred to as the "blowed string" model. The
+ waveguide section is essentially that of a
+ string, with one rigid and one lossy
+ termination. The non-linear function is a
+ reed table. The string can be "blown" at any
+ point between the terminations, though just as
+ with strings, it is impossible to excite the
+ system at either end. If the excitation is
+ placed at the string mid-point, the sound is
+ that of a clarinet. At points closer to the
+ "bridge", the sound is closer to that of a
+ saxophone. See Scavone (2002) for more details.
+
+ This is a digital waveguide model, making its
+ use possibly subject to patents held by Stanford
+ University, Yamaha, and others.
+
+ Control Change Numbers:
+ - Reed Stiffness = 2
+ - Reed Aperture = 26
+ - Noise Gain = 4
+ - Blow Position = 11
+ - Vibrato Frequency = 29
+ - Vibrato Gain = 1
+ - Breath Pressure = 128
+
+ by Perry R. Cook and Gary P. Scavone, 1995 - 2005.
+*/
+/***************************************************/
+
+#ifndef STK_SAXOFONY_H
+#define STK_SAXOFONY_H
+
+#include "Instrmnt.h"
+#include "DelayL.h"
+#include "ReedTable.h"
+#include "OneZero.h"
+#include "Envelope.h"
+#include "Noise.h"
+#include "SineWave.h"
+
+namespace Nyq
+{
+
+class Saxofony : public Instrmnt
+{
+ public:
+ //! Class constructor, taking the lowest desired playing frequency.
+ /*!
+ An StkError will be thrown if the rawwave path is incorrectly set.
+ */
+ Saxofony(StkFloat lowestFrequency);
+
+ //! Class destructor.
+ ~Saxofony();
+
+ //! Reset and clear all internal state.
+ void clear();
+
+ //! Set instrument parameters for a particular frequency.
+ void setFrequency(StkFloat frequency);
+
+ //! Set the "blowing" position between the air column terminations (0.0 - 1.0).
+ void setBlowPosition(StkFloat aPosition);
+
+ //! Apply breath pressure to instrument with given amplitude and rate of increase.
+ void startBlowing(StkFloat amplitude, StkFloat rate);
+
+ //! Decrease breath pressure 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 delays_[2];
+ ReedTable reedTable_;
+ OneZero filter_;
+ Envelope envelope_;
+ Noise noise_;
+ SineWave vibrato_;
+ unsigned long length_;
+ StkFloat outputGain_;
+ StkFloat noiseGain_;
+ StkFloat vibratoGain_;
+ StkFloat position_;
+
+};
+
+} // namespace Nyq
+
+#endif