Version 7 changes¶
TrulyNatural version 7 introduced support for STT and is fully backwards compatible with version 6 models and code.
This library uses semantic versioning.
7.6.1 (2025-11-25)¶
- Changed
- Android examples build with Java 17 and later.
- Fixed
- Higher than expected CPU use in wake words and command sets. This addresses a regression introduced in 7.5.0.
- snsr-debug mistakenly used tpl-opt-spot-vad-lvcsr and stt-enUS-automotive-medium model versions from an earlier SDK release.
- Some of the C examples failed to build on Windows.
- Security
7.6.0 (2025-09-15)¶
- Added
- Setting
loop = 2pins the tpl-spot-sequential listening focus to the recognizer in slot1. - tpl-spot-debug-1.5.1.snsr with support for NLU intents and entities.
- udt-universal-3.67.1.0.snsr with improved accuracy.
- tpl-spot-vad-3.10.0.snsr with support for include-wake-word-audio.
- snsr-debug Android sample replaces
spot-debugand adds support for STT. - tnl tpl-spot-vad-lvcsr-3.20.0.snsr and tpl-opt-spot-vad-lvcsr-1.25.0.snsr with support for include-wake-word-audio.
- tnl Documentation notes that score values are not usable when result-max
> 1. - stt stt-enUS-automotive-medium-2.3.15-pnc.snsr
- Support for nlu-match-max.
- Setting stt-profile does not change partial-result-interval.
- stt Support for STT on 64-bit iOS platforms:
- iPhoneOS on
arm64andarm64e. - iPhoneSimulator on
arm64andx86_64.
- iPhoneOS on
- Setting
- Changed
- Documentation system from Doxygen to Material for MkDocs.
arm-linux-gnueabilibrary requires GLIBC >= 2.17 instead of GLIBC >= 2.34 for improved compatibility.- lib/*/README*md for the supported target platforms include the minimum required
GLIBCversion where relevant.
- Removed
- tpl-spot-debug-1.5.0.snsr
- udt-universal-3.66.1.9.snsr
- tpl-spot-vad-3.9.0.snsr
spot-debugAndroid sample, see snsr-debug instead.- Know issues documentation page.
- tnl tpl-spot-vad-lvcsr-3.19.0.snsr
- tnl tpl-opt-spot-vad-lvcsr-1.24.snsr
- stt stt-enUS-automotive-medium-2.3.13-pnc.snsr
- Fixed
- spot-convert could show incorrect license recognition or duration limits in the comments at the start of the header file it generates.
- allocPerf did not produce usable results when used with allocStdlib.
- tnl Incorrect begin-ms, end-ms, and score results for a tpl-spot-vad-lvcsr recognizer in slot
1of tpl-spot-concurrent. - tnl Using tpl-spot-sequential in slot 0 of tpl-opt-spot-vad-lvcsr or tpl-spot-vad-lvcsr could lead to warning messages on
stderr. - tnl snsr-eval
-aoption failed when used with class libraries. - stt Bus error on 32-bit Arm platforms when using a model with machine-learned NLU or punctuation and capitalization support. This was caused by a bug in ONNX that resulted in an attempt to read
int64_tvalues not aligned to 8 bytes.
- Security
- tnl If nlu-grammar-stream reduced the length of the phrase result (by using the
:rewrite operator, for example) in an STT model with punctuation and capitalization support, an unterminated string could cause an out-of-bounds memory read.
- tnl If nlu-grammar-stream reduced the length of the phrase result (by using the
7.5.0 (2025-06-12)¶
- Added
- snsr-eval
-a,-q, and-uflags. - stt-support, thread-support.
- Support for loading parts of a model that resides in ROM onto the heap. This can improve inference speed when ROM is significantly slower than RAM.
- Reduced peak RAM requirement on small platforms
- prune:enable option to remove unused settings after a model's been loaded.
- Reduced overhead in the session configuration store.
- fromProvider as an alias for
snsrStream_alloc(). - profile is available in the Java language binding.
- Support for
armv7kandarm64_32watchOS architectures. - tpl-spot-concurrent-1.5.0.snsr with support for ^listen-begin, ^listen-end, ^begin, ^end, ^limit, and ^silence.
- tpl-spot-vad-3.9.0.snsr
- tnl ram-limit, ac-prune-top-k.
- tnl Support for improved out-of-grammar detection (with better discrimination and lower RAM overhead) in grammar-based recognition and VoiceHub Pro models.
- tnl Support for grammar-based recognition models that report recognition scores.
- tnl Templates with support for domain, am-size, lm-size, nlu-size, and slm-size:
- tnl Models updated to support score setting:
- stt domain, slm-size.
- stt stt-enUS-automotive-medium-2.3.13-pnc.snsr with support for domain and slm-size. This model includes a single language model, so domain will return
NULL. It does not include a generative language model either: slm-size is0.
- snsr-eval
- Changed
- Documentation available online.
- snsr-edit requires the
-oflag to create output. - snsr-eval prints scores with the
%gformat specifier. - getDouble, setDouble, getInt, and setInt support both double and integer settings, but will report INCORRECT_SETTING_TYPE if a double value cannot be converted to an integer without loss of precision or overflow.
- getString and setString support double and integer settings.
- set no longer requires quotes for string arguments without embedded spaces.
- SOURCE, SOURCE_RAM, and SOURCE_PRUNED create code that tags all model objects with preprocessor macro
SNSR_MODEL_ATTR. Use this, for example, to specify the section in which the linker places these objects. - sample/c/CMakeLists.txt
- Builds
snsr-eval-subset. - Installs the sample binaries in sample/c/bin/.
- Builds
- sample/c/Makefile and sample/c/CMakeLists.txt build the live-spot-stream.c example on macOS.
- util/gradlew uses Gradle 8.14, compatible with Java 21.
- Java examples use lambda expressions for event handlers and iterators.
- Enrolled wake word tasks no longer invoke ^pause and ^resume when interactive
== 0. - tnl tpl-opt-spot-vad-lvcsr and tpl-spot-vad-lvcsr with include-leading-silence
= 1no longer invoke the ^result, ^nlu-intent, and ^nlu-slot events if the VAD does not detect speech. The ^listen-end directly follows the ^silence event. - tnl snsr-eval with live audio input will not run LVCSR or STT models that do not include a VAD component. Use the new
-aflag to add tpl-vad-lvcsr on the fly. - tnl complete-only
= 1accepts results even if there's no trailing silence in the utterance. - stt In STT models with punctuation and capitalization support, empty results are reported as an empty string instead of a single period.
- Removed
- tpl-spot-concurrent-1.4.0.snsr
- tpl-spot-vad-3.8.0.snsr
- tnl lvcsr-background-enUS-1.2.1.snsr
- tnl lvcsr-build-enUS-2.7.0.snsr
- tnl tpl-opt-spot-vad-lvcsr-1.20.0.snsr
- tnl tpl-spot-vad-lvcsr-3.11.0.snsr
- tnl tpl-vad-lvcsr-3.10.0.snsr
- stt stt-enUS-automotive-medium-2.3.13.snsr
- Fixed
- Machine-learned VAD components detected the speech onset late on synthetic audio data with significant all-zero leading silence.
- oss-components always returned
NULL. - tnl In rare cases grammar-based recognition NLU intent names could mistakenly include the first word of the NLU intent value.
- tnl In rare cases VoiceHub models that use @ref build could misclassify in-domain intents as
background. - tnl Potentially reduced recognition accuracy in grammar-based recognition models that use ram-limit to constrain the Viterbi decoder.
- Security
- Deeply-nested templates with duplicate models (for example, combining the same spotter model with tpl-spot-concurrent, then combining the result with another tpl-spot-concurrent and the same spotter model, three levels deep), could result in out-of-bounds memory access when releasing the session.
7.4.1 (2025-03-13)¶
- Fixed
- stt Using custom-vocab to map multi-word sequences could result in missed NLU entities.
7.4.0 (2025-01-22)¶
- Added
- Java support on x86_64-windows-msvc.
- SOURCE_RAM and snsr-edit
-Coption. - Spotter template modes with new settings low-fr-operating-point and duration-ms:
- Support for Smart Wake Words. On a near-miss false reject, these models switch to a more accepting operating point for a limited duration to make it more likely that the model will accept a repeated wake word utterance. Enable this feature (on wake word models that support it) by setting low-fr-operating-point. Adjust the duration of the low false-reject listening window with duration-ms.
- spot-voicegenie-enUS-6.5.1-m.snsr with support for low-fr-operating-point and duration-ms.
- Compatibility with 2025 VoiceHub Pro wake words and command sets.
- VERSION_CMAKE.
- tnl tpl-opt-spot-vad-lvcsr-1.20.0.snsr supports changing VAD settings backoff, hold-over, leading-silence, max-recording, trailing-silence, and include-leading-silence. Adds vocab-iterator, ^slm-start, ^slm-result-partial, ^slm-result, slm-enabled, slm-turn-limit, stt-profile, low-fr-operating-point, and duration-ms.
- tnl VAD template models with new settings ^slm-start, ^slm-result-partial, ^slm-result, slm-enabled, slm-turn-limit, stt-profile, low-fr-operating-point, and duration-ms:
- stt stt-profile.
- stt Experimental support for generative language models. New settings: ^slm-start, ^slm-result-partial, ^slm-result, slm-enabled, and slm-turn-limit.
- stt stt-enUS-automotive-medium-2.3.13.snsr
- Results include capitalization and punctuation.
- Supports stt-profile.
- Changed
- Android JNI shared libraries export only TrulyNatural function names. This significantly reduces the chances of symbol clashes in applications that use third-party libraries that depend on the same OSS modules as the TrulyNatural SDK.
- Android JNI libraries built with NDK r27c and flexible page size support.
- Improved compatibility with older Android releases, support for API level 21 and later.
- SnsrLibrary.cmake removes unused functions and data from target executables (
-ffunction-sections -fdata-sections) - DSP library (for creating embedded spotter models) version 8.5.0.
- Toolchain updates:
- arm-linux-gnueabi built with gcc 13.2.0.
- arm-linux-gnueabihf built with gcc 13.3.1.
- i686-linux-gnu built with gcc 13.2.0.
- On Windows, snsr-eval sets the console code page to
UTF-8. - If application code used push and did not call stop before releasing the model, the call to release invoked all pending event handlers. It now ignores these.
- stop completes even if the session is in an error state.
- tnl No ^result-partial for empty hypotheses.
- stt Support Windows
\r\nline termination as entry separators in custom-vocab. - stt Removed the 1000-entry limit for custom-vocab. Please note that using such large custom vocabularies is frequently counter-productive. Consider contacting your Sensory Sales representative to discuss creating a domain-specific recognizer instead.
- stt Improved custom-vocab behavior in character-based languages such as Mandarin Chinese.
- stt STT models start fewer threads.
- Deprecated
- Removed
- spot-voicegenie-enUS-6.5.0-m.snsr
- tpl-spot-debug-1.4.0.snsr
- tpl-spot-sequential-1.4.0.snsr
- tpl-spot-vad-3.7.0.snsr
- tpl-spot-dynop-1.4.0.snsr
- tnl tpl-opt-spot-vad-lvcsr-1.12.0.snsr
- tnl tpl-spot-vad-lvcsr-3.11.0.snsr
- tnl tpl-vad-lvcsr-3.10.0.snsr
- stt stt-enUS-automotive-small_medium-2.2.13-BBB-ff.snsr
- Fixed
- With push-duration-limit
> 0, reset did not flush the push backlog buffer enabled with push-buffer-size. - Low memory use VoiceHub Large Vocabulary Project models could fail to run if settings (such as operating-point) were changed after registering event handlers.
- Reading settings from models built from deeply nested templates could mistakenly report VALUE_NOT_SET.
- tnl search.frame-nota was ignored for ^result when used with lightweight NLU.
- With push-duration-limit
- Security
- If application code using the C API used push, and a result handler called forEach, and that handler was invoked by release because the session was released without calling stop first, then a double-free and access of invalid heap memory could occur.
- tnl Out-of-bounds memory access could occur if tpl-opt-spot-vad-lvcsr was used with
0.include-leading-silence = 1.
7.3.0 (2024-07-29)¶
- Added
- New FAQ section: How do I take action on an NLU result?
- Support for adding this SDK to projects that use CMake. See C examples.
- Real-time clock implementation for Windows, enables profile:real-time.
- Support for multi-phrase spotter models with lower false accept rates.
- arm-none-eabi library with NEON built with gcc 13.3.1.
- tnl VAD template models with settings backoff and max-recording optimized for STT. The defaults are now 300 ms for audio backoff, and 60 seconds for the maximum recording duration.
- tpl-opt-spot-vad-lvcsr-1.12.0.snsr
- tpl-spot-vad-lvcsr-3.11.0.snsr
- tpl-vad-lvcsr-3.10.0.snsr
- stt Improved STT recognition speed and accuracy, and reduced ^result and ^nlu-intent latency when used with a VAD.
- stt STT support for arm-linux-gnueabihf, aarch64-linux-gnu, and x86_64-windows-msvc.
- stt stt-enUS-automotive-small_medium-2.2.13-BBB-ff.snsr
- 100 MiB total size compared to 299 MiB in previous version.
- Improved NLU inference speed.
- Improved accuracy.
- Changed
- arm-linux-gnueabihf and aarch64-linux-gnu libraries built with gcc 10.3.1.
- tnl Optimized machine-learned NLU models. On average these now run about ten times faster.
- Removed
- Windows ports: x86-windows-2008, x86-windows-2015, x86_64-windows-2008, x86_64-windows-2015, x86_64-windows-mingw.
- arm-buildroot-linux-uclibcgnueabihf library.
- arm-ca7-linux-gnueabihf library.
- tnl VAD template models:
- tpl-opt-spot-vad-lvcsr-1.11.0.snsr
- tpl-spot-vad-lvcsr-3.10.0.snsr
- tpl-vad-lvcsr-3.9.0.snsr
- stt stt-enUS-automotive-small_medium-2.0.8-BBB-ff.snsr
- Fixed
- Certain low false-accept spotter models reported an internal validation error when used with tpl-spot-sequential-1.4.0.snsr
- spot-convert
-cproduced incorrect code output for recent low false-accept models. - The iOS sample app mistakenly embedded snsr.xcframework, leading to TestFlight rejection due to asset validation errors.
- The TrulyNatural SDK linked against
-landroid,making it incompatible with the Vendor Native Development Kit. - stt Duplicate entities and typographic errors in the documentation for stt-enUS-automotive-small_medium-2.2.13-BBB-ff.snsr
- Security
- stt NLU models could cause out-of-bounds memory access on very long (hundreds of words) recognition results.
7.2.0 (2024-04-11)¶
- Added
- snsr-eval
-poption shows an estimate of the CPU processing capacity required to run a model in real-time. - profile:real-time.
- tnl nlu-intent-score, nlu-entity-score, and nlu-slot-score.
- tnl Models updated to support NLU score and score settings:
- stt am-size, lm-size, nlu-size.
- stt stt-enUS-automotive-small_medium-2.0.8-BBB-ff.snsr
- Improved recognition accuracy compared to stt-v2-enUS-automotive-0.2.11-BT-400ms.snsr
- Adjusts model evaluation interval to match partial-result-interval.
- snsr-eval
- Changed
- run ignores push-duration-limit.
- tnl
snsr-eval-llldoes not show ^nlu-intent or ^nlu-slot results. - tnl snsr-eval shows NLU intent, entity, and slot scores.
- stt STT models use partial-result-interval to set the model evaluation interval. The larger this interval the lower the average CPU use.
- Removed
- tnl Models updated to support NLU score settings:
- tpl-opt-spot-vad-lvcsr-1.9.0.snsr
- tpl-spot-vad-lvcsr-3.8.0.snsr
- tpl-vad-lvcsr-3.8.0.snsr
- tpl-spot-lvcsr-1.5.0.snsr (Use tpl-spot-vad-lvcsr-3.10.0.snsr instead.)
- stt stt-v2-enUS-automotive-0.2.11-BT-400ms.snsr
- tnl Models updated to support NLU score settings:
- Fixed
- load now returns LIBRARY_TOO_OLD when attempting to load a model that uses features it does not support.
7.1.1 (2024-02-13)¶
- Fixed
- Linking against the Android static libraries could suppress the output of calls to
__android_log_print(),__android_log_vprint(),and__android_log_write()in the entire application. - The AAR file for Android once again links against
-llog. - tnl tpl-spot-vad-lvcsr-3.8.0.snsr would keep listening for LVCSR audio if enough silence after the wake word lead to ^silence.
- This happened only for LVCSR recognizers (including those made with VoiceHub) and did not affect STT ones.
- Regression from 7.0.0.
- Linking against the Android static libraries could suppress the output of calls to
7.1.0 (2024-01-11)¶
- Added
- tnl Simplified NLU API
- Reduces NLU slot hierarchy to just two levels.
- Provides direct access to top-level NLU slots as "intents" and child slots as "entities".
- Does not support nlu-match-max
>1. - Does not replace the existing NLU slot API.
- See ^nlu-intent, nlu-intent-name, nlu-intent-value, nlu-entity-iterator, nlu-entity-count, nlu-entity-name, and nlu-entity-value.
- tnl Models updated to support simplified NLU API:
- lvcsr-background-enUS-1.2.1.snsr
- lvcsr-build-enUS-2.7.0.snsr
- tpl-opt-spot-vad-lvcsr-1.9.0.snsr
- tpl-spot-lvcsr-1.5.0.snsr
- tpl-spot-vad-lvcsr-3.8.0.snsr
- stt Support for machine-learned NLU intent and entity classifiers.
- stt custom-vocab
- stt stt-v2-enUS-automotive-0.2.11-BT-400ms.snsr
- tnl Simplified NLU API
- Changed
- AAR file for Android is no longer linked against
-landroidand-llog.This allows it to be used in an AOSP system image.
- AAR file for Android is no longer linked against
- Removed
- Energy-only VAD models superseded by machine-learned versions:
- tpl-spot-vad-2.4.0.snsr
- tpl-spot-vad-2.0.1.snsr
- tnl tpl-spot-vad-lvcsr-2.4.0.snsr
- tnl tpl-vad-lvcsr-2.5.0.snsr
- tnl Models updated to support simplified NLU API:
- lvcsr-background-enUS-1.1.0.snsr
- lvcsr-build-enUS-2.6.0.snsr
- tpl-opt-spot-vad-lvcsr-1.8.0.snsr
- tpl-spot-lvcsr-1.4.0.snsr
- tpl-spot-vad-lvcsr-3.7.0.snsr
- tpl-vad-lvcsr-3.7.0.snsr
- stt stt-v1-en-1.0.1-400ms.snsr
- Energy-only VAD models superseded by machine-learned versions:
- Fixed
- VAD models models ignored the max-recording setting.
- tnl tpl-opt-spot-vad-lvcsr did not produce a ^result for slot
=0 if 0.include-leading-silence was set to1and a leading-silence timeout occurred. - tnl LVCSR models used in a VAD template would stop producing ^result callbacks if the VAD reported ^limit. STT models were not affected.
7.0.0 (2023-11-20)¶
- Added
- CONFIG_PRUNED and SOURCE_PRUNED reduce the size of serialized models by removing configuration options such as unused operating-point values.
- snsr-edit
-poption reduces phrasespot model sizes by removing operating points other than the currently selected operating-point. - stt STT support with improved accuracy suitable for command-and-control and dictation tasks.
- This initial release includes STT support on Android, macOS, and x86_64-linux only.
- Includes Open Source modules, see open source licenses.
- Requires linking against a C++ runtime, see Integrate with your build.
- Using STT models do not require any API changes. These are drop-in replacements for older LVCSR models on supported platforms.
- STT recognition models
- stt-v1-en-1.0.1-400ms.snsr
- Contact your Sensory Sales representative for additional languages.
- New settings: oss-components, STT_SUPPORT.
- Changed
- The deprecated delay setting is read-only.
- DSP library (for creating embedded spotter models) version 7.4.0.
- tnl The effects of
:terminal rewrites @b are now visible in ^result text values. - tnl The lightweight NLU processor scoring algorithm no longer considers
:insertedandremoved:words when ranking result parses. This potentially changes the primary NLU result, or the order in which NLU results are presented when nlu-match-max> 1, for grammars that use the:rewrite feature to better match expectations. - tnl If the time required to compute a partial LVCSR result exceeds the push-duration-limit, the ^result-partial callback does not happen.
- tnl The grammar-based recognition grammars support the literal use of special tokens by escaping them with a backslash.
- Deprecated
- Lightweight VAD. Use a VAD model instead.
- Removed
- tnl References to the
<-slot assignment operator in grammar-based recognition. This had been a symbol reserved for internal use only. - tnl lvcsr-broad-enUS-3.1.0-t5.snsr
- tnl References to the
- Fixed
- Machine-learned VAD models could unexpectedly report an error that
from-index (...) must be >= first-index (...) - A subset of spotter models showed increased false accept rates when used with task templates.
- tnl tpl-opt-spot-vad-lvcsr mistakenly invoked ^silence and ^listen-end multiple times at end-of-stream if 0.include-leading-silence was set to
1. - tnl tpl-spot-concurrent with a spotter model in slot 0 and an LVCSR model (gated by a VAD, or spotter and VAD) in slot 1 would mistakenly return nlu-slot-name and nlu-slot-value values as
NULL. - tnl ^nlu-slot could still occur even if complete-only suppressed the recognition result.
- tnl grammar-based recognition with classes could fail with a segmentation fault when attempting to build a recognizer with too many class references.
- Machine-learned VAD models could unexpectedly report an error that
- Security
- This sequence of operations could lead to getString returning an unterminated string:
- In the Java language binding fromMemory and fromString could potentially access the underlying
byte[]memory after it was garbage-collected.