Revision | 8f32db1188fa2fe5a495b983301e41700cb6ace3 (tree) |
---|---|
Zeit | 2018-07-28 01:09:27 |
Autor | Starg <starg@user...> |
Commiter | Starg |
[dls] Enhance connection block support
@@ -439,6 +439,9 @@ public: | ||
439 | 439 | pSample->hpf[0] = -1; |
440 | 440 | pSample->hpf[1] = 10; |
441 | 441 | |
442 | + pSample->tremolo_freq = 5000; | |
443 | + pSample->vibrato_freq = 5000; | |
444 | + | |
442 | 445 | double attackTime = 0.0; |
443 | 446 | double holdTime = 0.0; |
444 | 447 | double decayTime = 0.0; |
@@ -468,6 +471,11 @@ public: | ||
468 | 471 | attackTime = TimeCentToSecond(b.Scale); |
469 | 472 | continue; |
470 | 473 | } |
474 | + else if (b.Source == DLSConnectionBlock::SourceKind::KeyOnVelocity && b.Control == DLSConnectionBlock::SourceKind::None && b.Transform == DLSConnectionBlock::TransformKind::None) | |
475 | + { | |
476 | + pSample->envelope_velf[0] = static_cast<int16>(b.Scale / 65536); | |
477 | + continue; | |
478 | + } | |
471 | 479 | break; |
472 | 480 | |
473 | 481 | case DLSConnectionBlock::DestinationKind::EG1DecayTime: |
@@ -476,6 +484,12 @@ public: | ||
476 | 484 | decayTime = TimeCentToSecond(b.Scale); |
477 | 485 | continue; |
478 | 486 | } |
487 | + else if (b.Source == DLSConnectionBlock::SourceKind::KeyNumber && b.Control == DLSConnectionBlock::SourceKind::None && b.Transform == DLSConnectionBlock::TransformKind::None) | |
488 | + { | |
489 | + // this is probably incorrect | |
490 | + pSample->envelope_keyf[1] = static_cast<int16>(b.Scale / 65536); | |
491 | + continue; | |
492 | + } | |
479 | 493 | break; |
480 | 494 | |
481 | 495 | case DLSConnectionBlock::DestinationKind::EG1SustainLevel: |
@@ -494,6 +508,45 @@ public: | ||
494 | 508 | } |
495 | 509 | break; |
496 | 510 | |
511 | + case DLSConnectionBlock::DestinationKind::LFOFrequency: | |
512 | + if (b.Source == DLSConnectionBlock::SourceKind::None && b.Control == DLSConnectionBlock::SourceKind::None && b.Transform == DLSConnectionBlock::TransformKind::None) | |
513 | + { | |
514 | + // mHz ? | |
515 | + int16 freq = static_cast<int16>(std::lround(std::pow(2.0, (b.Scale / 65536.0 - 6900.0) / 1200.0) * 440.0 * 1000.0)); | |
516 | + pSample->tremolo_freq = freq; | |
517 | + pSample->vibrato_freq = freq; | |
518 | + continue; | |
519 | + } | |
520 | + break; | |
521 | + | |
522 | + case DLSConnectionBlock::DestinationKind::LFOStartDelay: | |
523 | + if (b.Source == DLSConnectionBlock::SourceKind::None && b.Control == DLSConnectionBlock::SourceKind::None && b.Transform == DLSConnectionBlock::TransformKind::None) | |
524 | + { | |
525 | + int16 delay = static_cast<int16>(std::lround(TimeCentToSecond(b.Scale) * ::play_mode->rate * 1000.0)); | |
526 | + pSample->tremolo_delay = delay; | |
527 | + pSample->vibrato_delay = delay; | |
528 | + continue; | |
529 | + } | |
530 | + break; | |
531 | + | |
532 | + case DLSConnectionBlock::DestinationKind::Attenuation: | |
533 | + if (b.Source == DLSConnectionBlock::SourceKind::LFO && b.Control == DLSConnectionBlock::SourceKind::None && b.Transform == DLSConnectionBlock::TransformKind::None) | |
534 | + { | |
535 | + double gain = b.Scale / 655360.0; // dB | |
536 | + double rate = std::pow(10.0, gain * 0.1); | |
537 | + pSample->tremolo_to_amp = static_cast<int16>(std::lround((rate - 1.0) * 10000.0)); | |
538 | + continue; | |
539 | + } | |
540 | + break; | |
541 | + | |
542 | + case DLSConnectionBlock::DestinationKind::Pitch: | |
543 | + if (b.Source == DLSConnectionBlock::SourceKind::LFO && b.Control == DLSConnectionBlock::SourceKind::None && b.Transform == DLSConnectionBlock::TransformKind::None) | |
544 | + { | |
545 | + pSample->vibrato_to_pitch = static_cast<int16>(b.Scale / 65536); | |
546 | + continue; | |
547 | + } | |
548 | + break; | |
549 | + | |
497 | 550 | default: |
498 | 551 | break; |
499 | 552 | } |