Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/se/lublin/humla/audio/BasicClippingShortMixer.java')
-rw-r--r--src/main/java/se/lublin/humla/audio/BasicClippingShortMixer.java25
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);
+ }
+ }
+}