Skip to content

Version 6 changes

TrulyNatural version 6 introduced support for prebuilt LVCSR models in v6.3.0 and grammar-based recognition in v6.7.0.

The API and TrulyHandsfree models are fully backwards-compatible with version 5 beta.

6.21.2 (2023-10-25)

  • Added
    • Support for multi-threaded models in the aarch64-linux-gnu, mipsel-buildroot-linux-uclibc, and mipsel-openwrt-linux-musl libraries.

6.21.1 (2023-08-29)

  • Changed

6.21.0 (2023-01-26)

  • Added
    • snsr-eval -d directory option to write each VAD audio segment to a separate file in directory.
    • Support for multi-phrase spotters where some of the shorter vocabulary phrases are part of longer ones. For example: "control box one", "control box two", "control box three", "control box", and "control".
    • tnl tpl-opt-spot-vad-lvcsr-1.8.0.snsr which adds events ^listen-begin, and ^listen-end, and settings complete-only and search.frame-nota, that were missing from tpl-opt-spot-vad-lvcsr-1.7.0.snsr
  • Changed
    • spot-eval-batch shows a warning if any in-vocabulary test file does not contain sufficient lead-in audio before the target phrase.
    • Documentation for spot-eval-batch:
      • Notes lead-in audio requirements for in-vocabulary test files.
      • Expands the description of INVFA log file entries.
    • DSP library (for creating embedded spotter models) version 7.1.0.
    • Improved model inference speed on Arm Cortex-M4.
    • tnl Lower RAM requirement for recognizers on small embedded platforms.
    • tnl Removed the <no-memory/> recognition result. Recognizers that previously returned this now return <no-match/> instead. See grammar special symbols for details on <no-match/>.
  • Removed
    • tnl tpl-opt-spot-vad-lvcsr-1.7.0.snsr
  • Fixed

6.20.1 (2022-11-14)

6.20.0 (2022-11-02)

  • Added
    • push and stop to better support use cases where the application controls audio capture ("push mode") rather than the TrulyNatural SDK ("pull mode").
      • These functions do support models with internal threading.
    • Support for limiting the amount of time spent in any one call to push. See push-duration-limit, push-buffer-size, push-buffer-backlog.
    • CLOCK_FUNC to support push duration limits.
    • spot-voicegenie-enUS-6.5.0-m.snsr fixed-phrase spotter for "Voice Genie" with improved performance over the previous version.
    • Updated VAD templates with lower RAM requirements:
      • tpl-spot-vad-3.7.0.snsr
      • tnl tpl-opt-spot-vad-lvcsr-1.7.0.snsr
      • tnl tpl-spot-vad-lvcsr-3.7.0.snsr
      • tnl tpl-vad-lvcsr-3.7.0.snsr
    • tnl Documentation section that shows how to use class libraries from code.
    • tnl grammar-syntax notes that the effects of : terminal rewrites are used in ^nlu-slot, but not in ^result.
    • tnl LVCSR models with improved pronunciation modeling:
      • tnl lvcsr-background-enUS-1.1.0.snsr
      • tnl lvcsr-broad-enUS-3.1.0-t5.snsr
      • tnl lvcsr-build-enUS 2.6.0.snsr
    • tnl lvcsr-lib-enUS-1.2.0.snsr with updated classes. Note that many class names have changed for improved compatibility with VoiceHub.
  • Changed
    • snsr-eval -l flag to reduce output verbosity.
    • snsr.h no longer includes <unistd.h>.
    • push-spot.c sample renamed to push-audio.c
    • spot-data.c uses new push APIs.
    • DSP library (for creating embedded spotter models) version 7.0.0.
    • tnl complete-only defaults to on, 1. Revert to previous behavior by setting complete-only = 0.
    • tnl If complete-only filters out an incomplete recognition result, text will be <no-match/> instead of an empty string.
    • tnl Lower RAM requirement for recognizers on small embedded platforms.
  • Deprecated
  • Removed
    • spot-voicegenie-enUS-6.4.0-m.snsr
    • tpl-spot-vad-3.4.0.snsr
    • tnl lvcsr-background-enUS-1.0.1.snsr
    • tnl lvcsr-broad-enUS-3.0.0-t5.snsr
    • tnl lvcsr-build-enUS-2.5.1.snsr
    • tnl lvcsr-lib-enUS-1.1.0.snsr
    • tnl tpl-opt-spot-vad-lvcsr-1.4.0.snsr
    • tnl tpl-spot-vad-lvcsr-3.5.0.snsr
    • tnl tpl-vad-lvcsr-3.5.0.snsr
  • Fixed
    • tnl LVCSR recognizer could produce a spurious ^result when used with the lightweight VAD and recognizing from file.
    • tnl Missing ^result when using tpl-vad-lvcsr with include-leading-silence = 1.
    • tnl Missing ^result when using a VAD template. and recognizing from an audio file without sufficient trailing silence.
    • tnl Unexpected recognition or NLU result after replacing a recognition class at runtime.
  • Security
    • snsr-edit -q setting-name could cause a segmentation fault if the value for setting-name was NULL.
    • Retrieving the user-iterator for a continuously adapting model in a template slot, by explicitly specifying the slot, in an older template that does not support user-iterator, could cause an invalid memory reference.
    • load could fail with a NULL pointer dereference when attempting to load from a truncated model file or stream.
    • The allocTLSF allocator could fail with an out-of-bounds memory read when the provided pool blocks were exhausted.

6.19.0 (2022-05-20)

  • Added
    • Library for armv6-linux-gnueabihf, for use on the Raspberry Pi Zero.
    • ^adapt-started for continuously adapting spotter models.
    • ca-voicegenie-enUS-1.1.0.snsr US English spotter for "voice genie" that continuously adapts to one or more users. Includes support for ^adapt-started.
    • Support for saving continuous adaptation spotter enrollment contexts from ^adapted, and loading these with load.
    • TrulyNatural is available as an XCFramework for iOS as lib/ios/snsr.xcframework.
    • snsr-eval reports ^adapt-started, ^adapted, and ^new-user when run with increased verbosity (one or more -v flags).
    • live-enroll -p option saves enrollment recordings to file.
    • Updated templates with support for ^adapt-started, ^adapted, delete-user, ^new-user, rename-user, user-count, user-index, user, and user-iterator:
      • tpl-spot-concurrent-1.4.0.snsr
      • tpl-spot-debug-1.4.0.snsr
      • tpl-spot-dynop-1.4.0.snsr
      • tpl-spot-select-1.4.0.snsr
      • tpl-spot-sequential-1.4.0.snsr
      • tpl-spot-vad-2.4.0.snsr
      • tpl-spot-vad-3.4.0.snsr
      • tnl tpl-opt-spot-vad-lvcsr-1.4.0.snsr
      • tnl tpl-spot-lvcsr-1.4.0.snsr
    • tnl complete-only setting.
    • tnl LVCSR models with support for complete-only setting:
      • lvcsr-background-enUS-1.0.1.snsr includes a small language model to match out-of-grammar utterances.
      • lvcsr-broad-enUS-3.0.0-t5.snsr is a large multi-threaded speech-to-text recognizer for US English.
      • lvcsr-build-enUS-2.5.1.snsr with improved pronunciation modeling.
  • Changed
    • live-enroll, snsr-edit, snsr-eval, and spot-enroll report model and library expiration dates when invoked with two or more -v flags.
    • arm-none-eabihf optimized for size -Os, instead of speed, -O3.
    • Reduced cache-file size by 6 MiB.
    • Code emitted by SUBSET_INIT and SOURCE has improved compatibility with C++ compilers.
    • iOS PhraseSpot sample app uses snsr.xcframework
    • tnl Documentation for search.frame-nota notes that this value should not be modified for recognizers that include statistical language model components.
  • Removed
    • tpl-opt-spot-vad-lvcsr-1.0.3.snsr
    • tpl-spot-concurrent-1.2.0.snsr
    • tpl-spot-debug-1.3.0.snsr
    • tpl-spot-dynop-1.2.0.snsr
    • tpl-spot-select-1.2.0.snsr
    • tpl-spot-sequential-1.3.0.snsr
    • tpl-spot-vad-2.1.0.snsr
    • tpl-spot-vad-3.1.0.snsr
    • tnl lvcsr-background-enUS-1.0.0.snsr
    • tnl lvcsr-broad-enUS-3.0.0-t5.snsr
    • tnl lvcsr-build-enUS-2.5.0.snsr
    • tnl tpl-spot-lvcsr-1.3.0.snsr
  • Fixed
    • Spurious ^end when running a VAD over a very short file. During this mistaken callback begin-ms was not available.
    • Enrolling continuously adapting spotters logged progress to stdout.
    • Loading a Continuous Adaptation spotter context with cache-file and renaming an enrolled user before running the session for the first time resulted in de-referencing of a NULL pointer.
    • Continuous Adaptation spotter user-iterator did not show any enrolled users loaded from cache-file until the session was run.
    • Continuous Adaptation spotter cache-file overwrote the previous version of the file. If the application was interrupted while writing, this context file could be corrupted. Enrollment contexts are now saved to a temporary file in the same directory, then rename()d to the desired cache file in an atomic operation.
    • Continuous Adaptation spotter cache-file blocked the main thread while writing the enrollment context. On slow file systems this could lead to a recording buffer overflow. Now writes this context in a background thread.
    • Continuous Adaptation spotter ^adapted would be delayed until the next detection if the spotter was used in slot 1 of tpl-spot-sequential.
    • tnl Decreasing result-max took effect only after saving and and then reloading a model.
  • Security
    • Calling snsr-edit -i with two or more -t arguments to create custom initialization code could result in a use-after-free memory error.

6.18.1 (2022-02-22)

  • Added
  • Removed
    • tpl-opt-spot-vad-lvcsr-1.0.2.snsr
  • Fixed
    • Clarify that user-count is only available with wake word models that continuously adapt.
    • Incorrect sample snippet in the documentation for allocPerf.
    • tnl <no-memory/> recognition result returned instead of <no-match/> for recognizers that can never return a valid result.
    • tnl Models configured to use a limited amount of RAM could gradually become less accurate over time.
    • tnl Example code for lvcsr-background-enUS.
    • tnl The memory use of recognizers configured to use N-best (result-max > 1) increased over time.
  • Security
    • tnl An older, task-specific custom recognizer configured to use N-best recognition results caused an invalid memory access in release 6.18.0.

6.18.0 (2022-02-15)

  • Added
    • Support for enrolled fixed trigger models with audio segmentation done with a phrase spotter instead of a VAD. These models support vocab-iterator to find the enrolled fixed phrase text.
    • Support for fixed trigger models that continuously adapt to one or more users. These models support optional settings: ^adapted, cache-file, delete-user, max-users, ^new-user, rename-user, user-count, user-index, user, and user-iterator.
    • ca-voicegenie-enUS-1.0.0.snsr US English spotter for "voice genie" that continuously adapts to one or more users.
    • iOS PhraseSpot sample app supports Bluetooth headsets.
    • Library for arm-none-eabihf.
    • lib/<arch>/README-<platform>.md with port-specific build details. These files list the toolchain name, version, flags, and macros used to build the library for platform.
    • Determine whether multi-threading is supported: THREAD_SUPPORT.
    • Support for replacing the fatal error function, PANIC_FUNC.
    • Support for replacing the dynamic memory allocator used by the TrulyNatural SDK. This is useful on small embedded platforms where dynamic memory allocation is either not available, or not best practice. See Provider, AllocRC, ALLOC, ALLOC_ADD_POOL.
    • New memory allocator implementations: allocStdlib, allocBuddy, allocTLSF, allocLock.
    • Optional memory allocator instrumentation wrapper: allocPerf, allocPerfStats.
    • New heap allocator functions that use the TrulyNatural dynamic memory manager: malloc, free, realloc.
    • New FAQ section: Can I avoid dynamic memory allocation?
    • fromAudioFile.
    • ALLOCATOR_EXISTS, NOT_SUPPORTED.
    • Updated Enrolled wake word models. These use a machine-learned VAD for improved audio segmentation:
    • tpl-spot-sequential-1.3.0.snsr allows optional looping on 1. This is controlled with loop, which defaults to 0 for the old behavior.
    • tnl Description of broad and background recognition models in LVCSR.
    • tnl LVCSR models:
      • lvcsr-background-enUS-1.0.0.snsr includes a small language model to match out-of-grammar utterances.
      • lvcsr-broad-enUS-3.0.0-t5.snsr is a large multi-threaded speech-to-text recognizer for US English.
      • lvcsr-build-enUS-2.5.0.snsr with improved pronunciation modeling.
    • tnl tpl-opt-spot-vad-lvcsr-1.0.2.snsr runs a large vocabulary recognizer gated by either a spotted phrase, or just a VAD, selectable at runtime.
  • Changed
    • snsr-edit includes a -q option to query setting values.
    • snsr-edit writes to edited-model.snsr only if the model was updated with -f, -g, or -s.
    • spot-enroll and live-enroll show enrollment vocabulary, if the model supports it.
    • spot-eval-batch log file format includes score.
    • library-info includes whether multi-threading is supported.
    • Improved precision on intermediate values during model inference. This can result in small changes in alignments and scores with the same model, compared to earlier releases.
    • Increased the audio amplitude of data/audio/enrollments/terminator-2*.wav sample files to pass the audio quality checks when enrolling with udt-universal-3.66.1.9.snsr
    • Reworded error message for EOF.
    • DSP library (for creating embedded spotter models) version 6.7.2.
    • The spot-data.c sample uses the allocTLSF allocator to avoid dynamic memory allocation, and PANIC_FUNC to recover from out-of-memory conditions.
    • Java build and publishing scripts upgraded to Gradle version 7.4. This adds compatibility for Java versions 8 through 17.
    • Java sample code uses com.github.gmazzo.buildconfig instead of de.fuerstenau.buildconfig for compatibility with Gradle 7.
    • fromAudioFile writes directly to file and updates the audio file header after each write.
    • Android sample applications use Gradle 7 and compileSdkVersion 31, which require Android Studio Bumblebee and Java 11.
    • Preprocessor macros generated by dsp-header-stream and spot-convert include only ASCII characters. This improves compatibility with old toolchains. Example:
      /* Old format */
      #define G_grammarLabel_ハイゲーム                     (1)
      
      /* New format */
      #define PHRASE_1 "\xE3\x83\x8F\xE3\x82\xA4\xE3\x82\xB2\xE3\x83\xBC\xE3\x83\xA0"   /* ハイゲーム */
      
    • tnl New <no-memory/> recognition result to distinguish transient out-of-memory conditions from poor recognition confidence. See grammar special symbols.
  • Removed
    • Enrolled wake word models
      • eft-hbg-enUS-23.0.0.8-tssv.snsr
      • eft-hbg-enUS-23.0.8.0.snsr
      • udt-enUS-2.66.3.0.snsr
      • udt-enUS-5.1.1.7.snsr
      • udt-enUS-5.1.1.7-tssv.snsr
      • udt-enUS-12.0.10.7.snsr
      • tpl-spot-sequential-1.2.0.snsr
    • LVCSR models
      • lvcsr-broad-enUS-2.3.0.snsr
      • lvcsr-build-enUS-2.3.0.snsr
  • Fixed
    • If spot-enroll rejected an enrollment audio file it over-reported the number of failed enrollments.
    • Re-loading a model into a template slot after a callback handler was registered could fail.
    • Intermediate result overflows during model inference. These overflows were limited to large models, and could result in less than optimal performance under certain acoustic conditions.
    • Spotter enrollment could fail with Audio chunk input buffer overflow: limit is 10.000 seconds
    • require with task-type-and-version-list allows spaces around the ; tuple separator.
    • sample/c/CMakeLists.txt failed to link samples on macOS due to a missing Accelerate framework dependency.
    • tnl grammar-based recognition models built with TrulyNatural 6.16.0 or earlier did not invoke the ^nlu-slot callback in TrulyNatural 6.17.0.
    • tnl The TrulyNatural SDK allocated more heap than needed for LVCSR models. The amount of additional RAM needed was almost always negligible, but would increase each time a model was re-saved.
    • tnl Poor example use of ~s.timer-phrases in grammar-based recognition. The ~s.timer-phrases class already includes typical requests phrases such as "set a timer for", the example duplicated this.
    • tnl Models configured to use a limited amount of RAM reported <no-match/> if this limit was reached. Now reports the result best matching the input audio instead.
    • tnl A grammar-based recognition example still showed the pre-6.16.0 recognition result that included terminals replaced with :. Replacements are now only available in NLU results.
  • Security
    • If a callback handler function: Returned one of a small set of RC error codes, and it set a message with describeError, and this error message was shorter than 20 bytes, then an out-of-bounds memory write could occur.
    • reset could cause a segmentation fault if it was called before run.

6.17.0 (2021-07-29)

  • Added
  • Changed
    • tnl snsr-eval reports N-best recognition results, when enabled.
    • tnl Updated models with support for N-best recognition settings:
      • lvcsr-broad-enUS-2.3.0.snsr
      • lvcsr-build-enUS-2.3.0.snsr
      • tpl-spot-lvcsr-1.3.0.snsr
      • tpl-spot-vad-lvcsr-2.4.0.snsr
      • tpl-spot-vad-lvcsr-3.5.0.snsr
      • tpl-vad-lvcsr-2.5.0.snsr
      • tpl-vad-lvcsr-3.5.0.snsr
    • tnl grammar special symbols notes that <wp> should not be used in NLU grammars.
    • tnl Known issues.
  • Fixed
    • Model publishing to Maven repositories failed with recent JVM versions.
    • 64-bit Windows libraries did not use MMX acceleration.
    • spot-convert crashed instead of displaying an error message for unsupported DSP targets.
    • spot-enroll did not report files that were skipped due to speech detection failure as enrollment errors.
    • tnl snsr-eval 6.16.0 reported error Setting "nlu-match-count" not found. when used with older recognition models.

6.16.0 (2021-06-06)

  • Added
  • Changed
    • enrollment-id available in ^fail.
    • model-name is used when creating embedded models.
    • spot-convert includes information regarding provenance and licensing in the C output files it creates.
    • tpl-spot-concurrent-1.2.0.snsr no longer sets the operating-point for spotters in slot 0 and slot 1. Previous behavior forced these to have the same sensitivity, which limited utility.
    • tpl-spot-sequential notes that ^listen-begin and ^listen-end mark the begin and end of audio focus shifting to slot 1.
    • Reference documentation updated for include-leading-silence.
    • spot-eval-batch enforces an in-vocabulary lead-in audio requirement for low false-accept spotter models. It still skips in-vocabulary test files that are too short, but the minimum required duration for new models is now one second. If needed, update old models with:
      snsr-edit -v -t old-model.snsr -o new-model.snsr -s min-in-vocab-duration=1000
      
    • DSP library (for creating embedded spotter models) version 6.6.0.
    • macOS libraries target 11.0.
    • fromFileName supports opening files in text mode.
    • tnl tpl-spot-select-1.2.0.snsr supports NLU results.
    • tnl Reference documentation updated for tpl-spot-vad and tpl-spot-vad-lvcsr.
    • tnl snsr-eval reports multiple NLU matches when nlu-match-max and nlu-match-count are larger than 1.
    • tnl A reference to a library class (those named ~s.*) not found in the loaded class library is reported as an error.
    • tnl The broad-domain model, lvcsr-broad-enUS-2.2.0.snsr, includes a class slot for optional leading vocabulary.
    • tnl Updated models, with support for new NLU features:
      • lvcsr-broad-enUS-2.2.0.snsr
      • lvcsr-build-enUS-2.2.0.snsr
      • lvcsr-lib-enUS-1.1.0.snsr
      • tpl-spot-lvcsr-1.2.0.snsr
      • tpl-spot-select-1.2.0.snsr
    • tnl Updated models, with support for new NLU features, grammar-stream, and phrases-stream:
      • tpl-spot-vad-lvcsr-2.3.0.snsr
      • tpl-spot-vad-lvcsr-3.4.0.snsr
      • tpl-vad-lvcsr-2.4.0.snsr
      • tpl-vad-lvcsr-3.4.0.snsr
  • Deprecated
  • Fixed
    • If spot-enroll detected a problem with an enrollment recording, the error message could refer to the wrong filename.
    • When used with one of the VAD models, snsr-eval reported a Stopped by callback error when invoked with minimal verbosity.
    • Loading a different model into a filled template slot could lead to an unexpected failure.
    • tnl LVCSR recognizer leaked memory when the lightweight VAD was used and partial-result-interval was set to 0
    • tnl lvcsr-lib-enUS-1.0.0.json was a duplicate of lvcsr-lib-enUS-1.0.0.snsr instead of a text file with JSON data.
  • Security
    • Low false-accept spotter models with pronunciations that contained certain language-specific phonemes could cause out-of-bounds writes to the heap.
    • When creating C output (-c command-line option), spot-convert could mistakenly use memory that had been freed. This was a coding error in the sample code for the utility, not an issue in the TrulyNatural library.
    • tnl Invalid weight markup in grammar-based recognition grammars could lead to a buffer overflow during parsing.

6.15.0 (2021-01-21)

  • Added
  • Changed
    • getStream supports reading models from slots in task templates.
    • spot-convert output filenames include dsp.t-slice-version, and prod for production-ready models or dev for development-only ones. For example: spot-hbg-enUS-1.3.0-m-pc38-3.4.0-op10-prod-net.c for dsp.t-slice-version == "3.4.0" and dsp.production-ready == 1.
    • When converting model files that expire, or have duration or recognition limits enabled, to embedded (DSP) format, spot-convert creates acoustic model files that are also limited. These limited models require a recent Sensory embedded spotter library (6.4.0 or later) to run.
    • spot-convert has a new -q slotname argument to support conversion of spotter models in template slots such as tpl-spot-sequential.
    • spot-convert option -o to exclude dsp.t-slice-version, the operating point, and production-readiness from generated output filenames.
    • DSP library (for creating embedded spotter models) version 6.4.0.
    • tpl-spot-sequential-1.2.0.snsr includes the last 300 ms of audio before the end of the recognition in slot 0 in the audio sent to slot 1. This improves slot 1 recognition performance in cases where there's no pause between the phrase spotted by slot 0 and that spotted by slot 1.
    • snsr-edit option -e extracts the contents of a template slot into a file.
    • Applications linked with custom initialization code no longer support file format conversion to embedded (DSP) targets. This reduces code size by removing a little-used feature.
    • Sample applications initialize SECURITY_CHIP when SNSR_USE_SECURITY_CHIP is defined.
    • TrulyNatural SDK now requires Android API level 16 or later.
    • Models and templates updated to support new settings: spot-hbg-enUS-1.4.0.snsr, spot-music-enUS-1.2.0.snsr, spot-voicegenie-enUS-6.4.0.snsr, tpl-spot-vad-3.1.0.snsr, tpl-spot-concurrent-1.1.0.snsr, tpl-spot-debug-1.3.0.snsr, tpl-spot-dynop-1.2.0.snsr, tpl-spot-select-1.1.0.snsr, tpl-spot-sequential-1.2.0.snsr, tpl-spot-vad-2.1.0.snsr.
    • tnl Relaxed the ordering requirement for grammar-based recognition rules. Variables no longer need to be defined before they are referenced, as long as they are defined somewhere in the grammar. Recursive rule definitions are flagged as errors.
    • tnl grammar-based recognition supports nested recognition classes.
    • tnl Models and templates updated to support class libraries and new settings: lvcsr-broad-enUS-2.1.0.snsr, lvcsr-build-enUS-2.1.0.snsr, tpl-spot-vad-lvcsr-3.3.0.snsr, tpl-vad-lvcsr-3.3.0.snsr, tpl-spot-lvcsr-1.1.0.snsr, tpl-vad-lvcsr-2.3.0.snsr.
  • Fixed
    • NEON acceleration not enabled on iOS.
    • Sample iOS PhraseSpot app does not support Dark Mode.
    • Reading operating-point from task templates would fail unless it had been explicitly set. This now returns the value from the spotter in the appropriate slot instead.
    • tnl Recognition results were set to <no-match/> for all search.frame-nota values larger than 0. This regression first occurred in 6.14.0.
    • tnl Attempts to get values for nlu-slot-name, nlu-slot-value, or nlu-slot-count succeeded and returned NULL or 0 even when these values were not available. Now returns SETTING_NOT_AVAILABLE.
    • tnl tpl-spot-vad-lvcsr-2.2.0.snsr and tpl-spot-vad-lvcsr-3.2.0.snsr could mistakenly return ELEMENT_API_VIOLATION.
    • tnl The number rule in the example NLU slot grammar (data/grammars/enrollments-nlu-slot.txt) listed 653 instead of 643. 643 is used in the example utterances.
  • Security

6.14.0 (2020-05-04)

  • Added
  • Changed
    • udt-enUS-2.66.3.0.snsr more reliably rejects inconsistent enrollment phrases. Creates enrolled spotter models with a wider selection of operating points.
    • snsr-eval and spot-eval-batch do not report the now deprecated confidence-score.
    • DSP library (for creating embedded spotter models) version 6.3.0.
    • listen-window values larger than 120 are in ms.
    • models in this distribution are licensed with a non-expiring license key.
  • Deprecated
    • The settings confidence-score and task-name are deprecated and will be removed from a future major release of the TrulyNatural SDK. Do not use these in new code.
  • Removed
    • spot-voicegenie-enUS-1.1.0-m.snsr, due to the deprecation of confidence-score. Use spot-voicegenie-enUS-6.3.0-m.snsr instead.
  • Fixed
    • Installer application failed if the HOME environment variable pointed to an invalid or read-only directory.

6.13.1 (2020-02-20)

  • Added
  • Fixed
    • tnl grammar-stream and phrases-stream definitions were missing a trailing . Note that this fix introduces a potential incompatibility with release 6.13.0. If you were using grammar-stream ".classname" please revert to the syntax used in the documentation: grammar-stream "classname"
    • tnl If the first symbol on a grammar path included slot markup, ^nlu-slot was occasionally invoked for empty text results.
  • Security
    • tnl grammar-based recognition could cause a segmentation fault for unsupported input in languages that require orthographic normalization (Mandarin, Japanese, etc.). Support for these languages was introduced in 6.13.0.

6.13.0 (2020-02-11)

  • Added
  • Changed
    • Known issues.
    • DSP library (for creating embedded spotter models) version 6.2.2.
    • Reduced the set of enrollment failure reasons that require starting over with all new enrollments. reason values of spot, rec-variance, poor-rec-limit, and repetition now require just the failed enrollment to be replaced.
    • udt-enUS-2.66.1.1.snsr, creates smaller enrolled spotter models than the previous udt-enUS-2.88.9.7.snsr, with similar performance.
    • snsr-eval:
      • Supports VAD task types.
      • Reads audio from stdin if the audio filename is -.
    • tnl Broad-domain speech-to-text with improved accuracy and support for a user-defined custom recognition slot: lvcsr-broad-enUS-2.0.0.snsr.
    • tnl US English model with grammar-based recognition support: lvcsr-build-enUS-2.0.0.snsr.
    • tnl VAD / LVCSR template models include support for slot-capturing semantic markup: tpl-spot-vad-lvcsr-2.2.0.snsr, tpl-spot-vad-lvcsr-3.2.0.snsr, tpl-vad-lvcsr-2.2.0.snsr, and tpl-vad-lvcsr-3.2.0.snsr.
  • Fixed
    • tnl The grammar-stream parser supports weights on variables (non-terminal symbols), and provides improved error reporting.
    • tnl Removed the -ln(p) weight formula from grammar-based recognition documentation. Always use -log10(p) for symbol weights.
    • tnl Silence markers (<s>, <wp>, and </s>) were sometimes included in the recognition result, even when show-silence was set to 0.
    • tnl grammar-based recognition:
      • rule = a b c; g = $rule:symbol; produced symbol a b c instead of symbol.
      • g crashed instead reporting an error.
      • g = ; was not flagged as an error.
      • g = a $g; crashed instead reporting an error.
      • a* was equivalent to a+ instead of [a+].
      • @/1@ was parsed as input symbol @ with weight 1, instead of semantic tag @/1@.
      • Mismatched parentheses and brackets such as g = ( a [ ) was not flagged as an error.
      • The grammar parser leaked memory when reporting some error types.
      • The pronunciation prediction engine generated too many alternates for particularly long "words", such as UUIDs. This incurred a large heap overhead and slowed down custom grammar builds.
  • Security
    • Corrected possible double free() during enrollment when the ^progress handler return a code other than OK.

6.12.0 (2019-10-17)

  • Changed
    • Reduced CPU load on ARM with NEON.
    • New spot-convert command-line options:
      • -a: convert all the operating points in a snsr model to embedded format.
      • -c: produce C output files in addition to the standard .bin format.
    • spot-convert output filenames include the operating point, for example: spot-hbg-enUS-1.3.0-m-pc38-op10-net.c for operating-point 10.
    • spot-eval-batch writes confidence-score or sv-score to the log file for INVFA, INVTA, and OOVFA keys, as appropriate.
    • Android Studio 3.5.1 or later is required to build Android samples.
    • TrulyNatural SDK now requires Android API level 18 or later.
    • Android sample apps use targetSdkVersion 28.
    • Upgraded to Gradle version 5.4.1.
    • sample/c/Makefile notes the SNSR_EDIT macro change required when cross-compiling the samples.
  • Fixed
    • Crash when attempting to use spot-voicegenie-enUS-6.3.0.snsr in slot 0 of tpl-spot-select.
    • Edge-case segmentation fault in tpl-spot-sequential.
    • If files listed in the in-vocabulary or out-of-vocabulary lists were not readable, the spot-eval-batch utility did not process all files in these lists.
    • spot-eval-batch logged in-vocabulary false accepts with the INVFX tag instead of INVTX, as specified in the documentation.
    • spot-eval-batch did not count in-vocabulary false accepts when the -u flag was specified. These FAs were logged, though.

6.11.0 (2019-08-14)

  • Added
  • Changed
    • Model streams are de-duplicated and now contain only one instance of each unique object. In some use cases this can lead to significant model size (and therefore RAM use) reductions.
    • udt-enUS-2.88.9.7.snsr with improved enrollment quality checking.
    • sample/android/enroll-udt/ sample enrollment app shows the current enrollment and the number of enrollments required.
  • Fixed
    • Java static member functions were not in the documentation index.
  • Security
    • The spot-data.c sample read beyond the end of the input buffer on the last audio block processed.
    • tnl Fixed possible out-of-bounds heap write when building a custom recognizer from a list of phrases, phrases-stream

6.10.0 (2019-07-15)

  • Added
    • reset.
    • Enrolled fixed trigger model for use with TrulySecure Speaker Verification post-processing: eft-hbg-enUS-23.0.0.8-tssv.snsr.
    • Voice Genie spotter with improved performance: spot-voicegenie-enUS-6.3.0.snsr.
    • Enrolled fixed trigger with lower imposter accept rate: eft-hbg-enUS-23.0.0.8.snsr.
    • DSP library (for creating embedded spotter models) version 6.1.4.
    • spot-eval-batch utility writes the default log file to the current directory, instead of the directory the spotter model is in.
    • tnl tpl-spot-vad-lvcsr-3.1.0.snsr adds support for threaded LVCSR recognizers that run slower than real-time.
    • tnl Broad-domain speech-to-text with improved accuracy: lvcsr-broad-enUS-1.2.0.snsr.
    • tnl Support for running LVCSR recognizers from code space.
  • Fixed
    • Java documentation: require throws an IllegalArgumentException, not an IOException.
    • tnl When an LVCSR recognizer was used with a VAD, ^result would occasionally not be invoked.

6.9.0 (2019-05-20)

  • Added
    • spot-eval-batch utility.
    • Support for running spotter models from code space. On platforms where code runs directly from ROM this reduces RAM requirements.
    • Option -c in snsr-edit converts a model to read-only C code.
    • Support for deep-learned VAD, usable without a preceding phrase spotter. This improves speech segmentation accuracy over the energy-only models.
      • vad-ml-3.0.0.snsr
      • tnl tpl-vad-lvcsr-3.0.0.snr
  • Changed
  • Fixed
    • tnl tpl-spot-vad-lvcsr-3.0.0.snsr and tpl-spot-vad-lvcsr-2.0.1.snsr produced unexpected results when used with include-leading-silence = 1.

6.8.0 (2019-03-29)

  • Added
    • Experimental support for a deep-learned VAD. This improves speech segmentation accuracy.
      • tpl-spot-vad-3.0.0.snsr
      • tnl tpl-spot-vad-lvcsr-3.0.0.snr
  • Changed
    • Voice Genie spotter with improved performance: spot-voicegenie-enUS-6.2.0.snsr.
    • Updated energy-based VAD models with improved speech segmentation performance:
      • tpl-spot-vad-2.0.1.snsr
      • tpl-spot-vad-lvcsr-2.0.1.snsr
      • vad-lvcsr-2.0.1.snsr
      • vad-energy-2.0.1.snsr
    • DSP library (for creating embedded spotter models) version 6.1.3.
    • models promoted out of the Overview documentation page.
    • Java forEach method no longer throws an Exception for return codes STREAM_END, STOP, SKIP, REPEAT, and TIMED_OUT.
  • Fixed
    • Upgraded to Gradle version 5.2.1 for compatibility with Java 11.
    • Java setString with the delete-user key threw a RuntimeException if the ^done handler returned a code other than OK.
    • faq still contained references to the -m snsr-eval command-line option that was replaced by -f.
    • Some noisy enrollment recordings with context were mistakenly rejected.
    • tnl Using weights on variables in a grammar caused an abort() on Windows.
  • Security
    • Fixed possible heap buffer overrun when loading a corrupted task model file.

6.7.0 (2019-02-06)

  • Added
    • New wake word settings: id, vocab-iterator.
    • spot-voicegenie-enUS-6.1.0-m.snsr. This is a fixed trigger for the phrase "Voice Genie" in US English with improved performance. Note that this does not support confidence-score.
    • snsr-eval and snsr-edit support a new -f command-line option that loads a file into a model setting.
    • UDT model for use with TrulySecure Speaker Verification post-processing: udt-enUS-5.1.1.7-tssv.snsr.
    • tnl Ability to build recognizers from a grammar specification, or from a list of alternate phrases.
    • tnl New model that supports building a custom recognizer in US English: lvcsr-build-enUS-1.0.0.snsr.
    • Source code for the macOS and iOS SnsrStream audio capture implementation: aqs-stream.c and aqs-stream.h.
    • Windows 64-bit MinGW library, in lib/x86_64-windows-mingw/libsnsr.a
  • Changed
    • spot-eval tool renamed to snsr-eval to better reflect its usage as a general-purpose model evaluator. This is a name change only, snsr-eval behavior is compatible with the previous spot-eval tool. The source code for snsr-eval is available as snsr-eval.c.
    • Removing an enrolled user with delete-user will invoke the ^done handler. Also see the updated documentation for model-stream.
    • DSP library (for creating embedded spotter models) version 6.1.2.
    • sample-count returns 53 usable bits, regardless of the width of size_t. This value previously wrapped after 74.5 hours on 32-bit machines.
    • Spotter models updated to support id and vocab-iterator:
      • spot-hbg-enUS-1.3.0-m.snsr
      • spot-music-enUS-1.1.0-m.snsr
      • spot-voicegenie-enUS-1.1.0-m.snsr
      • tpl-spot-debug-1.2.0.snsr
      • tpl-spot-dynop-1.1.0.snsr
      • tpl-spot-sequential-1.1.0.snsr
      • tpl-spot-vad-1.1.0.snsr
      • tnl tpl-spot-vad-lvcsr-1.2.0.snsr
    • Enrollment models updated to support id and vocab-iterator on enrolled models, and to improve enrollment error checks:
      • eft-hbg-enUS-23.0.0.7.snsr
      • udt-enUS-2.88.6.7.snsr
      • udt-enUS-5.1.1.7.snsr
      • udt-enUS-12.0.10.7.snsr
    • ARM libraries support threaded recognizers, and require linking with pthread and rt.
  • Removed
    • The -m command-line option in snsr-edit. Use the new -f option instead.
  • Fixed
    • Corner case where the VAD could fail with to-index (xxx) must be <= last-index (yyy) if the input stream ended while in a speech region.
    • Retrieving audio-stream from a VAD failed after 74.5 hours of continuous processing on machines with 32-bit size_t.
    • Some enrollment recordings with context were mistakenly rejected.
    • A race condition that could lead to unexpected errors when running sequential recognizers simultaneously on multiple threads.
    • tpl-spot-vad-* templates occasionally reported a start point after the actual start of speech.
    • set failed to report an error when a string value exceeded the maximum length (255 characters).
    • tnl Poor LVCSR recognition performance in utterances containing long pauses.
    • tnl When an LVCSR recognizer was used with a VAD, ^result would occasionally not be invoked.

6.6.0 (2018-11-28)

  • Added
    • Alpha-level support for fixed triggers with continuous background user enrollment, for improved false-accept performance.
    • Enrolled spotters with support for operating-point.
    • New UDT model: udt-enUS-2.88.6.6.snsr, with improved false-accept and impostor accept performance. Supports five different operating-points.
  • Changed
    • Android Studio 3.2.1 or later is required to build Android samples.
    • Android sample apps target API level 28, and request runtime permissions where supported.
    • Xcode 10.1 or later is required to build iOS sample code.
    • Updated task models:
  • Removed
    • udt-enUS-2.88.5.5.snsr, superseded by udt-enUS-2.88.6.6.snsr.
  • Fixed
    • VAD models rejected short single words as noise.
    • tpl-spot-vad-* templates had poor speech end-point detection when used with automatic gain control.
    • NEON vector acceleration was not used on AArch64 architectures.

6.5.2 (2018-10-24)

  • Added
    • Support for improved performance in new enrolled fixed-trigger models.
    • Improved descriptions of ^enrolled and ^adapted.
  • Fixed
    • Returning SKIP from ^pass did not discard the enrollment.

6.5.1 (2018-10-03)

  • Changed
    • DSP library (for creating embedded spotter models) version 6.0.1.
  • Fixed
    • Enrolled fixed-trigger models for release 6.5.0 could fail with a segmentation fault on poor quality enrollment recordings.
    • Java save method public SnsrSession save(SnsrDataFormat format, SnsrStream outputStream) failed with a memory error.

6.5.0 (2018-09-21)

  • Added
    • Models and library artifacts are published to the local Maven repository (mavenLocal()) during installation.
    • New settings: accel-info, lvcsr, and task-type-and-version-list.
    • spot-voicegenie-enUS-1.0.0-m.snsr. This is a fixed trigger for the phrase "Voice Genie" in US English that supports confidence-score.
    • New UDT model: udt-enUS-2.88.5.5.snsr, with improved false-accept and impostor accept performance.
    • FAQ section: How do I improve wake word performance?
    • Android static SnsrStream fromAudioDevice(int device, int sampleRate) method allows audio source selection.
    • tnl LVCSR task type.
  • Changed
    • require supports task-type-and-version-list.
    • Added a note to push-spot.c warning against use with threaded models.
    • Increased push-spot.c ring buffer size to ten seconds.
    • Java SnsrStream has protected scope, to avoid accidental use. New Stream instances must be created using the static constructor methods.
    • Android library artifact names are either thf or tnl to distinguish between TrulyHandsfree and TrulyNatural SDKs. For example: com.sensory.speech.snsr:tnl:6.5.0@aar and com.sensory.speech.snsr:thf:6.5.0@aar
    • spot-convert throws a more informative error message if a model cannot be converted to a deeply embedded format.
    • Reduced the result latency incurred for internally multi-threaded spotter models.
    • library-info includes accel-info status.
    • tpl-spot-debug-1.1.0.snsr supports include-model.
    • Increased model-stream scope. This now continues to be available after the ^done handler has returned.
    • Enrollment audio quality requirements relaxed in new models: eft-hbg-enUS-23.0.0.5.snsr, udt-enUS-12.0.10.5.snsr, and udt-enUS-5.1.1.5.snsr.
    • tnl Updated task models, with a new task-type, lvcsr. The templates improve the audio hand-off from the VAD to the LVCSR recognizer.
      • lvcsr-broad-enUS-1.1.0.snsr: Broad-domain speech-to-text.
      • tpl-spot-vad-lvcsr-1.1.0.snsr: Template for LVCSR on VAD-segmented audio, gated by a phrase spotter. See tpl-spot-vad-lvcsr.
      • tpl-vad-lvcs-1.1.0.snsr: Template for LVCSR on VAD-segmented audio. See tpl-vad-lvcsr.
      • tpl-spot-debug-1.1.0.snsr: Supports phrasespot tasks built from tpl-spot-vad-lvcsr and tpl-vad-lvcsr templates.
    • tnl If show-silence is 0, empty LVCSR results were not reported via ^result and ^result-partial. These handlers are now invoked with a text value of "".
  • Removed
    • UDT model: udt-enUS-12.6.21.0.snsr, superseded by udt-enUS-2.88.5.5.snsr.
  • Fixed

6.4.0 (2018-07-28)

6.3.0 (2018-06-24)

6.2.0 (2018-05-15)

  • Added
    • Support for spotters that reject phrases similar to the target.

6.1.0 (2018-05-02)

  • Added
  • Changed
    • operating-point changes are allowed in running spotters. For example, from within a ^result callback.
    • DSP library (for creating embedded spotter models) version 4.4.3.
  • Fixed
    • tpl-spot-vad-1.0.4.snsr used with include-leading-silence == 1 could lose part of the spotted phrase.
    • vad-energy-1.0.5.snsr replaces vad-energy-1.0.4.snsr to address error raised after a successful end-point detection.
    • C sample code does not compile without warning when using a C++ compiler.

6.0.0 (2018-03-21)

  • Added
  • Changed
    • Documentation sets split by API language binding.
    • Linux libraries compiled with -fno-stack-protector and -D_FORTIFY_SOURCE=0 to improve compatibility with additional GLIBC variants: aarch64-linux-gnu, arm-linux-gnueabi, arm-linux-gnueabihf, i686-linux-gnu, and x86_64-linux-gnu.
    • require supports version ranges.
    • Task models with task-version set to 1.0.0: eft-hbg-enUS-23.0.0.4.snsr, spot-hbg-enUS-1.2.4-m.snsr, spot-music-enUS-1.0.4-m.snsr, tpl-spot-concurrent-1.0.4.snsr, tpl-spot-debug-1.0.4.snsr, tpl-spot-sequential-1.0.4.snsr, tpl-spot-vad-1.0.4.snsr, udt-enUS-12.0.10.4.snsr, and udt-enUS-5.1.1.4.snsr.
    • New FAQ section: Can I use models from the beta releases?
  • Removed
    • SNSR_TECH_LEVEL and Snsr.TECH_LEVEL. Use SDK version instead.
  • Fixed
    • aarch64-linux-gnu library does not support ALSA recording.