package com.xenoage.zong.io.midi.out.dynamics.type; import com.xenoage.utils.annotations.Const; import com.xenoage.zong.core.music.direction.DynamicValue; import com.xenoage.zong.io.midi.out.dynamics.DynamicsInterpretation; import lombok.Data; /** * A crescendo or decrescendo between two dynamic values. * * @author Andreas Wenger */ @Const @Data public class GradientDynamics implements DynamicsType { /** The beginning dynamics of the gradient. */ public final DynamicValue start; /** The ending dynamics of the gradient. */ public final DynamicValue end; @Override public DynamicValue getEndValue() { return end; } @Override public float getVolumeAt(float progress, DynamicsInterpretation interpretation) { float startVolume = interpretation.getVolume(start); float endVolume = interpretation.getVolume(end); return startVolume + (endVolume - startVolume) * progress; } @Override public String toString() { return start + "➔" + end; } }