#include <voice.h>
|
| Voice (Fluid *) |
|
Channel * | get_channel () const |
|
void | voice_start () |
|
void | off () |
|
void | init (Sample *, Channel *, int key, int vel, unsigned id, double tuning) |
|
void | gen_incr (int i, float val) |
|
void | gen_set (int i, float val) |
|
float | gen_get (int gen) |
|
unsigned int | get_id () const |
|
bool | isPlaying () |
|
void | set_param (int gen, float nrpn_value, int abs) |
|
void | update_param (int gen) |
|
double | GEN (int n) |
|
void | modulate_all () |
| fluid_voice_modulate_all More...
|
|
void | modulate (bool _cc, int _ctrl) |
| fluid_voice_modulate More...
|
|
float | get_lower_boundary_for_attenuation () |
|
void | check_sample_sanity () |
|
void | noteoff () |
|
void | kill_excl () |
|
int | calculate_hold_decay_frames (int gen_base, int gen_key2base, int is_decay) |
|
void | calculate_gen_pitch () |
|
bool | RELEASED () const |
|
bool | SUSTAINED () const |
|
bool | PLAYING () const |
|
bool | ON () const |
|
int | SAMPLEMODE () const |
|
void | calcVolEnv (int n, fluid_env_data_t *env_data) |
|
void | write (unsigned n, float *out, float *reverb, float *chorus) |
|
void | add_mod (const Mod *mod, int mode) |
|
bool | updateAmpInc (unsigned int &nextNewAmpInc, std::map< int, qreal >::iterator &curSample2AmpInc, qreal &dsp_amp_incr, unsigned int &dsp_i) |
|
int | dsp_float_interpolate_none (unsigned) |
|
int | dsp_float_interpolate_linear (unsigned) |
|
int | dsp_float_interpolate_4th_order (unsigned) |
|
int | dsp_float_interpolate_7th_order (unsigned) |
|
◆ Voice()
Voice::Voice |
( |
Fluid * |
f | ) |
|
◆ add_mod()
void Voice::add_mod |
( |
const Mod * |
mod, |
|
|
int |
mode |
|
) |
| |
◆ calculate_gen_pitch()
void Voice::calculate_gen_pitch |
( |
| ) |
|
◆ calculate_hold_decay_frames()
int Voice::calculate_hold_decay_frames |
( |
int |
gen_base, |
|
|
int |
gen_key2base, |
|
|
int |
is_decay |
|
) |
| |
◆ calcVolEnv()
◆ check_sample_sanity()
void Voice::check_sample_sanity |
( |
| ) |
|
◆ dsp_float_config()
void Voice::dsp_float_config |
( |
| ) |
|
|
static |
◆ dsp_float_interpolate_4th_order()
int Voice::dsp_float_interpolate_4th_order |
( |
unsigned |
n | ) |
|
◆ dsp_float_interpolate_7th_order()
int Voice::dsp_float_interpolate_7th_order |
( |
unsigned |
n | ) |
|
◆ dsp_float_interpolate_linear()
int Voice::dsp_float_interpolate_linear |
( |
unsigned |
n | ) |
|
◆ dsp_float_interpolate_none()
int Voice::dsp_float_interpolate_none |
( |
unsigned |
n | ) |
|
◆ effects()
void Voice::effects |
( |
int |
startBufIdx, |
|
|
int |
count, |
|
|
float * |
out, |
|
|
float * |
effect1, |
|
|
float * |
effect2 |
|
) |
| |
|
private |
◆ GEN()
double FluidS::Voice::GEN |
( |
int |
n | ) |
|
|
inline |
◆ gen_get()
float Voice::gen_get |
( |
int |
gen | ) |
|
◆ gen_incr()
void Voice::gen_incr |
( |
int |
i, |
|
|
float |
val |
|
) |
| |
◆ gen_set()
void Voice::gen_set |
( |
int |
i, |
|
|
float |
val |
|
) |
| |
◆ generateDataForDSPChain()
bool Voice::generateDataForDSPChain |
( |
unsigned |
frames | ) |
|
|
private |
◆ get_channel()
Channel* FluidS::Voice::get_channel |
( |
| ) |
const |
|
inline |
◆ get_id()
unsigned int FluidS::Voice::get_id |
( |
| ) |
const |
|
inline |
◆ get_lower_boundary_for_attenuation()
float Voice::get_lower_boundary_for_attenuation |
( |
| ) |
|
◆ init()
void FluidS::Voice::init |
( |
Sample * |
, |
|
|
Channel * |
, |
|
|
int |
key, |
|
|
int |
vel, |
|
|
unsigned |
id, |
|
|
double |
tuning |
|
) |
| |
◆ interpolateGeneratedDSPData()
std::tuple< unsigned, bool > Voice::interpolateGeneratedDSPData |
( |
unsigned |
n | ) |
|
|
private |
◆ isPlaying()
bool FluidS::Voice::isPlaying |
( |
| ) |
|
|
inline |
◆ kill_excl()
void Voice::kill_excl |
( |
| ) |
|
◆ modulate()
void Voice::modulate |
( |
bool |
_cc, |
|
|
int |
_ctrl |
|
) |
| |
fluid_voice_modulate
In this implementation, I want to make sure that all controllers are event based: the parameter values of the DSP algorithm should only be updates when a controller event arrived and not at every iteration of the audio cycle (which would probably be feasible if the synth was made in silicon).
The update is done in three steps:
- first, we look for all the modulators that have the changed controller as a source. This will yield a list of generators that will be changed because of the controller event.
- For every changed generator, calculate its new value. This is the sum of its original value plus the values of al the attached modulators.
- For every changed generator, convert its value to the correct unit of the corresponding DSP parameter
◆ modulate_all()
void Voice::modulate_all |
( |
| ) |
|
fluid_voice_modulate_all
Update all the modulators. This function is called after a ALL_CTRL_OFF MIDI message has been received (CC 121).
◆ noteoff()
◆ off()
◆ ON()
bool FluidS::Voice::ON |
( |
| ) |
const |
|
inline |
◆ PLAYING()
bool FluidS::Voice::PLAYING |
( |
| ) |
const |
|
inline |
◆ RELEASED()
bool FluidS::Voice::RELEASED |
( |
| ) |
const |
|
inline |
◆ SAMPLEMODE()
int FluidS::Voice::SAMPLEMODE |
( |
| ) |
const |
|
inline |
◆ set_param()
void Voice::set_param |
( |
int |
gen, |
|
|
float |
nrpn_value, |
|
|
int |
abs |
|
) |
| |
◆ SUSTAINED()
bool FluidS::Voice::SUSTAINED |
( |
| ) |
const |
|
inline |
◆ update_param()
void Voice::update_param |
( |
int |
gen | ) |
|
◆ updateAmpInc()
bool Voice::updateAmpInc |
( |
unsigned int & |
nextNewAmpInc, |
|
|
std::map< int, qreal >::iterator & |
curSample2AmpInc, |
|
|
qreal & |
dsp_amp_incr, |
|
|
unsigned int & |
dsp_i |
|
) |
| |
|
inline |
◆ voice_start()
void Voice::voice_start |
( |
| ) |
|
◆ write()
void Voice::write |
( |
unsigned |
n, |
|
|
float * |
out, |
|
|
float * |
reverb, |
|
|
float * |
chorus |
|
) |
| |
◆ _cacheChorus
std::vector<float> FluidS::Voice::_cacheChorus |
|
private |
◆ _cachedFrames
unsigned FluidS::Voice::_cachedFrames = 0 |
|
private |
◆ _cacheOut
std::vector<float> FluidS::Voice::_cacheOut |
|
private |
◆ _cacheReverb
std::vector<float> FluidS::Voice::_cacheReverb |
|
private |
◆ _fluid
Fluid* FluidS::Voice::_fluid |
|
private |
◆ _initialCacheFrames
unsigned FluidS::Voice::_initialCacheFrames = 0 |
|
private |
◆ _noteTuning
double FluidS::Voice::_noteTuning |
|
private |
◆ a1
◆ a1_incr
float FluidS::Voice::a1_incr |
◆ a2
◆ a2_incr
float FluidS::Voice::a2_incr |
◆ amp
◆ amp_chorus
float FluidS::Voice::amp_chorus |
◆ amp_incr
qreal FluidS::Voice::amp_incr |
◆ amp_left
float FluidS::Voice::amp_left |
◆ amp_reverb
float FluidS::Voice::amp_reverb |
◆ amp_right
float FluidS::Voice::amp_right |
◆ amplitude_that_reaches_noise_floor_loop
float FluidS::Voice::amplitude_that_reaches_noise_floor_loop |
◆ amplitude_that_reaches_noise_floor_nonloop
float FluidS::Voice::amplitude_that_reaches_noise_floor_nonloop |
◆ attenuation
float FluidS::Voice::attenuation |
◆ b02
◆ b02_incr
float FluidS::Voice::b02_incr |
◆ b1
◆ b1_incr
float FluidS::Voice::b1_incr |
◆ chan
unsigned char FluidS::Voice::chan |
◆ channel
◆ check_sample_sanity_flag
int FluidS::Voice::check_sample_sanity_flag |
◆ chorus_send
float FluidS::Voice::chorus_send |
◆ debug
◆ dsp_buf
std::vector<float> FluidS::Voice::dsp_buf |
◆ end
◆ filter_coeff_incr_count
int FluidS::Voice::filter_coeff_incr_count |
◆ filter_gain
float FluidS::Voice::filter_gain |
◆ filter_startup
int FluidS::Voice::filter_startup |
◆ fres
float FluidS::Voice::fres |
◆ gen
◆ has_looped
bool FluidS::Voice::has_looped |
◆ hist1
float FluidS::Voice::hist1 |
◆ hist2
float FluidS::Voice::hist2 |
◆ id
unsigned int FluidS::Voice::id |
◆ interp_coeff
float Voice::interp_coeff |
|
staticprivate |
◆ interp_coeff_linear
float Voice::interp_coeff_linear |
|
staticprivate |
◆ interp_method
int FluidS::Voice::interp_method |
◆ key
unsigned char FluidS::Voice::key |
◆ last_fres
float FluidS::Voice::last_fres |
◆ loopend
int FluidS::Voice::loopend |
◆ loopstart
int FluidS::Voice::loopstart |
◆ min_attenuation_cB
float FluidS::Voice::min_attenuation_cB |
◆ mod
◆ mod_count
int FluidS::Voice::mod_count |
◆ modenv_count
unsigned int FluidS::Voice::modenv_count |
◆ modenv_data
◆ modenv_section
int FluidS::Voice::modenv_section |
◆ modenv_to_fc
float FluidS::Voice::modenv_to_fc |
◆ modenv_to_pitch
float FluidS::Voice::modenv_to_pitch |
◆ modenv_val
float FluidS::Voice::modenv_val |
◆ modlfo_delay
unsigned int FluidS::Voice::modlfo_delay |
◆ modlfo_dur
unsigned int FluidS::Voice::modlfo_dur |
◆ modlfo_pos
unsigned int FluidS::Voice::modlfo_pos |
◆ modlfo_to_fc
float FluidS::Voice::modlfo_to_fc |
◆ modlfo_to_pitch
float FluidS::Voice::modlfo_to_pitch |
◆ modlfo_to_vol
float FluidS::Voice::modlfo_to_vol |
◆ modlfo_val
float FluidS::Voice::modlfo_val |
◆ pan
◆ phase
Phase FluidS::Voice::phase |
◆ phase_incr
float FluidS::Voice::phase_incr |
◆ pitch
float FluidS::Voice::pitch |
◆ positionToTurnOff
int FluidS::Voice::positionToTurnOff |
◆ q_lin
float FluidS::Voice::q_lin |
◆ ref
double FluidS::Voice::ref |
◆ reverb_send
float FluidS::Voice::reverb_send |
◆ root_pitch
float FluidS::Voice::root_pitch |
◆ root_pitch_hz
float FluidS::Voice::root_pitch_hz |
◆ sample
◆ Sample2AmpInc
std::map<int, qreal> FluidS::Voice::Sample2AmpInc |
◆ sinc_table7
◆ start
◆ status
unsigned char FluidS::Voice::status |
◆ ticks
unsigned int FluidS::Voice::ticks |
◆ vel
unsigned char FluidS::Voice::vel |
◆ viblfo_delay
unsigned int FluidS::Voice::viblfo_delay |
◆ viblfo_incr
float FluidS::Voice::viblfo_incr |
◆ viblfo_to_pitch
float FluidS::Voice::viblfo_to_pitch |
◆ viblfo_val
float FluidS::Voice::viblfo_val |
◆ volenv_count
unsigned int FluidS::Voice::volenv_count |
◆ volenv_data
◆ volenv_section
int FluidS::Voice::volenv_section |
◆ volenv_val
float FluidS::Voice::volenv_val |
The documentation for this class was generated from the following files: