---
source_path: "changes/version-6.md"
canonical_url: "https://doc.sensory.com/tnl/7.8/changes/version-6/"
---

# Version 6 changes

**Tip:**

Looking for the latest changes? See [Version 7 changes](https://doc.sensory.com/tnl/7.8/changes/index.md#v7-changes).

TrulyNatural version 6 introduced support for prebuilt LVCSR models in [v6.3.0](https://doc.sensory.com/tnl/7.8/changes/version-6.md#v6.3.0)
and [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) in [v6.7.0](https://doc.sensory.com/tnl/7.8/changes/version-6.md#v6.7.0).

The API and TrulyHandsfree models are fully backwards-compatible
with [version 5](https://doc.sensory.com/tnl/7.8/changes/version-5.md#v5-changes) 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**
    - Removed calls to `Log.d()` and `Log.e()` in [fromAudioDevice](https://doc.sensory.com/tnl/7.8/api/io.md#fromaudiodevice) on Android.

## 6.21.0 (2023-01-26)
- **Added**
    - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#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".
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.8.0.snsr_ which adds events [^listen-begin](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#listen-begin),
      and [^listen-end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#listen-end), and settings [complete-only](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#complete-only) and [search.frame-nota](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#searchframe-nota),
      that were missing from _tpl-opt-spot-vad-lvcsr-1.7.0.snsr_
- **Changed**
    - [spot-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-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](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-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.
    - _(TrulyNatural only)_ Lower RAM requirement for recognizers on small embedded platforms.
    - _(TrulyNatural only)_ Removed the `<no-memory/>` recognition result. Recognizers that
      previously returned this now return `<no-match/>` instead.
      See [grammar special symbols](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-special) for details on `<no-match/>`.
- **Removed**
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.7.0.snsr_
- **Fixed**
    - Reduced the (low) likelihood of exceeding [push-duration-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-duration-limit).
    - _tpl-spot-vad-3.7.0.snsr_ could raise a spurious [^begin](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#begin)
      directly after [^end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#end).
    - _(TrulyNatural only)_ With [complete-only](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#complete-only) `== 1,` [text](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#text) could
      occasionally be an empty string instead of `<no-match/>`.
    - _(TrulyNatural only)_ _tpl-vad-lvcsr-3.7.0.snsr_ could report a buffer error if
      [auto-flush](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#auto-flush) was set before [trailing-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#trailing-silence).

## 6.20.1 (2022-11-14)
- **Added**
    - [push-audio.c](https://doc.sensory.com/tnl/7.8/api/sample/c/push-audio.md#push-audioc) project files for Microsoft Visual Studio.
- **Changed**
    - [push-audio.c](https://doc.sensory.com/tnl/7.8/api/sample/c/push-audio.md#push-audioc) uses live audio if the now optional audio
      filename isn't provided.
- **Fixed**
    - With [push-duration-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-duration-limit) `> 0`, [push-buffer-backlog](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-buffer-backlog)
      increased monotonically, eventually leading to a
      [NOT_ENOUGH_SPACE](https://doc.sensory.com/tnl/7.8/api/inference.md#rc) error.
    - VAD [templates](https://doc.sensory.com/tnl/7.8/models/index.md#templates) in 6.20.0 allocated a ring buffer that was
      too small for cases where speech was found just before the
      [trailing-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#trailing-silence) timeout. This could result in a runtime
      [ARG_OUT_OF_RANGE](https://doc.sensory.com/tnl/7.8/api/inference.md#rc) error.

## 6.20.0 (2022-11-02)
- **Added**
    - [push](https://doc.sensory.com/tnl/7.8/api/inference.md#push) and [stop](https://doc.sensory.com/tnl/7.8/api/inference.md#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](https://doc.sensory.com/tnl/7.8/api/inference.md#push). See [push-duration-limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-duration-limit), [push-buffer-size](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-buffer-size), [push-buffer-backlog](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#push-buffer-backlog).
    - [CLOCK_FUNC](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_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](https://doc.sensory.com/tnl/7.8/models/index.md#templates) with lower RAM requirements:
        + _tpl-spot-vad-3.7.0.snsr_
        + _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.7.0.snsr_
        + _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.7.0.snsr_
        + _(TrulyNatural only)_ _tpl-vad-lvcsr-3.7.0.snsr_
    - _(TrulyNatural only)_ Documentation section that shows how to
      [use class libraries from code](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-class-libraries-api).
    - _(TrulyNatural only)_ [grammar-syntax](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-syntax) notes that the effects of `:` terminal rewrites are used
      in [^nlu-slot](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-slot), but not in [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result).
    - _(TrulyNatural only)_ LVCSR models with improved pronunciation modeling:
        + _(TrulyNatural only)_ _lvcsr-background-enUS-1.1.0.snsr_
        + _(TrulyNatural only)_ _lvcsr-broad-enUS-3.1.0-t5.snsr_
        + _(TrulyNatural only)_ _lvcsr-build-enUS-2.6.0.snsr_
    - _(TrulyNatural only)_ [lvcsr-lib-enUS-1.2.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#lvcsr-lib-enUS) with updated classes.
       Many class names changed for improved compatibility with [VoiceHub](https://doc.sensory.com/tnl/7.8/reference/voicehub.md#voicehub).
- **Changed**
    - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) `-l` flag to reduce output verbosity.
    - _snsr.h_ no longer includes `<unistd.h>.`
    - _push-spot.c_ sample renamed to [push-audio.c](https://doc.sensory.com/tnl/7.8/api/sample/c/push-audio.md#push-audioc)
        + Uses new [push](https://doc.sensory.com/tnl/7.8/api/inference.md#push) APIs.
        + Supports [phrasespot](https://doc.sensory.com/tnl/7.8/api/setting-keys/values.md#phrasespot), [phrasespot-vad](https://doc.sensory.com/tnl/7.8/api/setting-keys/values.md#phrasespot-vad), [lvcsr](https://doc.sensory.com/tnl/7.8/api/setting-keys/values.md#lvcsr), and [vad](https://doc.sensory.com/tnl/7.8/api/setting-keys/values.md#vad) task types.
    - [spot-data.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data.md#spot-datac) uses new [push](https://doc.sensory.com/tnl/7.8/api/inference.md#push) APIs.
    - DSP library (for creating embedded spotter models) version 7.0.0.
    - _(TrulyNatural only)_ [complete-only](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#complete-only) defaults to on, `1`. Revert to previous behavior
      by setting `complete-only = 0`.
    - _(TrulyNatural only)_ If [complete-only](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#complete-only) filters out an incomplete recognition result,
      [text](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#text) will be `<no-match/>` instead of an empty string.
    - _(TrulyNatural only)_ Lower RAM requirement for recognizers on small embedded platforms.
- **Deprecated**
    - [auto-flush](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#auto-flush)
- **Removed**
    - _spot-voicegenie-enUS-6.4.0-m.snsr_
    - _tpl-spot-vad-3.4.0.snsr_
    - _(TrulyNatural only)_ _lvcsr-background-enUS-1.0.1.snsr_
    - _(TrulyNatural only)_ _lvcsr-broad-enUS-3.0.0-t5.snsr_
    - _(TrulyNatural only)_ _lvcsr-build-enUS-2.5.1.snsr_
    - _(TrulyNatural only)_ _lvcsr-lib-enUS-1.1.0.snsr_
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.4.0.snsr_
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.5.0.snsr_
    - _(TrulyNatural only)_ _tpl-vad-lvcsr-3.5.0.snsr_
- **Fixed**
    - _(TrulyNatural only)_ LVCSR recognizer could produce a spurious [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result)
      when used with the lightweight VAD and recognizing from file.
    - _(TrulyNatural only)_ Missing [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) when using [tpl-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-vad-lvcsr.md#tpl-vad-lvcsr-type)
      with [include-leading-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#include-leading-silence) `= 1`.
    - _(TrulyNatural only)_ Missing [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) when using a VAD template
      and recognizing from an audio file without sufficient trailing silence.
    - _(TrulyNatural only)_ Unexpected recognition or NLU result after replacing a recognition class at runtime.
- **Security**
    - [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#snsr-edit) `-q setting-name` could cause a segmentation fault if
      the value for `setting-name` was `NULL.`
    - Retrieving the [user-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#user-iterator), could cause an invalid memory reference.
    - [load](https://doc.sensory.com/tnl/7.8/api/inference.md#load) could fail with a `NULL` pointer dereference
      when attempting to load from a truncated model file or stream.
    - The [allocTLSF](https://doc.sensory.com/tnl/7.8/api/library-config.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapt-started) for continuously adapting spotter models.
    - [ca-voicegenie-enUS-1.1.0.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#ca-voicegenie-enUS) US English spotter for
      "voice genie" that continuously adapts to one or more users.
      Includes support for [^adapt-started](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapt-started).
    - Support for saving continuous adaptation spotter enrollment contexts from
      [^adapted](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapted), and loading these with [load](https://doc.sensory.com/tnl/7.8/api/inference.md#load).
    - TrulyNatural is available as an XCFramework for iOS as _lib/ios/snsr.xcframework_.
    - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) reports [^adapt-started](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapt-started), [^adapted](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapted), and [^new-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#new-user)
      when run with increased verbosity (one or more `-v` flags).
    - [live-enroll](https://doc.sensory.com/tnl/7.8/tools/live-enroll.md#live-enroll) `-p` option saves enrollment recordings to file.
    - Updated [templates](https://doc.sensory.com/tnl/7.8/models/index.md#templates) with support for [^adapt-started](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapt-started), [^adapted](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapted), [delete-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#delete-user),
      [^new-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#new-user), [rename-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#rename-user), [user-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#user-count), [user-index](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#user-index), [user](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#user), and [user-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#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_
        + _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.4.0.snsr_
        + _(TrulyNatural only)_ _tpl-spot-lvcsr-1.4.0.snsr_
    - _(TrulyNatural only)_ [complete-only](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#complete-only) setting.
    - _(TrulyNatural only)_ LVCSR models with support for [complete-only](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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](https://doc.sensory.com/tnl/7.8/tools/live-enroll.md#live-enroll), [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#snsr-edit), [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval), and [spot-enroll](https://doc.sensory.com/tnl/7.8/tools/spot-enroll.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#cache-file) size by 6 MiB.
    - Code emitted by [SUBSET_INIT](https://doc.sensory.com/tnl/7.8/api/inference.md#fm_subset_init) and [SOURCE](https://doc.sensory.com/tnl/7.8/api/inference.md#fm_source) has
      improved compatibility with C++ compilers.
    - iOS PhraseSpot sample app uses _snsr.xcframework_
    - _(TrulyNatural only)_ Documentation for [search.frame-nota](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#searchframe-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_
    - _(TrulyNatural only)_ _lvcsr-background-enUS-1.0.0.snsr_
    - _(TrulyNatural only)_ _lvcsr-broad-enUS-3.0.0-t5.snsr_
    - _(TrulyNatural only)_ _lvcsr-build-enUS-2.5.0.snsr_
    - _(TrulyNatural only)_ _tpl-spot-lvcsr-1.3.0.snsr_
- **Fixed**
    - Spurious [^end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#end) when running a VAD over a very short file.
      During this mistaken callback [begin-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#begin-ms) was not available.
    - Enrolling continuously adapting spotters logged progress to `stdout.`
    - Loading a Continuous Adaptation spotter context with [cache-file](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#user-iterator) did not show any
      enrolled users loaded from [cache-file](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#cache-file) until the session was run.
    - Continuous Adaptation spotter [cache-file](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapted) would be
      delayed until the next detection if the spotter was used in slot
      [1](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#1) of [tpl-spot-sequential](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-sequential.md#tpl-spot-sequential-type).
    - _(TrulyNatural only)_ Decreasing [result-max](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#result-max) took effect only after saving
      and then reloading a model.
- **Security**
    - Calling [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#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**
    - _(TrulyNatural only)_ _tpl-opt-spot-vad-lvcsr-1.0.3.snsr_ with support for VAD events:
      [^begin](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#begin), [^end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#end), [^limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#limit), and [^silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#silence).
- **Removed**
    - _tpl-opt-spot-vad-lvcsr-1.0.2.snsr_
- **Fixed**
    - Clarify that [user-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#user-count) is only available with
      [wake word](https://doc.sensory.com/tnl/7.8/models/types/wake-word.md#wake-word-type) models that continuously adapt.
    - Incorrect sample snippet in the documentation for [allocPerf](https://doc.sensory.com/tnl/7.8/api/library-config.md#allocperf).
    - _(TrulyNatural only)_ `<no-memory/>` recognition result returned instead of `<no-match/>`
      for recognizers that can never return a valid result.
    - _(TrulyNatural only)_ Models configured to use a limited amount of RAM could
      gradually become less accurate over time.
    - _(TrulyNatural only)_ Example code for _lvcsr-background-enUS_.
    - _(TrulyNatural only)_ The memory use of recognizers configured to use N-best
      (`result-max > 1`) increased over time.
- **Security**
    - _(TrulyNatural only)_ 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](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapted), [cache-file](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#cache-file), [delete-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#delete-user), [max-users](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#max-users), [^new-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#new-user),
      [rename-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#rename-user), [user-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#user-count), [user-index](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#user-index), [user](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#user), and [user-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#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](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_thread_support).
    - Support for replacing the fatal error function, [PANIC_FUNC](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_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](https://doc.sensory.com/tnl/7.8/api/io.md#provider), [AllocRC](https://doc.sensory.com/tnl/7.8/api/library-config.md#allocrc),
      [ALLOC](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_alloc), [ALLOC_ADD_POOL](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_alloc_add_pool).
    - New memory allocator implementations:
      [allocStdlib](https://doc.sensory.com/tnl/7.8/api/library-config.md#allocstdlib), [allocBuddy](https://doc.sensory.com/tnl/7.8/api/library-config.md#allocbuddy), [allocTLSF](https://doc.sensory.com/tnl/7.8/api/library-config.md#alloctlsf), [allocLock](https://doc.sensory.com/tnl/7.8/api/library-config.md#alloclock).
    - Optional memory allocator instrumentation wrapper:
      [allocPerf](https://doc.sensory.com/tnl/7.8/api/library-config.md#allocperf), [allocPerfStats](https://doc.sensory.com/tnl/7.8/api/library-config.md#allocperfstats).
    - New heap allocator functions that use the TrulyNatural dynamic memory manager:
      [malloc](https://doc.sensory.com/tnl/7.8/api/heap.md#malloc), [free](https://doc.sensory.com/tnl/7.8/api/heap.md#free), [realloc](https://doc.sensory.com/tnl/7.8/api/heap.md#realloc).
    - New FAQ section:
      [Can I avoid dynamic memory allocation?](https://doc.sensory.com/tnl/7.8/faq.md#custom-heap-allocator)
    - [fromAudioFile](https://doc.sensory.com/tnl/7.8/api/io.md#fromaudiofile).
    - [ALLOCATOR_EXISTS](https://doc.sensory.com/tnl/7.8/api/inference.md#rc), [NOT_SUPPORTED](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_not_supported).
    - Updated [Enrolled wake word](https://doc.sensory.com/tnl/7.8/models/index.md#enroll-models) models. These use a machine-learned VAD
        for improved audio segmentation:
        + [eft-hbg-enUS-23.0.0.9.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#eft-hbg-enUS)
        "Hello Blue Genie" US English fixed wake word.
        + [udt-universal-3.66.1.9.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#udt-universal)
        New User-Defined Trigger enrollment model suitable for use with
        most languages.
        + [udt-enUS-5.1.1.9.snsr](https://doc.sensory.com/tnl/7.8/models/index.md#udt-enUS) User-Defined Trigger
        enrollment with models compatible with TrulyHandsfree 3.x DSP ports.
    - _tpl-spot-sequential-1.3.0.snsr_ allows optional looping on [1](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#1). This is controlled
       with [loop](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#loop), which defaults to `0` for the old behavior.
    - _(TrulyNatural only)_ Description of **broad** and **background** recognition models in [LVCSR](https://doc.sensory.com/tnl/7.8/models/index.md#lvcsr-models).
    - _(TrulyNatural only)_ 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.
    - _(TrulyNatural only)_ _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](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#snsr-edit) includes a `-q` option to query setting values.
    - [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#snsr-edit) writes to _edited-model.snsr_ only if the model
      was updated with `-f,` `-g,` or `-s.`
    - [spot-enroll](https://doc.sensory.com/tnl/7.8/tools/spot-enroll.md#spot-enroll) and [live-enroll](https://doc.sensory.com/tnl/7.8/tools/live-enroll.md#live-enroll) show enrollment vocabulary,
      if the model supports it.
    - [spot-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-eval-batch) log file format includes [score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#score).
    - [library-info](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md#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](https://doc.sensory.com/tnl/7.8/models/index.md#udt-universal)
    - Reworded error message for [EOF](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_eof).
    - DSP library (for creating embedded spotter models) version 6.7.2.
    - The [spot-data.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data.md#spot-datac) sample uses the [allocTLSF](https://doc.sensory.com/tnl/7.8/api/library-config.md#alloctlsf) allocator to avoid
      dynamic memory allocation, and [PANIC_FUNC](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_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](https://doc.sensory.com/tnl/7.8/api/io.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#dsp-header-stream)
      and [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#spot-convert) include only ASCII characters.
      This improves compatibility with old toolchains. Example:
      ```c
      /* 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"	/* ハイゲーム */
      ```
    - _(TrulyNatural only)_ New `<no-memory/>` recognition result to distinguish transient out-of-memory
      conditions from poor recognition confidence. See [grammar special symbols](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-special).
- **Removed**
    - [Enrolled wake word](https://doc.sensory.com/tnl/7.8/models/index.md#enroll-models) 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](https://doc.sensory.com/tnl/7.8/models/index.md#lvcsr-models) models
        + _lvcsr-broad-enUS-2.3.0.snsr_
        + _lvcsr-build-enUS-2.3.0.snsr_
- **Fixed**
    - If [spot-enroll](https://doc.sensory.com/tnl/7.8/tools/spot-enroll.md#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](https://doc.sensory.com/tnl/7.8/api/inference.md#require) with [task-type-and-version-list](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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.
    - _(TrulyNatural only)_ [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) models built with TrulyNatural 6.16.0 or
      earlier did not invoke the [^nlu-slot](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-slot) callback in TrulyNatural 6.17.0.
    - _(TrulyNatural only)_ 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.
    - _(TrulyNatural only)_ Poor example use of `~s.timer-phrases` in [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition).
      The `~s.timer-phrases` class already includes typical requests
      phrases such as "set a timer for", the example duplicated this.
    - _(TrulyNatural only)_ 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.
    - _(TrulyNatural only)_ A [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#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](https://doc.sensory.com/tnl/7.8/api/inference.md#rc) error codes, and it set a message with
      [describeError](https://doc.sensory.com/tnl/7.8/api/inference.md#describeerror), and this error message was shorter than 20 bytes, then
      an out-of-bounds memory write could occur.
    - [reset](https://doc.sensory.com/tnl/7.8/api/inference.md#reset) could cause a segmentation fault if it was called before [run](https://doc.sensory.com/tnl/7.8/api/inference.md#run).

## 6.17.0 (2021-07-29)
- **Added**
    - _(TrulyNatural only)_ Support for N-best phrase-level recognition results. New settings:
        + [result-max](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#result-max), [result-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#result-count), [result-index](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#result-index).
- **Changed**
    - _(TrulyNatural only)_ [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) reports N-best recognition results, when enabled.
    - _(TrulyNatural only)_ Updated [models](https://doc.sensory.com/tnl/7.8/models/index.md#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_
    - _(TrulyNatural only)_ [grammar special symbols](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-special) notes that `<wp>` should not be used in NLU grammars.
    - _(TrulyNatural only)_ Known issues.
- **Fixed**
    - Model publishing to Maven repositories failed with recent JVM versions.
    - 64-bit Windows libraries did not use MMX acceleration.
    - [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#spot-convert) crashed instead of displaying an error message
      for unsupported DSP targets.
    - [spot-enroll](https://doc.sensory.com/tnl/7.8/tools/spot-enroll.md#spot-enroll) did not report files that were skipped due to
      speech detection failure as enrollment errors.
    - _(TrulyNatural only)_ [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#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**
    - [LICENSE_LIMIT_EXCEEDED](https://doc.sensory.com/tnl/7.8/api/inference.md#rc).
    - `-g` command-line option in [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) and [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#snsr-edit).
    - Support for Apple Silicon in _lib/macos/libsnsr.a_ on macOS.
    - _(TrulyNatural only)_ [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) grammar support for class output replacement. For example:
      `~classname:` suppresses all recognition output from the class.
    - _(TrulyNatural only)_ Lightweight NLU processor:
        + Now a separate step after recognition is complete.
          See [nlu-grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#nlu-grammar-stream) and
          [LVCSR with lightweight NLU parsing](https://doc.sensory.com/tnl/7.8/faq.md#lvcsr-nlu)
        + Can be used with broad domain recognition models.
        + Supports a wildcard symbol `.` that matches any word.
        + Optionally reports multiple matches in case of ambiguity.
          See [nlu-match-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-match-count), [nlu-match-index](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-match-index), and [nlu-match-max](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#nlu-match-max).
        + [nlu-word-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#nlu-word-iterator) iterates over the parsed NLU result words.
- **Changed**
    - [enrollment-id](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#enrollment-id) available in [^fail](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#fail).
    - [model-name](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#model-name) is used when creating embedded models.
    - [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point) for
      spotters in slot [0](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#0) and slot [1](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#1). Previous behavior forced these to have the
      same sensitivity, which limited utility.
    - [tpl-spot-sequential](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-sequential) notes that [^listen-begin](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#listen-begin) and [^listen-end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#listen-end) mark
      the begin and end of audio focus shifting to slot [1](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#1).
    - Reference documentation updated for [include-leading-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#include-leading-silence).
    - [spot-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-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:
      ```sh
      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](https://doc.sensory.com/tnl/7.8/api/io.md#fromfilename) supports opening files in text mode.
    - _(TrulyNatural only)_ _tpl-spot-select-1.2.0.snsr_ supports NLU results.
    - _(TrulyNatural only)_ Reference documentation updated for [tpl-spot-vad](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad) and [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr).
    - _(TrulyNatural only)_ [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) reports multiple NLU matches when [nlu-match-max](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#nlu-match-max) and
      [nlu-match-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-match-count) are larger than `1`.
    - _(TrulyNatural only)_ A reference to a library class (those named `~s.*`) not found in
      the loaded [class library](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-class-libraries) is reported as an error.
    - _(TrulyNatural only)_ The broad-domain model, `lvcsr-broad-enUS-2.2.0.snsr,` includes
      a class slot for optional leading vocabulary.
    - _(TrulyNatural only)_ Updated [models](https://doc.sensory.com/tnl/7.8/models/index.md#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_
    - _(TrulyNatural only)_ Updated [models](https://doc.sensory.com/tnl/7.8/models/index.md#models), with support for new NLU features,
        [grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#grammar-stream), and [phrases-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#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**
    - [delay](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#delay).
    - _(TrulyNatural only)_ Support for [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) tags specified with `\@`.
- **Fixed**
    - If [spot-enroll](https://doc.sensory.com/tnl/7.8/tools/spot-enroll.md#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](https://doc.sensory.com/tnl/7.8/models/index.md#vad-models), [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#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.
    - _(TrulyNatural only)_ LVCSR recognizer leaked memory when the lightweight VAD was used and
      [partial-result-interval](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#partial-result-interval) was set to `0`
    - _(TrulyNatural only)_ _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](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#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.
    - _(TrulyNatural only)_ Invalid weight markup in [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) grammars could lead to
      a buffer overflow during parsing.

## 6.15.0 (2021-01-21)
- **Added**
    - Compatibility with models created by [VoiceHub](https://doc.sensory.com/tnl/7.8/reference/voicehub.md#voicehub).
    - [dsp.t-slice-version](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#dspt-slice-version), [dsp.production-ready](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#dspproduction-ready).
    - [score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#score).
    - _(TrulyNatural only)_ _lvcsr-lib-enUS-1.0.0.snsr_, a binary class-library that
      contains common grammar snippets. Use this with
      _lvcsr-broad-enUS-2.1.0.snsr_ and _lvcsr-build-enUS-2.1.0.snsr_
      to simplify [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) grammars. See [class libraries](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-class-libraries)
      and the [LVCSR](https://doc.sensory.com/tnl/7.8/models/index.md#lvcsr-models) section in [models](https://doc.sensory.com/tnl/7.8/models/index.md#models).
- **Changed**
    - [getStream](https://doc.sensory.com/tnl/7.8/api/inference.md#getters) supports reading models from slots in [task templates](https://doc.sensory.com/tnl/7.8/models/tpl/index.md#template-type).
    - [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#spot-convert) output filenames include [dsp.t-slice-version](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#dspt-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](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#dspt-slice-version) `== "3.4.0"` and
        [dsp.production-ready](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#dspproduction-ready) `== 1`.
    - When converting model files that expire, or have duration or recognition
      limits enabled, to embedded (DSP) format, [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#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](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#spot-convert) has a new `-q slotname` argument to support conversion of
      spotter models in template slots such as [tpl-spot-sequential](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-sequential).
    - [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#spot-convert) option `-o` to exclude [dsp.t-slice-version](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#dspt-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](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#0) in the
      audio sent to slot [1](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#1). This improves slot [1](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#1)
      recognition performance in cases where there's no pause between
      the phrase spotted by slot [0](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#0) and that spotted by slot [1](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#1).
    - [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#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.
        + See [model:ids](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#modelids), [SUBSET_INIT](https://doc.sensory.com/tnl/7.8/api/inference.md#fm_subset_init), and [FAQ entry](https://doc.sensory.com/tnl/7.8/faq.md#reduce-code-size).
        + These settings are not available when compiling with `-DSNSR_USE_SUBSET`:
          [dsp-target](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#dsp-target), [dsp-header-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#dsp-header-stream), [dsp-search-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#dsp-search-stream), and
          [dsp-acmodel-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#dsp-acmodel-stream).
    - Sample applications initialize [SECURITY_CHIP](https://doc.sensory.com/tnl/7.8/api/library-config.md#config_security_chip) when
     `SNSR_USE_SECURITY_CHIP` is defined.
    - TrulyNatural SDK now requires Android [API level 16][api-levels] 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_.
    - _(TrulyNatural only)_ Relaxed the ordering requirement for [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#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.
    - _(TrulyNatural only)_ [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) supports nested recognition classes.
    - _(TrulyNatural only)_ 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](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point) from [task templates](https://doc.sensory.com/tnl/7.8/models/tpl/index.md#template-type)
      would fail unless it had been explicitly set. This now returns
      the value from the spotter in the appropriate slot instead.
    - _(TrulyNatural only)_ Recognition results were set to `<no-match/>` for all
      [search.frame-nota](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#searchframe-nota) values larger than `0`. This regression first
      occurred in 6.14.0.
    - _(TrulyNatural only)_ Attempts to get values for [nlu-slot-name](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-slot-name), [nlu-slot-value](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-slot-value),
      or [nlu-slot-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-slot-count) succeeded and returned `NULL` or `0` even when these values
      were not available. Now returns [SETTING_NOT_AVAILABLE](https://doc.sensory.com/tnl/7.8/api/inference.md#rc).
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-2.2.0.snsr_ and _tpl-spot-vad-lvcsr-3.2.0.snsr_
      could mistakenly return [ELEMENT_API_VIOLATION](https://doc.sensory.com/tnl/7.8/api/inference.md#rc).
    - _(TrulyNatural only)_ 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**
    - _(TrulyNatural only)_ Setting [grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#grammar-stream) or [phrases-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#phrases-stream)
      more than once for the same model could access freed heap memory.

## 6.14.0 (2020-05-04)
- **Added**
    - Model license key expiration settings:
      [model-license-exp-date](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#model-license-exp-date), [model-license-exp-message](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#model-license-exp-message), and
      [model-license-exp-warn](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#model-license-exp-warn).
    - Support for custom [little-big spotter models](https://doc.sensory.com/tnl/7.8/faq.md#little-big)
      with lower latency and improved false reject / false accept performance.
    - _(TrulyNatural only)_ Improved efficiency (lower average CPU use) for all LVCSR recognizers.
    - _(TrulyNatural only)_ Experimental support for LVCSR models with lower size requirements
      for a given word error rate.
- **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](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) and [spot-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-eval-batch) do not report the now
      deprecated [confidence-score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#confidence-score).
    - DSP library (for creating embedded spotter models) version 6.3.0.
    - [listen-window](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#listen-window) values larger than `120` are in ms.
    - [models](https://doc.sensory.com/tnl/7.8/models/index.md#models) in this distribution are licensed with a non-expiring license key.
- **Deprecated**
    - The settings [confidence-score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#confidence-score) and [task-name](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#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**
    - _(TrulyNatural only)_ Operator precedence table in [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) documentation.
    - _(TrulyNatural only)_ Example NLU slot grammar, _data/grammars/enrollments-nlu-slot.txt_.
    - _(TrulyNatural only)_ FAQ entry:
      [LVCSR with lightweight NLU parsing](https://doc.sensory.com/tnl/7.8/faq.md#lvcsr-nlu).
- **Fixed**
    - _(TrulyNatural only)_ [grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#grammar-stream) and [phrases-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#phrases-stream) definitions were
      missing a trailing `.` This fix introduces a potential
      incompatibility with release 6.13.0.
      If you were using [grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#grammar-stream) `".classname"`
      revert to the syntax used in the documentation:
      [grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#grammar-stream) `"classname"`
    - _(TrulyNatural only)_ If the first symbol on a grammar path included slot markup,
      [^nlu-slot](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-slot) was occasionally invoked for empty text results.
- **Security**
    - _(TrulyNatural only)_ [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#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**
    - Full-text documentation search.
    - _(TrulyNatural only)_ [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) supports slot-capturing semantic markup with the`{ }` operator.
        + [^nlu-slot](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#nlu-slot) callback for with slot results.
        + [nlu-slot-name](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-slot-name), [nlu-slot-value](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-slot-value), [nlu-slot-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#nlu-slot-count),
          and [nlu-slot-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#nlu-slot-iterator) to iterate over available slot result names.
    - _(TrulyNatural only)_ [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) supports recognition classes.
    - _(TrulyNatural only)_ [LVCSR](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#lvcsr-type) tasks include support for an experimental lightweight
       VAD.
        - New settings: [backoff](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#backoff), [^begin](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#begin), [^end](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#end), [hold-over](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#hold-over),
          [leading-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#leading-silence), [^limit](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#limit), [max-recording](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#max-recording), [begin-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#begin-ms),
          [begin-sample](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#begin-sample), [end-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#end-ms), [end-sample](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#end-sample), [^silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#silence), and
          [trailing-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#trailing-silence).
        - Spotter-to-LVCSR template that uses the experimental lightweight VAD:
          _tpl-spot-lvcsr-1.0.0.snsr._
- **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](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#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](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval):
        - Supports [VAD](https://doc.sensory.com/tnl/7.8/models/types/vad.md#vad-type) task types.
        - Reads audio from `stdin` if the audio filename is `-.`
    - _(TrulyNatural only)_ Broad-domain speech-to-text with improved accuracy and support for a
      user-defined custom recognition slot: _lvcsr-broad-enUS-2.0.0.snsr_.
    - _(TrulyNatural only)_ US English model with [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) support: _lvcsr-build-enUS-2.0.0.snsr_.
    - _(TrulyNatural only)_ 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**
    - _(TrulyNatural only)_ The [grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#grammar-stream) parser supports weights on variables
      (non-terminal symbols), and provides improved error reporting.
    - _(TrulyNatural only)_ Removed the `-ln(p)` weight formula from [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) documentation.
      Always use `-log10(p)` for symbol weights.
    - _(TrulyNatural only)_ Silence markers (`<s>`, `<wp>`, and `</s>`) were sometimes
      included in the recognition result, even when [show-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#show-silence) was set to `0`.
    - _(TrulyNatural only)_ [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition):
        - `rule = a b c; g = $rule:symbol;` produced
           `symbol a b c` instead of `symbol`.
        - `g` crashed instead of reporting an error.
        - `g = ;` was not flagged as an error.
        - `g = a $g;` crashed instead of 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][UUID]. This incurred a large heap
          overhead and slowed down custom grammar builds.
- **Security**
    - Corrected possible double `free()` during enrollment when the
      [^progress](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#progress) handler return a code other than [OK](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_ok).

## 6.12.0 (2019-10-17)
- **Changed**
    - Reduced CPU load on ARM with NEON.
    - New [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#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](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#spot-convert) output filenames include the operating point, for example:
      _spot-hbg-enUS-1.3.0-m-pc38-op10-net.c_ for [operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point) `10`.
    - [spot-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-eval-batch) writes [confidence-score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#confidence-score) or [sv-score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#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][api-levels] 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](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#0) of [tpl-spot-select](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-select).
    - Edge-case segmentation fault in [tpl-spot-sequential](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-sequential).
    - If files listed in the in-vocabulary or out-of-vocabulary lists were not readable,
      the [spot-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-eval-batch) utility did not process all files in these lists.
    - [spot-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-eval-batch) logged in-vocabulary false accepts with the
      `INVFX` tag instead of `INVTX`, as specified in the documentation.
    - [spot-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-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**
    - _tpl-spot-select-1.0.0.snsr,_ see [tpl-spot-select](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-select).
    - Support for linking with only a subset of available SDK
      capabilities. This can significantly reduce application code size.
        + [model:ids](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#modelids), [SUBSET_INIT](https://doc.sensory.com/tnl/7.8/api/inference.md#fm_subset_init).
        + [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#snsr-edit) supports generating custom initialization code
          with scope limited to example models.
        + New [faq](https://doc.sensory.com/tnl/7.8/faq.md#faq) entry:
         [How can I reduce application code size?](https://doc.sensory.com/tnl/7.8/faq.md#reduce-code-size)
    - Exhaustive list of all possible values of [reason](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#reason).
    - Support for `arm64e` on iOS.
    - _(TrulyNatural only)_ [phone-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#phone-iterator) support for [LVCSR](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#lvcsr-type).
    - _(TrulyNatural only)_ [search.frame-nota](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#searchframe-nota) setting for [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition).
- **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](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data.md#spot-datac) sample read beyond the end of the input buffer on
      the last audio block processed.
    - _(TrulyNatural only)_ Fixed possible out-of-bounds heap write when building a custom
      recognizer from a list of phrases, [phrases-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#phrases-stream)

## 6.10.0 (2019-07-15)
- **Added**
    - [reset](https://doc.sensory.com/tnl/7.8/api/inference.md#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](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-eval-batch) utility writes the default log file to the
      current directory, instead of the directory the spotter model is in.
    - _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-3.1.0.snsr_ adds support for threaded
      LVCSR recognizers that run slower than real-time.
    - _(TrulyNatural only)_ Broad-domain speech-to-text with improved accuracy:
      _lvcsr-broad-enUS-1.2.0.snsr._
    - _(TrulyNatural only)_ Support for running LVCSR recognizers from code space.
- **Fixed**
    - Java documentation: [require](https://doc.sensory.com/tnl/7.8/api/inference.md#require) throws an
      `IllegalArgumentException,` not an `IOException.`
    - _(TrulyNatural only)_ When an LVCSR recognizer was used with a VAD,
      [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) would occasionally not be invoked.

## 6.9.0 (2019-05-20)
- **Added**
    - [spot-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md#snsr-eval-batch) utility.
    - Support for running spotter models from code space. On platforms
      where code runs directly from ROM this reduces RAM requirements.
        + New function: [fromCode](https://doc.sensory.com/tnl/7.8/api/io.md#fromcode).
        + New [DataFormat](https://doc.sensory.com/tnl/7.8/api/inference.md#dataformat) value, [SOURCE](https://doc.sensory.com/tnl/7.8/api/inference.md#fm_source).
    - Option `-c` in [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#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_
        + _(TrulyNatural only)_ _tpl-vad-lvcsr-3.0.0.snr_
- **Changed**
    - Samples [spot-data.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data.md#spot-datac) and [spot-data-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data-stream.md#spot-data-streamc) run
      the spotter models from code space.
    - Updated FAQ entry:
      [What if the spotter consumes too much memory?](https://doc.sensory.com/tnl/7.8/faq.md#low-ram)
    - _udt-enUS-2.88.7.7.snsr_ with improved enrollment quality checking.
- **Fixed**
    - _(TrulyNatural only)_ _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](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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_
        + _(TrulyNatural only)_ _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](https://doc.sensory.com/tnl/7.8/models/index.md#models) promoted out of the Overview documentation page.
    - Java [forEach](https://doc.sensory.com/tnl/7.8/api/inference.md#foreach) method no longer throws an `Exception` for
      return codes [STREAM_END](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_stream_end), [STOP](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_stop), [SKIP](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_skip), [REPEAT](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_repeat),
      and [TIMED_OUT](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_timed_out).
- **Fixed**
    - Upgraded to Gradle version 5.2.1 for compatibility with Java 11.
    - Java [setString](https://doc.sensory.com/tnl/7.8/api/inference.md#setters) with the [delete-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#delete-user) key threw a `RuntimeException` if
      the [^done](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#done) handler returned a code other than [OK](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_ok).
    - [faq](https://doc.sensory.com/tnl/7.8/faq.md#faq) still contained references to the `-m` [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) command-line
      option that was replaced by `-f`.
    - Some noisy enrollment recordings with context were mistakenly rejected.
    - _(TrulyNatural only)_ 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](https://doc.sensory.com/tnl/7.8/models/types/wake-word.md#wake-word-type) settings: [id](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#id), [vocab-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#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.
      Does not support [confidence-score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#confidence-score).
    - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) and [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#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._
    - _(TrulyNatural only)_ Ability to build recognizers from a grammar specification, or from
      a list of alternate phrases.
        + New settings: [grammar-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#grammar-stream) and [phrases-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#phrases-stream)
        + See [grammar-based recognition](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#grammar-based-recognition) for additional detail.
    - _(TrulyNatural only)_ 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](https://doc.sensory.com/tnl/7.8/api/sample/c/aqs-stream.md#aqs-streamc) and [aqs-stream.h](https://doc.sensory.com/tnl/7.8/api/sample/c/aqs-stream.md#aqs-streamc).
    - Windows 64-bit MinGW library, in _lib/x86_64-windows-mingw/libsnsr.a_
- **Changed**
    - _spot-eval_ tool renamed to [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) to better reflect its usage as a
      general-purpose model evaluator. This is a name change only, [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval)
      behavior is compatible with the previous _spot-eval_ tool.
      The source code for [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md#snsr-eval) is available as [snsr-eval.c](https://doc.sensory.com/tnl/7.8/api/sample/c/snsr-eval.md#snsr-evalc).
    - Removing an enrolled user with [delete-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#delete-user) will invoke the [^done](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#done) handler.
      Also see the updated documentation for [model-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#model-stream).
    - DSP library (for creating embedded spotter models) version 6.1.2.
    - [sample-count](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#id) and [vocab-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#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_
        + _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-1.2.0.snsr_
    - Enrollment models updated to support [id](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#id) and [vocab-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#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](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#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](https://doc.sensory.com/tnl/7.8/api/inference.md#set) failed to report an error when a string
      value exceeded the maximum length (255 characters).
    - _(TrulyNatural only)_ Poor LVCSR recognition performance in utterances containing long pauses.
    - _(TrulyNatural only)_ When an LVCSR recognizer was used with a VAD,
      [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#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.
        + [cache-file](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#cache-file).
        + Contact your [Sensory Sales](https://doc.sensory.com/tnl/7.8/contact.md#contact) representative for details.
    - Enrolled spotters with support for [operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point).
    - New UDT model: _udt-enUS-2.88.6.6.snsr,_ with improved false-accept and
      impostor accept performance. Supports five different [operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point)s.
- **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:
        + _tpl-spot-vad-1.0.5.snsr_, see [tpl-spot-vad](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad).
        + _vad-energy-1.0.6.snsr_, see [VAD](https://doc.sensory.com/tnl/7.8/models/types/vad.md#vad-type).
        + _(TrulyNatural only)_ _tpl-spot-vad-lvcsr-1.1.1.snsr_ supports [operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point)
          and [operating-point-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#operating-point-iterator), see [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr).
        + _(TrulyNatural only)_ _tpl-vad-lvcsr-1.1.1.snsr_, see [tpl-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-vad-lvcsr).
- **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](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#enrolled) and [^adapted](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapted).
- **Fixed**
    - Returning [SKIP](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_skip) from [^pass](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#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](https://doc.sensory.com/tnl/7.8/api/inference.md#save) method `#!java 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](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md#accel-info), [lvcsr](https://doc.sensory.com/tnl/7.8/api/setting-keys/values.md#lvcsr), and [task-type-and-version-list](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#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?](https://doc.sensory.com/tnl/7.8/faq.md#improve-performance)
    - Android `#!java static SnsrStream fromAudioDevice(int device, int sampleRate)`
      method allows audio source selection.
    - _(TrulyNatural only)_ [LVCSR](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md#lvcsr-type) task type.
- **Changed**
    - [require](https://doc.sensory.com/tnl/7.8/api/inference.md#require) supports [task-type-and-version-list](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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](https://doc.sensory.com/tnl/7.8/api/io.md#stream) instances must be created using the static
      [constructor](https://doc.sensory.com/tnl/7.8/api/io.md#constructors) 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](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md#library-info) includes [accel-info](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md#accel-info) status.
    - _tpl-spot-debug-1.1.0.snsr_ supports [include-model](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#include-model).
    - Increased [model-stream](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#model-stream) scope. This now continues to be
      available after the [^done](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#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_.
    - _(TrulyNatural only)_ Updated task models, with a new [task-type](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#task-type), [lvcsr](https://doc.sensory.com/tnl/7.8/api/setting-keys/values.md#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](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr).
        + _tpl-vad-lvcs-1.1.0.snsr_: Template for LVCSR on
          VAD-segmented audio. See [tpl-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-vad-lvcsr).
        + _tpl-spot-debug-1.1.0.snsr_: Supports [phrasespot](https://doc.sensory.com/tnl/7.8/api/setting-keys/values.md#phrasespot) tasks
          built from [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr) and [tpl-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-vad-lvcsr) templates.
    - _(TrulyNatural only)_ If [show-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#show-silence) is `0`, empty LVCSR results were not
      reported via [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result) and [^result-partial](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result-partial).
      These handlers are now invoked with a [text](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#text) value of `""`.
- **Removed**
    - UDT model: _udt-enUS-12.6.21.0.snsr,_ superseded by
      _udt-enUS-2.88.5.5.snsr._
- **Fixed**
    - [run](https://doc.sensory.com/tnl/7.8/api/inference.md#run) mistakenly returned [OK](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_ok) after previously
      stopped by a callback in slot [0](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#0) or slot [1](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#1).
    - [run](https://doc.sensory.com/tnl/7.8/api/inference.md#run) mistakenly returned [ELEMENT_API_VIOLATION](https://doc.sensory.com/tnl/7.8/api/inference.md#rc)
      after successive calls with an empty [<-audio-pcm](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#audio-pcm-out) stream.
    - Aberrant task behavior if an event callback returned [STREAM_END](https://doc.sensory.com/tnl/7.8/api/inference.md#rc_stream_end)
      when using live audio.
    - A task saved to file after either [audio-stream-from](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#audio-stream-from) or
      [audio-stream-to](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#audio-stream-to) had been set failed to load.
    - Certain non-enrolled spotters mistakenly returned values other than
      `1.0` for [sv-score](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#sv-score).
    - _(TrulyNatural only)_ LVCSR time-alignments ([begin-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#begin-ms), [begin-sample](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#begin-sample),
      [end-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#end-ms), [end-sample](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#end-sample)) wrapped after 524 seconds.

## 6.4.0 (2018-07-28)
- **Added**
    - [config](https://doc.sensory.com/tnl/7.8/api/library-config.md#config).
    - [tearDown](https://doc.sensory.com/tnl/7.8/api/heap.md#teardown).
    - [IS_TRULYHANDSFREE](https://doc.sensory.com/tnl/7.8/api/constants.md#is_trulyhandsfree) and [IS_TRULYNATURAL](https://doc.sensory.com/tnl/7.8/api/constants.md#is_trulynatural).
    - FAQ section: [Is this SDK thread-safe?](https://doc.sensory.com/tnl/7.8/faq.md#thread-safe)
- **Fixed**
    - [noise-energy](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#noise-energy), [signal-energy](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#signal-energy), and [snr](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#snr)
      returned `1024` for the second and subsequent spotted phrases,
      when used with [tpl-spot-vad](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad).
    - [dup](https://doc.sensory.com/tnl/7.8/api/inference.md#dup) failed to clone models larger than 1 MiB. Limit increased to 1 GiB.
    - Retrieving [text](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#text), [begin-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#begin-ms), and [end-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#end-ms) **after** iterating
      over [phrase-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#phrase-iterator), [word-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#word-iterator), or [phone-iterator](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md#phone-iterator) could lead to
      an invalid memory access.
    - A race condition when simultaneously loading models in separate
      threads could lead to unexpected behavior. Affected release 6.3.0 only.
    - _(TrulyNatural only)_ _lvcsr-broad-enUS-1.0.0.snsr_ and certain custom models had
      unbounded heap use.

## 6.3.0 (2018-06-24)
- **Added**
    - FAQ section:
      [How do I spot phrases on a Real-Time Operating System (RTOS) with a custom audio driver and no filesystem?](https://doc.sensory.com/tnl/7.8/faq.md#program-for-rtos)
    - Sample code: [data-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/data-stream.md#data-streamc), [data-stream.h](https://doc.sensory.com/tnl/7.8/api/sample/c/data-stream.md#data-streamc), [spot-data.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data.md#spot-datac), and
      [spot-data-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data-stream.md#spot-data-streamc).
    - Include Android samples in documentation:
      [enrolltrigger/Enroll.java](https://doc.sensory.com/tnl/7.8/api/sample/android/enroll-trigger.md#et-enroll), [enrolltrigger/PhraseSpot.java](https://doc.sensory.com/tnl/7.8/api/sample/android/enroll-trigger.md#et-phrasespot),
      and [spotdebug/PhraseSpot.java](https://doc.sensory.com/tnl/7.8/api/sample/android/snsr-debug.md#sd-phrasespot).
    - _(TrulyNatural only)_ Support for LVCSR models.
    - _(TrulyNatural only)_ New task models:
        + _lvcsr-broad-enUS-1.0.0.snsr_: Broad-domain speech-to-text.
        + _tpl-spot-vad-lvcsr-1.0.0.snsr_: Template for LVCSR on
          VAD-segmented audio, gated by a phrase spotter. See [tpl-spot-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-spot-vad-lvcsr).
        + _tpl-vad-lvcs-1.0.0.snsr_: Template for LVCSR on
          VAD-segmented audio. See [tpl-vad-lvcsr](https://doc.sensory.com/tnl/7.8/models/index.md#tpl-vad-lvcsr).
    - _(TrulyNatural only)_ [^result-partial](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#result-partial), [partial-result-interval](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#partial-result-interval), and [show-silence](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#show-silence).
    - _(TrulyNatural only)_ FAQ section:
      [How do I use Large Vocabulary Continuous Speech Recognition?](https://doc.sensory.com/tnl/7.8/faq.md#use-lvcsr)
- **Changed**
    - _tpl-spot-dynop-1.1.0.snsr_ dynamic operating point selection template.
    - _spot-eval_ shows preliminary results, if available.
- **Removed**
    - Android support for ARMv5 (armeabi), MIPS, and MIPS64.
      These are no longer supported by the [NDK][].
- **Fixed**
    - [available-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md#available-point) always returns 0 when used with _tpl-spot-dynop-1.0.0.snsr_.
    - An enrollment context saved with [RUNTIME](https://doc.sensory.com/tnl/7.8/api/inference.md#fm_runtime) after using
      [delete-user](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md#delete-user) to remove a user still included the
      removed user. Saving the context from the [^enrolled](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#enrolled)
      or [^adapted](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#adapted) worked as expected.

## 6.2.0 (2018-05-15)
- **Added**
    - Support for spotters that reject phrases similar to the target.

## 6.1.0 (2018-05-02)
- **Added**
    - Support for spotters that utilize multiple CPU cores.
    - Support for half-rate spotters, which reduce CPU usage.
    - Support for **v4** spotters with runtime-selectable [operating points](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point).
    - _tpl-spot-dynop-1.0.0.snsr_ dynamic operating point selection template
      with new configuration settings:
        + [duration-ms](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#duration-ms)
        + [low-fr-operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#low-fr-operating-point)
        + [threshold](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#threshold)
    - New FAQ section: [How do I improve the user experience for wake words in poor audio environments?](https://doc.sensory.com/tnl/7.8/faq.md#improve-user-experience)
    - New UDT model: _udt-enUS-12.6.21.0.snsr_, with improved
     false-accept and impostor accept performance.
- **Changed**
    - [operating-point](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#operating-point) changes are allowed in running spotters.
      For example, from within a [^result](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md#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](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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**
    - `PhraseSpot` iOS sample application. See [iOS examples](https://doc.sensory.com/tnl/7.8/api/sample/ios/index.md#ios-examples).
- **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](https://doc.sensory.com/tnl/7.8/api/inference.md#require) supports version ranges.
    - Task models with [task-version](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md#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?](https://doc.sensory.com/tnl/7.8/faq.md#beta-model-compatibility)
- **Removed**
    - `SNSR_TECH_LEVEL` and `Snsr.TECH_LEVEL`. Use SDK version instead.
- **Fixed**
    - `aarch64-linux-gnu` library does not support ALSA recording.

<!-- Reference definitions from includes/links.md -->
[api-levels]: https://en.wikipedia.org/wiki/Android_version_history "Android version history and API levels"
[NDK]: https://developer.android.com/ndk/downloads/revision_history "Android NDK Revision History"
[UUID]: https://en.wikipedia.org/wiki/Universally_unique_identifier "Universally unique identifier"

<!-- Abbreviation definitions from includes/abbreviations.md -->
*[ALSA]: Advanced Linux Sound Architecture
*[API]: Application Programming Interface
*[AQS]: Audio Queue Services, Apple's audio capture API on Darwin / macOS
*[EFT]: Enrolled Fixed Trigger: fixed wake words adapted to a speaker to improve accuracy
*[FR]: False Reject: the recognizer did not trigger when the target phrase was spoken
*[LVCSR]: Large Vocabulary Continuous Speech Recognition model, feed-forward neural net acoustic model with FST decoder
*[MIPS]: Million Instructions Per Second
*[NLU]: Natural Language Understanding model
*[RAM]: Random Access Memory
*[ROM]: Read-Only Memory, typically nonvolatile flash memory
*[RTOS]: Real-Time Operating System
*[SDK]: Software Development Kit
*[THF]: TrulyHandsfree, Sensory's wake word and command recognition technology
*[TNL]: TrulyNatural, Sensory's large-vocabulary speech recognition technology
*[UDT]: User-Defined Trigger: enrolled wake words and command sets
*[VAD]: Voice Activity Detector
