diff --git a/src/main/java/io/spokestack/spokestack/profile/VADTriggerKeywordASR.java b/src/main/java/io/spokestack/spokestack/profile/VADTriggerKeywordASR.java new file mode 100644 index 0000000..9139d22 --- /dev/null +++ b/src/main/java/io/spokestack/spokestack/profile/VADTriggerKeywordASR.java @@ -0,0 +1,56 @@ +package io.spokestack.spokestack.profile; + +import io.spokestack.spokestack.PipelineProfile; +import io.spokestack.spokestack.SpeechPipeline; + +import java.util.ArrayList; +import java.util.List; + +/** + * A speech pipeline profile that uses voice activity detection to activate + * ASR based on keyword detection. + * + *

+ * The keyword detector requires extra configuration, which must be + * added to the pipeline build process separately from this profile: + *

+ * + * + * + * @see io.spokestack.spokestack.asr.KeywordRecognizer + */ +public class VADTriggerKeywordASR implements PipelineProfile { + @Override + public SpeechPipeline.Builder apply(SpeechPipeline.Builder builder) { + List stages = new ArrayList<>(); + stages.add("io.spokestack.spokestack.webrtc.AutomaticGainControl"); + stages.add("io.spokestack.spokestack.webrtc.AcousticNoiseSuppressor"); + stages.add("io.spokestack.spokestack.webrtc.VoiceActivityDetector"); + stages.add("io.spokestack.spokestack.webrtc.VoiceActivityTrigger"); + stages.add("io.spokestack.spokestack.ActivationTimeout"); + stages.add("io.spokestack.spokestack.asr.KeywordRecognizer"); + + return builder + .setInputClass("io.spokestack.spokestack.android.MicrophoneInput") + .setStageClasses(stages); + } +} diff --git a/src/test/java/io/spokestack/spokestack/SpeechPipelineTest.java b/src/test/java/io/spokestack/spokestack/SpeechPipelineTest.java index a7f8f1d..cc06217 100644 --- a/src/test/java/io/spokestack/spokestack/SpeechPipelineTest.java +++ b/src/test/java/io/spokestack/spokestack/SpeechPipelineTest.java @@ -28,6 +28,7 @@ public class SpeechPipelineTest implements OnSpeechEventListener { io.spokestack.spokestack.profile.VADTriggerAndroidASR.class, io.spokestack.spokestack.profile.VADTriggerAzureASR.class, io.spokestack.spokestack.profile.VADTriggerGoogleASR.class, + io.spokestack.spokestack.profile.VADTriggerKeywordASR.class, io.spokestack.spokestack.profile.VADTriggerSpokestackASR.class );