diff --git a/src/main/java/sh/ball/audio/AudioPlayer.java b/src/main/java/sh/ball/audio/AudioPlayer.java index a89dacaa..7e38932f 100644 --- a/src/main/java/sh/ball/audio/AudioPlayer.java +++ b/src/main/java/sh/ball/audio/AudioPlayer.java @@ -20,7 +20,7 @@ public interface AudioPlayer extends Runnable, MidiListener { void setBackingMidiVolume(double scale); - void setDecay(double decaySeconds); + void setRelease(double decaySeconds); void setAttack(double attackSeconds); diff --git a/src/main/java/sh/ball/audio/ShapeAudioPlayer.java b/src/main/java/sh/ball/audio/ShapeAudioPlayer.java index 1cbd9a75..133a17d4 100644 --- a/src/main/java/sh/ball/audio/ShapeAudioPlayer.java +++ b/src/main/java/sh/ball/audio/ShapeAudioPlayer.java @@ -5,7 +5,6 @@ import sh.ball.audio.effect.*; import java.io.*; import java.util.*; import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import sh.ball.audio.engine.AudioDevice; @@ -45,13 +44,12 @@ public class ShapeAudioPlayer implements AudioPlayer> { private int mainChannel = 0; private MidiNote baseNote = new MidiNote(60, mainChannel); private final double[] pitchBends = new double[MidiNote.NUM_CHANNELS]; - private int lastDecay = 0; - private double decaySeconds = 0.2; - private int decayFrames; + private int lastRelease = 0; + private double releaseSeconds = 0.2; + private int releaseFrames; private int lastAttack = 0; private double attackSeconds = 0.1; private int attackFrames; - private int totalVolume = MidiNote.MAX_VELOCITY; private final Callable audioEngineBuilder; private final BlockingQueue> frameQueue = new ArrayBlockingQueue<>(BUFFER_SIZE); @@ -269,16 +267,16 @@ public class ShapeAudioPlayer implements AudioPlayer> { try { keyOnLock.acquire(); - totalVolume = MidiNote.MAX_VELOCITY; + int totalVolume = MidiNote.MAX_VELOCITY; - boolean resetDecay = false; + boolean resetRelease = false; boolean resetAttack = false; for (int i = keyOn.nextSetBit(0); i >= 0; i = keyOn.nextSetBit(i + 1)) { int noteVolume = keyActualVolumes[i]; - if (lastDecay > decayFrames) { - resetDecay = true; + if (lastRelease > releaseFrames) { + resetRelease = true; if (noteVolume > keyTargetVolumes[i]) { int newVolume = --keyActualVolumes[i]; if (newVolume <= 0) { @@ -316,8 +314,8 @@ public class ShapeAudioPlayer implements AudioPlayer> { } } - if (resetDecay) { - lastDecay = 0; + if (resetRelease) { + lastRelease = 0; } if (resetAttack) { @@ -330,7 +328,7 @@ public class ShapeAudioPlayer implements AudioPlayer> { keyOnLock.release(); } - lastDecay++; + lastRelease++; lastAttack++; vector = new Vector2( @@ -359,9 +357,9 @@ public class ShapeAudioPlayer implements AudioPlayer> { } @Override - public void setDecay(double decaySeconds) { - this.decaySeconds = decaySeconds; - updateDecay(); + public void setRelease(double releaseSeconds) { + this.releaseSeconds = releaseSeconds; + updateRelease(); } @Override @@ -528,12 +526,12 @@ public class ShapeAudioPlayer implements AudioPlayer> { phase.setSampleRate(sampleRate); } } - updateDecay(); + updateRelease(); updateAttack(); } - private void updateDecay() { - this.decayFrames = (int) (decaySeconds * sampleRate / MidiNote.MAX_VELOCITY); + private void updateRelease() { + this.releaseFrames = (int) (releaseSeconds * sampleRate / MidiNote.MAX_VELOCITY); } private void updateAttack() { diff --git a/src/main/java/sh/ball/gui/controller/MainController.java b/src/main/java/sh/ball/gui/controller/MainController.java index 97a3796d..0335a43c 100644 --- a/src/main/java/sh/ball/gui/controller/MainController.java +++ b/src/main/java/sh/ball/gui/controller/MainController.java @@ -30,7 +30,6 @@ import java.util.concurrent.*; import java.util.function.Consumer; import java.util.function.UnaryOperator; import java.util.logging.Level; -import java.util.stream.Collectors; import javafx.fxml.FXML; import javafx.fxml.Initializable; @@ -179,7 +178,7 @@ public class MainController implements Initializable, FrequencyListener, MidiLis @FXML private Spinner attackSpinner; @FXML - private Spinner decaySpinner; + private Spinner releaseSpinner; @FXML private ComboBox sliderComboBox; @FXML @@ -491,8 +490,8 @@ public class MainController implements Initializable, FrequencyListener, MidiLis attackSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0, 10, 0.2, 0.01)); attackSpinner.valueProperty().addListener((o, oldValue, newValue) -> audioPlayer.setAttack(newValue)); - decaySpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0, 10, 0.1, 0.01)); - decaySpinner.valueProperty().addListener((o, oldValue, newValue) -> audioPlayer.setDecay(newValue)); + releaseSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0, 10, 0.1, 0.01)); + releaseSpinner.valueProperty().addListener((o, oldValue, newValue) -> audioPlayer.setRelease(newValue)); recordLengthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.1, 100000000, 2.0, 0.1)); @@ -1185,7 +1184,7 @@ public class MainController implements Initializable, FrequencyListener, MidiLis root.appendChild(midiAttack); Element midiDecay = document.createElement("midiDecay"); - midiDecay.appendChild(document.createTextNode(decaySpinner.getValue().toString())); + midiDecay.appendChild(document.createTextNode(releaseSpinner.getValue().toString())); root.appendChild(midiDecay); Element audioSample = document.createElement("audioSample"); @@ -1370,9 +1369,9 @@ public class MainController implements Initializable, FrequencyListener, MidiLis attackSpinner.getValueFactory().setValue(Double.parseDouble(midiAttack.getTextContent())); } - Element midiDecay = (Element) root.getElementsByTagName("midiDecay").item(0); - if (midiDecay != null) { - decaySpinner.getValueFactory().setValue(Double.parseDouble(midiDecay.getTextContent())); + Element midiRelease = (Element) root.getElementsByTagName("midiDecay").item(0); + if (midiRelease != null) { + releaseSpinner.getValueFactory().setValue(Double.parseDouble(midiRelease.getTextContent())); } Element audioSample = (Element) root.getElementsByTagName("audioSample").item(0); diff --git a/src/main/resources/fxml/main.fxml b/src/main/resources/fxml/main.fxml index c38dd101..669bad33 100644 --- a/src/main/resources/fxml/main.fxml +++ b/src/main/resources/fxml/main.fxml @@ -139,12 +139,12 @@ - + -