diff --git a/src/main/java/org/myrobotlab/audio/AudioProcessor.java b/src/main/java/org/myrobotlab/audio/AudioProcessor.java index c4ae3edc86..51b5deb81d 100644 --- a/src/main/java/org/myrobotlab/audio/AudioProcessor.java +++ b/src/main/java/org/myrobotlab/audio/AudioProcessor.java @@ -3,9 +3,8 @@ import java.io.File; import java.io.IOException; import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; - import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -36,8 +35,9 @@ public class AudioProcessor extends Thread { // it seems to make sense - some how the file gets decoded enough - so that // a audio decoder can be slected from some // internal registry ... i think - - private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); transient private final ScheduledExecutorService delayScheduler = Executors.newScheduledThreadPool(1); + + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + transient private final ScheduledExecutorService delayScheduler = Executors.newScheduledThreadPool(1); protected int currentTrackCount = 0; @@ -154,7 +154,6 @@ public AudioData play(AudioData data) { audioFile.invoke("publishAudioStart", data); AudioFileConfig config = (AudioFileConfig) audioFile.getConfig(); - while (isPlaying && (nBytesRead = din.read(buffer, 0, buffer.length)) != -1) { ++cnt; // byte[] goofy = new byte[4096]; @@ -237,19 +236,20 @@ public AudioData play(AudioData data) { peak = abs; } } - + final double value = peak * (double) audioFile.getPeakMultiplier(); - - // skew publish forwards in time + + // skew publish forwards in time if (audioFile.getConfig().peakDelayMs == null) { - audioFile.invoke("publishPeak", value); - } else { - delayScheduler.schedule(() -> audioFile.invoke("publishPeak", value), audioFile.getConfig().peakDelayMs, TimeUnit.MILLISECONDS); + audioFile.invoke("publishPeak", value); + } else { + delayScheduler.schedule(() -> audioFile.invoke("publishPeak", value), audioFile.getConfig().peakDelayMs, TimeUnit.MILLISECONDS); } - + // reset to 0 after millis if (audioFile.getConfig().publishPeakResetDelayMs != null) { - delayScheduler.schedule(() -> audioFile.invoke("publishPeak", 0), audioFile.getConfig().peakDelayMs + audioFile.getConfig().publishPeakResetDelayMs, TimeUnit.MILLISECONDS); + delayScheduler.schedule(() -> audioFile.invoke("publishPeak", 0), audioFile.getConfig().peakDelayMs + audioFile.getConfig().publishPeakResetDelayMs, + TimeUnit.MILLISECONDS); } } } @@ -267,11 +267,11 @@ public AudioData play(AudioData data) { // System.gc(); if (audioFile.getConfig().peakDelayMs == null) { - audioFile.invoke("publishPeak", 0); - } else { + audioFile.invoke("publishPeak", 0); + } else { delayScheduler.schedule(() -> audioFile.invoke("publishPeak", 0), audioFile.getConfig().peakDelayMs, TimeUnit.MILLISECONDS); } - + audioFile.invoke("publishPeak", 0); audioFile.invoke("publishAudioEnd", data); diff --git a/src/main/java/org/myrobotlab/service/AudioFile.java b/src/main/java/org/myrobotlab/service/AudioFile.java index 5a621ab556..fc93edf5de 100644 --- a/src/main/java/org/myrobotlab/service/AudioFile.java +++ b/src/main/java/org/myrobotlab/service/AudioFile.java @@ -312,6 +312,9 @@ public void playResource(String filename, Boolean isBlocking) { play(getResourceDir() + File.separator + filename, isBlocking); } + /** + * Stops all tracks stops all audio processing + */ public void silence() { // stop all tracks for (Map.Entry entry : processors.entrySet()) { @@ -356,6 +359,9 @@ public AudioData waitFor(String filename, Object waitForMe) { return data; } + /** + * Stops the current track and audio processor + */ public void stop() { AudioProcessor ap = processors.get(currentTrack); // dump the current song @@ -593,6 +599,14 @@ public void onPlayAudioFile(String file) { @Override public void onPlayRandomAudioFile(String dir) { + playRandom(dir); + } + + /** + * Plays a random audio file + * @param dir + */ + public void playRandom(String dir) { File test = new File(dir); if (!test.exists() || !test.isDirectory()) { error("%s is not a valid dir"); @@ -611,8 +625,7 @@ public void onPlayRandomAudioFile(String dir) { play(randomFile.getAbsolutePath()); } - - + public double getPeakMultiplier() { return ((AudioFileConfig)config).peakMultiplier; } diff --git a/src/main/java/org/myrobotlab/service/config/InMoov2Config.java b/src/main/java/org/myrobotlab/service/config/InMoov2Config.java index 8194ea5b90..abe21c31ea 100644 --- a/src/main/java/org/myrobotlab/service/config/InMoov2Config.java +++ b/src/main/java/org/myrobotlab/service/config/InMoov2Config.java @@ -102,7 +102,7 @@ public class InMoov2Config extends ServiceConfig { * data/InMoov2/sounds/pir-activated.mp3 sound located in * data/InMoov2/sounds/pir-deactivated.mp3 */ - public boolean pirPlaySounds = true; + public boolean pirPlaySounds = false; public boolean pirWakeUp = true; diff --git a/src/main/java/org/myrobotlab/service/interfaces/AudioControl.java b/src/main/java/org/myrobotlab/service/interfaces/AudioControl.java index 003b956f34..bf8d3d4199 100644 --- a/src/main/java/org/myrobotlab/service/interfaces/AudioControl.java +++ b/src/main/java/org/myrobotlab/service/interfaces/AudioControl.java @@ -1,5 +1,7 @@ package org.myrobotlab.service.interfaces; +import org.myrobotlab.service.data.AudioData; + public interface AudioControl { public void setVolume(double volume); @@ -17,8 +19,37 @@ public interface AudioControl { * @param dir */ public void onPlayRandomAudioFile(String dir); + + /** + * Plays a random audio file in the given directory + * @param dir + */ + public void playRandom(String dir); + + /** + * Plays an audio file + * @param filename + * @return + */ + public AudioData play(String filename); + + /** + * Pause the currently playing audio file + */ + public void pause(); - // pause - // resume - // interrupt ? + /** + * Resumes the current audio file + */ + public void resume(); + + /** + * stops all audio processors and all tracks + */ + public void silence(); + + /** + * stops the current selected track and audio processor + */ + public void stop(); } diff --git a/src/main/resources/resource/WebGui/app/service/views/Gpt3Gui.html b/src/main/resources/resource/WebGui/app/service/views/Gpt3Gui.html index 43598b6398..7d5b2c0565 100644 --- a/src/main/resources/resource/WebGui/app/service/views/Gpt3Gui.html +++ b/src/main/resources/resource/WebGui/app/service/views/Gpt3Gui.html @@ -37,7 +37,13 @@ prefix - token + wake word + + + sleep word + + + api key @@ -48,6 +54,7 @@ +
text
@@ -79,4 +87,4 @@ -
+ \ No newline at end of file