• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revision8f32db1188fa2fe5a495b983301e41700cb6ace3 (tree)
Zeit2018-07-28 01:09:27
AutorStarg <starg@user...>
CommiterStarg

Log Message

[dls] Enhance connection block support

Ändern Zusammenfassung

Diff

--- a/timidity/dls.cpp
+++ b/timidity/dls.cpp
@@ -439,6 +439,9 @@ public:
439439 pSample->hpf[0] = -1;
440440 pSample->hpf[1] = 10;
441441
442+ pSample->tremolo_freq = 5000;
443+ pSample->vibrato_freq = 5000;
444+
442445 double attackTime = 0.0;
443446 double holdTime = 0.0;
444447 double decayTime = 0.0;
@@ -468,6 +471,11 @@ public:
468471 attackTime = TimeCentToSecond(b.Scale);
469472 continue;
470473 }
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+ }
471479 break;
472480
473481 case DLSConnectionBlock::DestinationKind::EG1DecayTime:
@@ -476,6 +484,12 @@ public:
476484 decayTime = TimeCentToSecond(b.Scale);
477485 continue;
478486 }
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+ }
479493 break;
480494
481495 case DLSConnectionBlock::DestinationKind::EG1SustainLevel:
@@ -494,6 +508,45 @@ public:
494508 }
495509 break;
496510
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+
497550 default:
498551 break;
499552 }