Releases: spokestack/spokestack-android
v11.0.1
Fixes
This release updates the receptive field for the keyword recognizer which, along with a new model architecture, improves both its accuracy and computational efficiency.
v11.0.0
Breaking changes
-
Spokestack.start()
andstop()
control all modules;pause()
andresume()
handle the speech pipelineThe NLU module has been brought to parity with the other modules in that its services implement
AutoCloseable
and can release their internal resources (e.g., TensorFlow Lite interpreters). This, in turn, adjusted the higher-levelSpokestack
API:start
andstop
now manage resources for all registered modules (ASR, NLU, TTS). To temporarily suspend passive listening (so, for example, the app cannot receive a false positive wakeword activation during a TTS prompt), callpause
; to resume, callresume
.Spokestack
callspause
andresume
automatically in response to TTS events so you don't have to remember to do so. -
TTS module no longer responds to lifecycle events
Lifecycle responsiveness has been removed from the TTS module, as Spokestack is expected to be a long-lived component that survives
Activity
transitions. This allows TTS audio to continue playing even as the app transitions betweenActivity
s but changes the builder API for the TTS module andSpokestack
itself.
Features
-
Allow access to the current NLU service
To match the other modules,
NLUManager
now provides access to its underlyingNLUService
viagetNlu()
.
Fixes
-
Tighten task submission in TTS player
Tasks submitted to the media player thread have been consolidated to avoid a potential race condition when attempting to play two TTS prompts in quick succession.
-
Timeout event when no keyword is recognized
In order to match other speech recognizers,
KeywordRecognizer
has been adjusted to send aTIMEOUT
event when no keyword is recognized after its activation limit.
v10.0.0
Breaking changes
- A refactor to the NLU module has changed the type of
Spokestack
'snlu
field fromTensorflowNLU
toNLUManager
. This allows for future expansion to the NLU module to support new providers, like ASR currently works. No new providers are included in this release, but custom implementations can be supplied at build time. - A draft dialogue management API is also included, and wired into the
Spokestack
setup class. The API is undocumented, and its use is optional, so it should be considered experimental for now.
Features
- References to the Android
Context
andLifecycle
can now be updated by convenience methods onSpokestack
. This is useful for multi-activity applications that need to adjust component lifecycles along with activity transitions.
Fixes
- Runtime addition/removal of a TTS listener is now propagated to the TTS output class so that the intended objects receive playback events.
- Fixed a potential NPE in
SpokestackTTSOutput
that occurred when it was released before any synthesized speech had been played.
v9.1.0
Features
- clearer SpokestackAdapter method names
We've added module-specific listener method names so it's easier to tell what you're overriding in your listeners
Fixes
- allow clients to remove event listeners
Previously, only speech pipeline listeners could be removed, which could lead to a memory leak if a multi-activity application registeredActivity
classes as listeners, as they would not be garbage collected.
v9.0.0
This release introduces a turn-key setup wrapper (the Spokestack
) class used to build and initialize all Spokestack modules at once. Events can be consumed via the unified SpokestackAdapter
interface or old-style listeners attached to the individual modules at build time. See the documentation for more details.
Breaking changes
- ASR activation property names have been reverted from
active-(min|max)
towake-active-(min|max)
to allow the React Native library to set them properly for both platforms.
Fixes
- Don't send empty ASR transcripts (#107)
- If an ASR returns the empty string as either a partial or final result, it will not be reported to the client.
- Force pipeline stages to reset on deactivate
- This allows
AndroidSpeechRecognizer
to be properly stopped whendeactivate()
is called on the speech pipeline.
- This allows
- Send timeout events for empty transcripts
- If an ASR returns the empty string as a final result, it will be reported to the client as a timeout.
- Don't send irrelevant playback events
PLAYBACK_COMPLETE
events were being dispatched from the audio player for audio events unrelated to Spokestack TTS, such as when the Assistant activation beep was complete.
v8.1.0
Features
This release includes the new KeywordRecognizer
component, which uses TensorFlow Lite models similar to the wakeword models but designed for multiclass detection. KeywordRecognizer
is capable of serving as a lightweight on-device ASR for a limited set of commands.
Fixes
Errors reading from the device microphone now stop the speech pipeline instead of attempting to read again on the next dispatch loop. This prevents error spam in host apps, but also means that the app will have to manually call start
on a pipeline that has experienced such an error.
v8.0.2
This fixes an issue with AndroidSpeechRecognizer
where it was possible to stop the speech pipeline without freeing the speech context, which made wakeword and ASR inoperable on a pipeline restart.
v8.0.1
This release addresses an error that could be reached when resetting or closing AndroidSpeechRecognizer
without first activating it.
v8.0.0
This release resolves issues with stale state left over after Spokestack regains control of the microphone from a component that previously had it. It's a major release because the fix required adding a new method to the SpeechProcessor
interface, so any custom implementations will also need to include this method.
v7.0.2
This release addresses an issue with control flow when using the AndroidSpeechRecognizer
. Programmatic reactivation of the pipeline was occasionally being blocked due to internal management of the microphone; this should no longer happen.