auto APU::Envelope::volume() const -> uint { return useSpeedAsVolume ? speed : decayVolume; } auto APU::Envelope::clock() -> void { if(reloadDecay) { reloadDecay = false; decayVolume = 0x0f; decayCounter = speed + 1; return; } if(--decayCounter == 0) { decayCounter = speed + 1; if(decayVolume || loopMode) decayVolume--; } } auto APU::Envelope::power() -> void { speed = 0; useSpeedAsVolume = 0; loopMode = 0; reloadDecay = 0; decayCounter = 0; decayVolume = 0; }