mirror of
https://github.com/thestk/stk
synced 2026-02-07 09:46:16 +00:00
Version 4.3.0
This commit is contained in:
committed by
Stephen Sinclair
parent
2cbce2d8bd
commit
27d9b79dc7
138
save/Blotar.h
Normal file
138
save/Blotar.h
Normal file
@@ -0,0 +1,138 @@
|
||||
/***************************************************/
|
||||
/*! \class Blotar
|
||||
\brief STK Blotar class.
|
||||
|
||||
This class is a port of Dan Trueman's MSP/PeRColate "blotar"
|
||||
instrument, which itself was a modified version of the STK
|
||||
waveguide flute model.
|
||||
|
||||
This port was made by Simon de Leon in the Music Technology area
|
||||
at McGill University in 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.
|
||||
|
||||
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 - 2007.
|
||||
*/
|
||||
/***************************************************/
|
||||
|
||||
#ifndef STK_BLOTAR_H
|
||||
#define STK_BLOTAR_H
|
||||
|
||||
#define WATCHIT 0.00001
|
||||
|
||||
#include "Instrmnt.h"
|
||||
#include "DelayL.h"
|
||||
#include "DelayA.h"
|
||||
#include "OneZero.h"
|
||||
#include "OnePole.h"
|
||||
#include "PoleZero.h"
|
||||
#include "Noise.h"
|
||||
#include "WaveLoop.h"
|
||||
#include "JetTable.h"
|
||||
#include "SineWave.h"
|
||||
#include <cmath>
|
||||
|
||||
class Blotar : public Instrmnt
|
||||
{
|
||||
public:
|
||||
|
||||
//! Default class consructor, default lowest frequency is 100 Hz
|
||||
Blotar();
|
||||
|
||||
//! Overloaded class constructor, taking the lowest desired playing frequency.
|
||||
Blotar( StkFloat lowestFrequency );
|
||||
|
||||
//! Class destructor.
|
||||
~Blotar();
|
||||
|
||||
//! Reset and clear all internal state.
|
||||
void clear();
|
||||
|
||||
//! 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 parameters for a particular frequency
|
||||
virtual void setFrequency(StkFloat frequency);
|
||||
|
||||
//! Set combDelay_ line length parameters to filter impulse response for particular position
|
||||
void setPluckPosition(StkFloat position);
|
||||
|
||||
//! Set mandolin impulse response playback rate
|
||||
void setBodySize(StkFloat size);
|
||||
|
||||
//! Set breath pressure
|
||||
void setBreathPressure(StkFloat bp);
|
||||
|
||||
//! Set jetDelay_ line length parameter
|
||||
void setJetDelay(StkFloat frequency);
|
||||
|
||||
//! Set gain of random breath pressure component
|
||||
void setNoiseGain(StkFloat noiseGain);
|
||||
|
||||
//! Set read rate from sinusoidal table, which is used to scale random breath pressure component
|
||||
void setVibatoFrequency( StkFloat frequency );
|
||||
|
||||
//! Set amplitude of sinusoidal table used to scale random breath pressure component
|
||||
void setVibratoGain( StkFloat gain );
|
||||
|
||||
//! Set the reflection coefficient for the jet delay (-1.0 - 1.0)
|
||||
void setJetReflection(StkFloat jetReflection);
|
||||
|
||||
//! Set the reflection coefficient for the air column delay (-1.0 - 1.0)
|
||||
void setEndReflection(StkFloat endReflection);
|
||||
|
||||
//! Interpolates between one-pole filter of the flute and lowpass filter of plucked string
|
||||
void setFilterRatio(StkFloat filterRatio);
|
||||
|
||||
//! Perform the control change specified by \e number and \e value (0.0 - 128.0).
|
||||
void controlChange(int number, StkFloat value);
|
||||
|
||||
protected:
|
||||
|
||||
void initialize( StkFloat lowestFrequency );
|
||||
StkFloat computeSample( void );
|
||||
void pluck( StkFloat amplitude );
|
||||
|
||||
DelayL boreDelay_;
|
||||
DelayL jetDelay_;
|
||||
DelayL combDelay_;
|
||||
PoleZero dcBlock_;
|
||||
OnePole fluteFilter_;
|
||||
OneZero lowpass_;
|
||||
Noise noise_;
|
||||
JetTable jetTable_;
|
||||
SineWave vibrato_;
|
||||
FileWvIn *soundfile_[12];
|
||||
|
||||
// Performance variables
|
||||
StkFloat pluckAmplitude_;
|
||||
StkFloat pluckPosition_;
|
||||
StkFloat maxPressure_; // breath pressure
|
||||
StkFloat noiseGain_;
|
||||
StkFloat vibratoGain_;
|
||||
StkFloat jetReflection_;
|
||||
StkFloat endReflection_;
|
||||
StkFloat filterRatio_; // one-zero vs. one-pole filter ratio
|
||||
StkFloat jetRatio_; // one-zero vs. one-pole filter ratio
|
||||
|
||||
int mic_; // directional position (NBody)
|
||||
bool waveDone_;
|
||||
|
||||
long length_;
|
||||
StkFloat lastFrequency_;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user