diff options
Diffstat (limited to 'src/main/java/se/lublin/humla/audio/BasicClippingShortMixer.java')
-rw-r--r-- | src/main/java/se/lublin/humla/audio/BasicClippingShortMixer.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/main/java/se/lublin/humla/audio/BasicClippingShortMixer.java b/src/main/java/se/lublin/humla/audio/BasicClippingShortMixer.java new file mode 100644 index 0000000..8c17838 --- /dev/null +++ b/src/main/java/se/lublin/humla/audio/BasicClippingShortMixer.java @@ -0,0 +1,25 @@ +package se.lublin.humla.audio; + +import java.util.Collection; + +/** + * A simple mixer that downsamples source floating point PCM to shorts, clipping naively. + */ +public class BasicClippingShortMixer implements IAudioMixer<float[], short[]> { + @Override + public void mix(Collection<IAudioMixerSource<float[]>> sources, short[] buffer, int bufferOffset, + int bufferLength) { + for (int i = 0; i < bufferLength; i++) { + float mix = 0; + for (IAudioMixerSource<float[]> source : sources) { + mix += source.getSamples()[i]; + } + // Clip to [-1,1]. + if (mix > 1) + mix = 1; + else if (mix < -1) + mix = -1; + buffer[i + bufferOffset] = (short) (mix * Short.MAX_VALUE); + } + } +} |