6#define _ISOC99_SOURCE 1
15#define M_PI 3.14159265358979323846
18#define M_2PI_F (2.0f * (float)M_PI)
19#define M_PI_F (float)M_PI
21#define VCF_FREQ_MAX (0.825f)
27#define pitch_ref_note 69
29#define volume_to_amplitude_scale 128
42 float volume, volume_exponent;
49 for (
i = 0;
i < 128; ++
i) {
63 volume_exponent = 1.0f / (2.0f * log10f(2.0f));
77 for (
i = 1;
i < 127;
i++) {
79 ol = (powf(((
float)
i / 127.0f), 0.32f) - 1.0f) * 100.0f;
80 amp = powf(2.0f, ol / 8.0f);
82 ol = (powf(((
float)10 / 127.0f), 0.32f) - 1.0f) * 100.0f;
83 amp = powf(2.0f, ol / 8.0f) * (float)
i / 10.0f;
91 for (
i = 0;
i <= 255;
i++) {
101 unsigned char segment;
105 segment =
lrintf(level - 0.5f);
106 fract = level - (float)segment;
117 float f = qdB - (float)
i;
151 float pos = osc->
pos;
152 float pw, gain, halfgain,
out;
157 out=(bp_high ? halfgain : -halfgain);
186 if (bp_high && pos >= pw) {
225 float *
in,
float *
out,
float *cutoff,
float qres,
float *amp)
228 float freqcut, freqcut2, highpass,
234 qres = 2.0f - qres * 1.995f;
240 freqcut = cutoff[
sample] * 2.0f;
241 freqcut2 = cutoff[
sample] * 4.0f;
247 delay2 = delay2 + freqcut * delay1;
248 highpass =
in[
sample] - delay2 - qres * delay1;
249 delay1 = freqcut * highpass + delay1;
251 delay4 = delay4 + freqcut2 * delay3;
252 highpass = delay2 - delay4 - qres * delay3;
253 delay3 = freqcut2 * highpass + delay3;
274 float *
out,
unsigned long sample_count,
275 int do_control_update)
280 float lfo_pos = voice->
lfo_pos,
289 float deltat =
synth->deltat;
290 float freq, cutoff, vcf_amt;
297 float vca_eg_rate_level[3], vca_eg_one_rate[3];
300 float vcf_eg_rate_level[3], vcf_eg_one_rate[3];
301 float qres =
synth->resonance;
306 float vcf_egdecay =
synth->decay;
310 if (do_control_update) {
314 fund_pitch *= 440.0f;
316 omega =
synth->tuning * fund_pitch;
327 vca_eg_rate_level[0] = 0.1f * vca_eg_amp;
328 vca_eg_one_rate[0] = 0.9f;
329 vca_eg_rate_level[1] = 0.0f;
330 vca_eg_one_rate[1] = 1.0f - 0.00001f;
331 vca_eg_rate_level[2] = 0.0f;
332 vca_eg_one_rate[2] = 0.975f;
336 vcf_eg_rate_level[0] = 0.1f * vcf_eg_amp;
337 vcf_eg_one_rate[0] = 1-0.1f;
338 vcf_eg_rate_level[1] = 0.0f;
339 vcf_eg_one_rate[1] = 1.0f - vcf_egdecay;
340 vcf_eg_rate_level[2] = 0.0f;
341 vcf_eg_one_rate[2] = 0.9995f;
348 cutoff = 0.008f *
synth->cutoff;
351 vcf_amt = 0.05f+(
synth->envmod*0.75);
357 vcf_acc_amt=.333f+ (
synth->resonance/1.5f);
360 vca_eg = vca_eg_rate_level[vca_eg_phase] + vca_eg_one_rate[vca_eg_phase] * vca_eg;
361 vcf_eg = vcf_eg_rate_level[vcf_eg_phase] + vcf_eg_one_rate[vcf_eg_phase] * vcf_eg;
367 if (!vca_eg_phase && vca_eg > vca_eg_amp) vca_eg_phase = 1;
368 if (!vcf_eg_phase && vcf_eg > vcf_eg_amp) vcf_eg_phase = 1;
372 vco(sample_count, voice, &voice->
osc1, osc_index, deltat * omega);
377 osc_index += sample_count;
379 if (do_control_update) {
384 if (vca_eg_phase == 2 && voice->
vca_buf[sample_count - 1] < 6.26e-6f) {
SYNTH_T * synth
Definition LocalZynAddSubFx.cpp:47
UINT_D64 w
Definition inflate.c:942
register unsigned i
Definition inflate.c:1575
unsigned f
Definition inflate.c:1572
JHUFF_TBL long freq[]
Definition jchuff.h:50
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
float_value_delta step_dd_table[MINBLEP_PHASES *STEP_DD_PULSE_LENGTH+1]
Definition minblep_tables.c:49
#define XDB_MESSAGE(type, fmt...)
Definition nekobee.h:66
#define XDB_NOTE
Definition nekobee.h:32
struct _nekobee_synth_t nekobee_synth_t
Definition nekobee_types.h:26
struct _nekobee_voice_t nekobee_voice_t
Definition nekobee_types.h:27
#define MINBLEP_BUFFER_LENGTH
Definition nekobee_voice.h:49
#define STEP_DD_PULSE_LENGTH
Definition nekobee_voice.h:42
static void nekobee_voice_off(nekobee_voice_t *voice)
Definition nekobee_voice.h:165
#define MINBLEP_PHASE_MASK
Definition nekobee_voice.h:40
#define DD_SAMPLE_DELAY
Definition nekobee_voice.h:51
#define MINBLEP_PHASES
Definition nekobee_voice.h:38
float nekobee_pitch[128]
Definition nekobee_voice_render.c:25
#define XSYNTH_NUGGET_SIZE
Definition nekobee_voice.h:34
#define LONGEST_DD_PULSE_LENGTH
Definition nekobee_voice.h:46
static float qdB_to_amplitude_table[4+256+0]
Definition nekobee_voice_render.c:35
void nekobee_voice_render(nekobee_synth_t *synth, nekobee_voice_t *voice, float *out, unsigned long sample_count, int do_control_update)
Definition nekobee_voice_render.c:273
static int tables_initialized
Definition nekobee_voice_render.c:23
static float volume(float level)
Definition nekobee_voice_render.c:99
static float volume_to_amplitude_table[4+volume_to_amplitude_scale+2]
Definition nekobee_voice_render.c:31
void nekobee_init_tables(void)
Definition nekobee_voice_render.c:38
void vco(unsigned long sample_count, nekobee_voice_t *voice, struct blosc *osc, int index, float w)
Definition nekobee_voice_render.c:146
#define pitch_ref_note
Definition nekobee_voice_render.c:27
#define VCF_FREQ_MAX
Definition nekobee_voice_render.c:21
void blosc_place_step_dd(float *buffer, int index, float phase, float w, float scale)
Definition nekobee_voice_render.c:123
static void vcf_4pole(nekobee_voice_t *voice, unsigned long sample_count, float *in, float *out, float *cutoff, float qres, float *amp)
Definition nekobee_voice_render.c:224
#define M_PI_F
Definition nekobee_voice_render.c:19
static float qdB_to_amplitude(float qdB)
Definition nekobee_voice_render.c:114
static float velocity_to_attenuation[128]
Definition nekobee_voice_render.c:33
#define volume_to_amplitude_scale
Definition nekobee_voice_render.c:29
float prev_pitch
Definition nekobee_voice.h:98
float delay3
Definition nekobee_voice.h:107
float vcf_eg
Definition nekobee_voice.h:103
struct blosc osc1
Definition nekobee_voice.h:101
float delay1
Definition nekobee_voice.h:105
unsigned char vca_eg_phase
Definition nekobee_voice.h:110
unsigned char vcf_eg_phase
Definition nekobee_voice.h:111
float c5
Definition nekobee_voice.h:109
float freqcut_buf[XSYNTH_NUGGET_SIZE]
Definition nekobee_voice.h:114
float delay2
Definition nekobee_voice.h:106
int osc_index
Definition nekobee_voice.h:112
float vca_buf[XSYNTH_NUGGET_SIZE]
Definition nekobee_voice.h:115
float target_pitch
Definition nekobee_voice.h:99
unsigned char velocity
Definition nekobee_voice.h:91
float vca_eg
Definition nekobee_voice.h:102
float delay4
Definition nekobee_voice.h:108
float osc_audio[MINBLEP_BUFFER_LENGTH]
Definition nekobee_voice.h:113
float lfo_pos
Definition nekobee_voice.h:100
unsigned int note_id
Definition nekobee_voice.h:87
Definition nekobee_voice.h:74
int bp_high
Definition nekobee_voice.h:77
float pos
Definition nekobee_voice.h:78
int waveform
Definition nekobee_voice.h:76
signed int sample
Definition tap_dynamics_m.c:41
memcpy(hh, h, RAND_HEAD_LEN)
int r
Definition crypt.c:458
#define void
Definition unzip.h:396