From 8fe3d661595cf6d82f763e4c3c6e5f91ab5cb52e Mon Sep 17 00:00:00 2001 From: James Ball Date: Wed, 19 May 2021 22:27:18 +0100 Subject: [PATCH] Add distortion effects --- pom.xml | 2 +- .../sh/ball/audio/effect/EffectFactory.java | 12 ++++++++- .../java/sh/ball/audio/effect/EffectType.java | 4 ++- src/main/java/sh/ball/gui/Controller.java | 26 ++++++++++++++++++- src/main/resources/fxml/osci-render.fxml | 16 +++++++----- 5 files changed, 50 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 3628642..c763133 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ sh.ball osci-render - 1.3.0 + 1.3.1 osci-render diff --git a/src/main/java/sh/ball/audio/effect/EffectFactory.java b/src/main/java/sh/ball/audio/effect/EffectFactory.java index 84d927e..66d0489 100644 --- a/src/main/java/sh/ball/audio/effect/EffectFactory.java +++ b/src/main/java/sh/ball/audio/effect/EffectFactory.java @@ -24,7 +24,7 @@ public class EffectFactory { return (double) tmp / factor; } - public static Effect edgeStretch(double value) { + public static Effect horizontalDistort(double value) { return (count, v) -> { if (count % 2 == 0) { return v.translate(new Vector2(value, 0)); @@ -33,4 +33,14 @@ public class EffectFactory { } }; } + + public static Effect verticalDistort(double value) { + return (count, v) -> { + if (count % 2 == 0) { + return v.translate(new Vector2(0, value)); + } else { + return v.translate(new Vector2(0, -value)); + } + }; + } } diff --git a/src/main/java/sh/ball/audio/effect/EffectType.java b/src/main/java/sh/ball/audio/effect/EffectType.java index 642d76f..0dc4e3e 100644 --- a/src/main/java/sh/ball/audio/effect/EffectType.java +++ b/src/main/java/sh/ball/audio/effect/EffectType.java @@ -5,5 +5,7 @@ public enum EffectType { BIT_CRUSH, SCALE, ROTATE, - TRANSLATE + TRANSLATE, + VERTICAL_DISTORT, + HORIZONTAL_DISTORT } diff --git a/src/main/java/sh/ball/gui/Controller.java b/src/main/java/sh/ball/gui/Controller.java index 99a2e4b..13d353c 100644 --- a/src/main/java/sh/ball/gui/Controller.java +++ b/src/main/java/sh/ball/gui/Controller.java @@ -108,6 +108,14 @@ public class Controller implements Initializable { private CheckBox bitCrushCheckBox; @FXML private Slider bitCrushSlider; + @FXML + private CheckBox verticalDistortCheckBox; + @FXML + private Slider verticalDistortSlider; + @FXML + private CheckBox horizontalDistortCheckBox; + @FXML + private Slider horizontalDistortSlider; public Controller(Renderer, AudioInputStream> renderer) throws IOException { this.renderer = renderer; @@ -141,7 +149,11 @@ public class Controller implements Initializable { EffectType.VECTOR_CANCELLING, vectorCancellingSlider, EffectType.BIT_CRUSH, - bitCrushSlider + bitCrushSlider, + EffectType.VERTICAL_DISTORT, + verticalDistortSlider, + EffectType.HORIZONTAL_DISTORT, + horizontalDistortSlider ); } @@ -175,6 +187,12 @@ public class Controller implements Initializable { InvalidationListener bitCrushListener = e -> updateEffect(EffectType.BIT_CRUSH, bitCrushCheckBox.isSelected(), EffectFactory.bitCrush(bitCrushSlider.getValue())); + InvalidationListener verticalDistortListener = e -> + updateEffect(EffectType.VERTICAL_DISTORT, verticalDistortCheckBox.isSelected(), + EffectFactory.verticalDistort(verticalDistortSlider.getValue())); + InvalidationListener horizontalDistortListener = e -> + updateEffect(EffectType.HORIZONTAL_DISTORT, horizontalDistortCheckBox.isSelected(), + EffectFactory.horizontalDistort(horizontalDistortSlider.getValue())); vectorCancellingSlider.valueProperty().addListener(vectorCancellingListener); vectorCancellingCheckBox.selectedProperty().addListener(vectorCancellingListener); @@ -182,6 +200,12 @@ public class Controller implements Initializable { bitCrushSlider.valueProperty().addListener(bitCrushListener); bitCrushCheckBox.selectedProperty().addListener(bitCrushListener); + verticalDistortSlider.valueProperty().addListener(verticalDistortListener); + verticalDistortCheckBox.selectedProperty().addListener(verticalDistortListener); + + horizontalDistortSlider.valueProperty().addListener(horizontalDistortListener); + horizontalDistortCheckBox.selectedProperty().addListener(horizontalDistortListener); + fileChooser.setInitialFileName("out.wav"); fileChooser.getExtensionFilters().addAll( new FileChooser.ExtensionFilter("All Files", "*.*"), diff --git a/src/main/resources/fxml/osci-render.fxml b/src/main/resources/fxml/osci-render.fxml index b71e2a6..844b10c 100644 --- a/src/main/resources/fxml/osci-render.fxml +++ b/src/main/resources/fxml/osci-render.fxml @@ -12,17 +12,17 @@ - + - +