package marytts.signalproc.process; import marytts.util.math.MathUtils; /** * The purpose of this class is to make sure that its data never exceeds amplitude +/-1. This is a simple and approximate * streaming-mode amplitude normalizer; it will use the maximum seen so far as the maximum amplitude, which means that audio at * the beginning of the file might play louder than audio at the end if the maximum is non-initial. * * @author marc * */ public class AmplitudeNormalizer implements InlineDataProcessor { private double max; public AmplitudeNormalizer(double initialMax) { this.max = initialMax; } public void applyInline(double[] data, int off, int len) { double localMax = MathUtils.absMax(data, off, len); if (localMax > max) { max = localMax; } for (int i = off; i < off + len; i++) { data[i] /= max; } } }