MCPcopy Create free account
hub / github.com/OpenFodder/openfodder / modulateVolumeEnvelope

Method modulateVolumeEnvelope

Source/Amiga/rjp1.cpp:388–428  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

386}
387
388void Rjp1::modulateVolumeEnvelope(Rjp1Channel *channel) {
389 if (channel->envelopeMode) {
390 int16 es = channel->envelopeScale;
391 if (es) {
392 uint8 m = channel->envelopeEnd1;
393 if (m == 0) {
394 es = 0;
395 } else {
396 es *= m;
397 m = channel->envelopeEnd2;
398 if (m == 0) {
399 es = 0;
400 } else {
401 es /= m;
402 }
403 }
404 }
405 channel->envelopeVolume = channel->envelopeStart - es;
406 --channel->envelopeEnd1;
407 if (channel->envelopeEnd1 == -1) {
408 switch (channel->envelopeMode) {
409 case 0:
410 break;
411 case 2:
412 setSustain(channel);
413 break;
414 case 4:
415 setDecay(channel);
416 break;
417 case -1:
418 setSustain(channel);
419 break;
420 default:
421 //error("Unhandled envelope mode %d", channel->envelopeMode);
422 break;
423 }
424 return;
425 }
426 }
427 channel->volume = channel->envelopeVolume;
428}
429
430void Rjp1::setSustain(Rjp1Channel *channel) {
431 channel->envelopeMode = 0;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected