mirror of
https://github.com/thestk/stk
synced 2026-02-06 17:26:15 +00:00
Version 4.3.0
This commit is contained in:
committed by
Stephen Sinclair
parent
2cbce2d8bd
commit
27d9b79dc7
158
save/Ublotar.h
Normal file
158
save/Ublotar.h
Normal file
@@ -0,0 +1,158 @@
|
||||
/***************************************************/
|
||||
/*! \class Ublotar
|
||||
\brief STK Ublotar model class.
|
||||
|
||||
WaveGuide Flute ala Karjalainen,
|
||||
Smith, Waryznyk, etc.
|
||||
with polynomial Jet ala Cook
|
||||
by Perry Cook, 1995-96
|
||||
|
||||
ported to MSP by Dan Trueman, 2000
|
||||
and modified to become the nearly
|
||||
righteous Ublotar. Extension of the Blotar to
|
||||
include 6 strings and pre/post distortion outputs,
|
||||
more plucking options; closer to the Sullivan electric
|
||||
guitar model, while retaining some of the flute
|
||||
potentials of the blotar~
|
||||
|
||||
Ublotar modifications ported to STK by
|
||||
Simon de Leon, 2006.
|
||||
|
||||
This is a digital waveguide model, making its
|
||||
use possibly subject to patents held by
|
||||
Stanford University, Yamaha, and others.
|
||||
There exist at least two patents, assigned to
|
||||
Stanford, bearing the names of Karplus and/or
|
||||
Strong.
|
||||
|
||||
by Perry R. Cook and Gary P. Scavone, 1995 - 2007.
|
||||
*/
|
||||
/***************************************************/
|
||||
|
||||
#ifndef STK_PLUCKED_H
|
||||
#define STK_PLUCKED_H
|
||||
|
||||
#define WATCHIT 0.00001
|
||||
#define NUM_STRINGS 6
|
||||
#define MAX_INPUTS 10
|
||||
#define VIBLENGTH 1024
|
||||
|
||||
#include "Instrmnt.h"
|
||||
#include "DelayL.h"
|
||||
#include "DelayA.h"
|
||||
#include "OneZero.h"
|
||||
#include "OnePole.h"
|
||||
#include "Noise.h"
|
||||
#include "WaveLoop.h"
|
||||
#include "JetTable.h"
|
||||
#include <cmath>
|
||||
#include <vector>
|
||||
#include "Flute.h"
|
||||
#include "Blotar.h"
|
||||
#include "TwoPole.h"
|
||||
|
||||
class Ublotar : public Instrmnt
|
||||
{
|
||||
public:
|
||||
|
||||
//! Default class destructor.
|
||||
~Ublotar ();
|
||||
|
||||
//! Class constructor, taking the lowest desired playing frequency.
|
||||
Ublotar (StkFloat lowestFrequency);
|
||||
|
||||
//! Start a note with the given frequency and amplitude
|
||||
virtual void noteOn (StkFloat frequency, StkFloat amplitude);
|
||||
|
||||
//! Stop a note with the given amplitude (speed of decay).
|
||||
virtual void noteOff (StkFloat amplitude);
|
||||
|
||||
//! Set boreDelay_ line length parameter of stringtopluck_ for a particular frequency
|
||||
virtual void setFrequency (StkFloat frequency);
|
||||
|
||||
//! Set boreDelay_ line length parameters of all strings for certain frequencies
|
||||
void setFrequency (StkFloat *frequency);
|
||||
|
||||
//! Set pre-distortion gain
|
||||
void setPredistortionGain (StkFloat predistortionGain);
|
||||
|
||||
//! Set post-distortion gain
|
||||
void setPostdistortionGain (StkFloat postdistortionGain);
|
||||
|
||||
//! Set breath pressure
|
||||
void setBreathPressure (StkFloat bp);
|
||||
|
||||
//! Set jetDelay_ line length parameter
|
||||
void setJetDelay (StkFloat frequency);
|
||||
|
||||
//! Set the reflection coefficient for the jet delay (-1.0 - 1.0)
|
||||
void setJetReflection( StkFloat jetReflection ); // feedgain in ublotar~
|
||||
|
||||
//! Set the reflection coefficient for the air column delay (-1.0 - 1.0)
|
||||
void setEndReflection( StkFloat endReflection ); // setsustain in ublotar~
|
||||
|
||||
//! Interpolates between one-pole filter of the flute and lowpass filter of plucked string
|
||||
void setFilterRatio( StkFloat filterRatio ); // lowpasscross in ublotar~
|
||||
|
||||
//! Set distortion gain
|
||||
void setDistortGain( StkFloat distortGain ); // distortgain in ublotar~
|
||||
|
||||
//! Set hard limiter value to prevent infinitely growing amplitudes
|
||||
void setLimit( StkFloat limit ); // setlimit in ublotar~
|
||||
|
||||
//! Set gain of random breath pressure component
|
||||
void setNoiseGain( StkFloat noiseGain ); // noisegain in ublotar~
|
||||
|
||||
//! Set vibrato parameters, which are used to scale random breath pressure component
|
||||
void setVib( StkFloat vibFreq, StkFloat vibAmount ); // vib in ublotar~
|
||||
|
||||
//! Set string that frequency and amplitude parameters in subsequent call to noteOn will alter
|
||||
void setStringToPluck (int stringtopluck);
|
||||
|
||||
protected:
|
||||
StkFloat computeSample ( void );
|
||||
StkFloat vib ( void );
|
||||
|
||||
|
||||
// Global string parameters
|
||||
StkFloat in_[MAX_INPUTS];
|
||||
StkFloat jd_;
|
||||
StkFloat jr_;
|
||||
StkFloat predistortion_gain_;
|
||||
StkFloat predistortion_outgain_;
|
||||
StkFloat postdistortion_outgain_;
|
||||
StkFloat limit_;
|
||||
StkFloat *vibTable_;
|
||||
DelayL jetDelay_;
|
||||
StkFloat bp_;
|
||||
StkFloat va_;
|
||||
StkFloat ng_;
|
||||
|
||||
// String-Bore variables
|
||||
StkFloat fr_[NUM_STRINGS];
|
||||
StkFloat er_;
|
||||
StkFloat pluckAmp_[NUM_STRINGS];
|
||||
StkFloat pluckPos_[NUM_STRINGS];
|
||||
int squish_[NUM_STRINGS]; // number of times to LPF the blostring
|
||||
StkFloat filterRatio_;
|
||||
StkFloat resetDelay_[NUM_STRINGS];
|
||||
OnePole flute_filter_[NUM_STRINGS];
|
||||
OneZero lowpass_[NUM_STRINGS];
|
||||
StkFloat vibTime_, vibRate_;
|
||||
DelayL boreDelay_[NUM_STRINGS];
|
||||
StkFloat last_output_;
|
||||
StkFloat lastFreq_[NUM_STRINGS], lastLength_[NUM_STRINGS];
|
||||
|
||||
// Auxiliary variables
|
||||
StkFloat length_;
|
||||
int vibLength_;
|
||||
StkFloat position_;
|
||||
int stringtopluck_;
|
||||
struct {
|
||||
StkFloat output, input, lastOutput;
|
||||
} killdc_[NUM_STRINGS], pluckblock_;
|
||||
Noise makenoise_;
|
||||
JetTable flutejet_;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user