static inline uint16_t enveEmuDecay(sidOperator* pVoice) { #ifdef SID_FPUENVE pVoice->enveStep = (uint16_t)pVoice->fenveStep; #endif #if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE) if ( pVoice->enveStep.w[HI] >= releaseTabLen ) #else if ( pVoice->enveStep >= releaseTabLen ) #endif { pVoice->enveVol = pVoice->enveSusVol; return enveEmuAlterSustain(pVoice); /* start sustain */ } else { #if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE) pVoice->enveVol = releaseTab[pVoice->enveStep.w[HI]]; #else pVoice->enveVol = releaseTab[pVoice->enveStep]; #endif /* Will be controlled from sidEmuSet2(). */ if ( pVoice->enveVol <= pVoice->enveSusVol ) { pVoice->enveVol = pVoice->enveSusVol; return enveEmuAlterSustain(pVoice); /* start sustain */ } else { enveEmuEnveAdvance(pVoice); return masterAmplModTable[ pVoice->sid->masterVolumeAmplIndex + pVoice->enveVol ]; } } }
inline uword enveEmuSustainDecay(struct sidOperator* pVoice) { #ifdef SID_FPUENVE pVoice->enveStep = (uword)pVoice->fenveStep; #endif #if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE) if ( pVoice->enveStep.w[HI] >= releaseTabLen ) #else if ( pVoice->enveStep >= releaseTabLen ) #endif { pVoice->enveVol = releaseTab[releaseTabLen-1]; return enveEmuAlterSustain(pVoice); } else { #if defined(DIRECT_FIXPOINT) && !defined(SID_FPUENVE) pVoice->enveVol = releaseTab[pVoice->enveStep.w[HI]]; #else pVoice->enveVol = releaseTab[pVoice->enveStep]; #endif // Will be controlled from sidEmuSet2(). if ( pVoice->enveVol <= pVoice->enveSusVol ) { pVoice->enveVol = pVoice->enveSusVol; return enveEmuAlterSustain(pVoice); } else { enveEmuEnveAdvance(pVoice); return masterAmplModTable[ masterVolumeAmplIndex + pVoice->enveVol ]; } } }