MCPcopy Create free account
hub / github.com/LabSound/LabSound / ResetSample

Method ResetSample

src/extended/SfxrNode.cpp:354–414  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

352}
353
354void SfxrNode::Sfxr::ResetSample(bool restart)
355{
356 if (!restart)
357 phase = 0;
358 fperiod = 100.0 / (p_base_freq * p_base_freq + 0.001);
359 period = (int) fperiod;
360 fmaxperiod = 100.0 / (p_freq_limit * p_freq_limit + 0.001);
361 fslide = 1.0 - pow((double) p_freq_ramp, 3.0) * 0.01;
362 fdslide = -pow((double) p_freq_dramp, 3.0) * 0.000001;
363 square_duty = 0.5f - p_duty * 0.5f;
364 square_slide = -p_duty_ramp * 0.00005f;
365 if (p_arp_mod >= 0.0f)
366 arp_mod = 1.0 - pow((double) p_arp_mod, 2.0) * 0.9;
367 else
368 arp_mod = 1.0 + pow((double) p_arp_mod, 2.0) * 10.0;
369 arp_time = 0;
370 arp_limit = (int) (pow(1.0f - p_arp_speed, 2.0f) * 20000 + 32);
371 if (p_arp_speed == 1.0f)
372 arp_limit = 0;
373 if (!restart)
374 {
375 // reset filter
376 fltp = 0.0f;
377 fltdp = 0.0f;
378 fltw = pow(p_lpf_freq, 3.0f) * 0.1f;
379 fltw_d = 1.0f + p_lpf_ramp * 0.0001f;
380 fltdmp = 5.0f / (1.0f + pow(p_lpf_resonance, 2.0f) * 20.0f) * (0.01f + fltw);
381 if (fltdmp > 0.8f) fltdmp = 0.8f;
382 fltphp = 0.0f;
383 flthp = pow(p_hpf_freq, 2.0f) * 0.1f;
384 flthp_d = 1.0f + p_hpf_ramp * 0.0003f;
385 // reset vibrato
386 vib_phase = 0.0f;
387 vib_speed = pow(p_vib_speed, 2.0f) * 0.01f;
388 vib_amp = p_vib_strength * 0.5f;
389 // reset envelope
390 env_vol = 0.0f;
391 env_stage = 0;
392 env_time = 0;
393 env_length[0] = (int) (p_env_attack * p_env_attack * 100000.0f);
394 env_length[1] = (int) (p_env_sustain * p_env_sustain * 100000.0f);
395 env_length[2] = (int) (p_env_decay * p_env_decay * 100000.0f);
396
397 fphase = pow(p_pha_offset, 2.0f) * 1020.0f;
398 if (p_pha_offset < 0.0f) fphase = -fphase;
399 fdphase = pow(p_pha_ramp, 2.0f) * 1.0f;
400 if (p_pha_ramp < 0.0f) fdphase = -fdphase;
401 iphase = abs((int) fphase);
402 ipp = 0;
403 for (int i = 0; i < 1024; i++)
404 phaser_buffer[i] = 0.0f;
405
406 for (int i = 0; i < 32; i++)
407 noise_buffer[i] = frnd(2.0f) - 1.0f;
408
409 rep_time = 0;
410 rep_limit = (int) (pow(1.0f - p_repeat_speed, 2.0f) * 20000 + 32);
411 if (p_repeat_speed == 0.0f)

Callers 2

SfxrNodeMethod · 0.80
processMethod · 0.80

Calls 1

frndFunction · 0.85

Tested by

no test coverage detected