# TrulyNatural SDK -- agent documentation (Markdown bundle) > Offline Markdown documentation packaged for coding agents, RAG pipelines, > and other LLM tools. This is the same content as the themed HTML site, > rendered as Markdown with stable link targets. > Register this file's URL in a documentation index and ingest the linked > `.md` pages on this host (same content as the paired `HTML:` URLs below). Canonical HTML site: https://doc.sensory.com/tnl/7.8/ Version: 7.8.0-pre.0+682.g276c2541e9 · Latest: https://doc.sensory.com/tnl/latest/llms.txt ## How to read this file - Every entry below is `- [title](markdown_url): summary (HTML: html_url)`. Fetch the `.md` URL for ingestion or the `HTML:` URL for the rendered page; both reach the same content. - **If you have network access, this file plus the linked `.md` pages and `manifest.json` are sufficient -- ignore the zip.** [agent-docs.zip](https://doc.sensory.com/tnl/7.8/agent-docs.zip) packages the same bytes for vendored / air-gapped use; agents with HTTP access should crawl the loose mirror instead so the index and pages stay in lock-step with the canonical site. - **Do not synthesize URLs by stripping `.md` and appending `/`.** Follow the explicit links above instead. Mirror paths match `manifest.json` `source_path` values: section roots use `/index.md` beside `/index.html`; leaf pages use `/.md` beside `//index.html` (not `//index.md` inside the HTML directory). Trailing-slash heuristics are not reliable. - **Ingestion:** fetch individual `.md` pages (use `manifest.json` `bytes` to budget context). Reserve [llms-full.txt](https://doc.sensory.com/tnl/7.8/llms-full.txt) for bulk offline indexing, not as default chat context. - The full machine index is [manifest.json](https://doc.sensory.com/tnl/7.8/manifest.json); the concatenated single-file bundle for one-shot ingestion is [llms-full.txt](https://doc.sensory.com/tnl/7.8/llms-full.txt). ## Machine index - [manifest.json](https://doc.sensory.com/tnl/7.8/manifest.json): JSON index of every member with `path`, `source_path`, `bytes`, `title`, `canonical_url`, optional `headings` (H2/H3 outline on reference pages and any page ≥ 5 KiB), and optional `last_modified` (ISO 8601 UTC); schema version 2. - [llms-full.txt](https://doc.sensory.com/tnl/7.8/llms-full.txt): every Markdown page concatenated into a single file, with one HTML-comment header per page so LLMs can locate sections by path. ## Common tasks - [First wake-word program](https://doc.sensory.com/tnl/7.8/getting-started/your-first-program.md): Write your first program with the Session API in C, Java, Android, or iOS. (HTML: https://doc.sensory.com/tnl/7.8/getting-started/your-first-program/) - [Install SDK and try snsr-eval](https://doc.sensory.com/tnl/7.8/getting-started/index.md): Install the SDK and try `snsr-eval` and `snsr-edit` to learn the concepts. (HTML: https://doc.sensory.com/tnl/7.8/getting-started/) - [Integrate into your build](https://doc.sensory.com/tnl/7.8/api/build-system.md): Add the SDK to a CMake, Make, Java, Gradle (Android), or Xcode (iOS) build. (HTML: https://doc.sensory.com/tnl/7.8/api/build-system/) - [Push audio / third-party ASR](https://doc.sensory.com/tnl/7.8/api/sample/c/push-audio.md): Push audio from your own source through the recognizer with VAD, for third-party ASR pipelines. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/push-audio/) - [Wake word then LVCSR or STT](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-vad-lvcsr.md): Run a wake word, segment with VAD, then transcribe with LVCSR or STT (template model). (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-vad-lvcsr/) - [Setting keys reference](https://doc.sensory.com/tnl/7.8/api/setting-keys/index.md): Look up setting keys for configuration, events, iterators, results, runtime, and library info. (HTML: https://doc.sensory.com/tnl/7.8/api/setting-keys/) - [Session API](https://doc.sensory.com/tnl/7.8/api/inference.md): Use the Session API: create, `load`, `run`/`push`, register handlers, and inspect return codes. (HTML: https://doc.sensory.com/tnl/7.8/api/inference/) - [Streams and I/O](https://doc.sensory.com/tnl/7.8/api/io.md): Open audio devices, read/write memory streams, and load models with the Stream API. (HTML: https://doc.sensory.com/tnl/7.8/api/io/) - [Recipes and how-tos](https://doc.sensory.com/tnl/7.8/faq.md): Solve common problems: push audio, capture post-wake speech, UI-thread callbacks, enrollment, code size. (HTML: https://doc.sensory.com/tnl/7.8/faq/) - [Set up an AI coding editor](https://doc.sensory.com/tnl/7.8/agent-tools.md): Register `llms.txt` in Cursor, Claude Code, Copilot, Aider, Continue, or Cline; per-page Markdown URLs; programmatic ingestion via `manifest.json`. (HTML: https://doc.sensory.com/tnl/7.8/agent-tools/) - [Sample: live wake word (C)](https://doc.sensory.com/tnl/7.8/api/sample/c/live-spot.md): Build a minimal live-audio wake-word spotter in C with `load` + `run`. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/live-spot/) - [Enroll a user-defined wake word (Java)](https://doc.sensory.com/tnl/7.8/api/sample/java/enrollUDT.md): Enroll a UDT (user-defined trigger) on the command line in Java with Gradle. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/java/enrollUDT/) - [Enroll a UDT inside an Android app](https://doc.sensory.com/tnl/7.8/api/sample/android/enroll-trigger.md): Enroll a user-defined wake word from an Android app (Android Studio or Gradle). (HTML: https://doc.sensory.com/tnl/7.8/api/sample/android/enroll-trigger/) - [Capture audio after a wake word (C)](https://doc.sensory.com/tnl/7.8/api/sample/c/live-segment.md): Spot a wake word, then segment the post-wake utterance with a VAD and save it to a `.wav` file (C). (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/live-segment/) - [Spot from a custom audio stream (C, RTOS)](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data-stream.md): Spot from a custom audio stream on an RTOS device with `fromProvider` and pull-mode `run` (C). (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data-stream/) - [Embedded keyword spotter (C, no OS)](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data.md): Run a small keyword spotter from code space with a custom allocator and no file-system / heap calls (C). (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data/) - [Phrase spotter on iOS (Swift)](https://doc.sensory.com/tnl/7.8/api/sample/ios/phrasespot.md): Run a phrase spotter on iOS in Swift via the native C API of the SDK. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/ios/phrasespot/) - [Run snsr-eval / snsr-edit / spot-enroll](https://doc.sensory.com/tnl/7.8/tools/index.md): Use the command-line tools `snsr-eval`, `snsr-edit`, `spot-enroll`, and friends. (HTML: https://doc.sensory.com/tnl/7.8/tools/) - [Model catalog](https://doc.sensory.com/tnl/7.8/models/index.md): Browse the catalog of sample `.snsr` task models and grammar reference material. (HTML: https://doc.sensory.com/tnl/7.8/models/) - [Version 7 changes](https://doc.sensory.com/tnl/7.8/changes/index.md): See what changed in version 7 (STT support, migration from v6, backwards compatibility). (HTML: https://doc.sensory.com/tnl/7.8/changes/) - [Upgrade from earlier SDK](https://doc.sensory.com/tnl/7.8/upgrade.md): Upgrade from an earlier SDK release with full backwards compatibility for code and models. (HTML: https://doc.sensory.com/tnl/7.8/upgrade/) ## Start here - [TrulyNatural SDK](https://doc.sensory.com/tnl/7.8/index.md): This is the reference documentation for version 7.8 of Sensory's TrulyHandsfree, TrulyNatural Lite, and TrulyNatural STT speech recognition SDKs. (HTML: https://doc.sensory.com/tnl/7.8/) - [Getting started with command-line tools](https://doc.sensory.com/tnl/7.8/getting-started/index.md): This walk-through helps you get started with TrulyNatural concepts and the command-line tools (snsr-eval, snsr-edit, and related utilities). (HTML: https://doc.sensory.com/tnl/7.8/getting-started/) - [Your first program](https://doc.sensory.com/tnl/7.8/getting-started/your-first-program.md): If you followed Command-line tools, you already ran a wake word with snsr-eval. This page shows the same Session API flow on each platform. (HTML: https://doc.sensory.com/tnl/7.8/getting-started/your-first-program/) - [API reference](https://doc.sensory.com/tnl/7.8/api/index.md): This section provides reference documentation for the TrulyNatural SDK API. This includes both the native C and the Java interfaces. (HTML: https://doc.sensory.com/tnl/7.8/api/) - [Reference](https://doc.sensory.com/tnl/7.8/reference/index.md): This section provides reference documentation for the TrulyNatural SDK. (HTML: https://doc.sensory.com/tnl/7.8/reference/) - [Overview](https://doc.sensory.com/tnl/7.8/reference/overview.md): This section provides a brief overview of this SDK: Features supported by variant, development host requirements, supported target platforms, snsr model files, command-line tools, and the software license keys we use to… (HTML: https://doc.sensory.com/tnl/7.8/reference/overview/) - [Command-line tools](https://doc.sensory.com/tnl/7.8/tools/index.md): The TrulyNatural SDK includes a number of command-line utilities. Find executables for the host platform in ~/Sensory/TrulyNaturalSDK/7.8/bin/ (HTML: https://doc.sensory.com/tnl/7.8/tools/) - [Version 7 changes (current)](https://doc.sensory.com/tnl/7.8/changes/index.md): TrulyNatural version 7 introduced support for STT and is fully backwards compatible with version 6 models and code. (HTML: https://doc.sensory.com/tnl/7.8/changes/) - [Models](https://doc.sensory.com/tnl/7.8/models/index.md): This distribution includes sample models in ~/Sensory/TrulyNaturalSDK/7.8/model/ (HTML: https://doc.sensory.com/tnl/7.8/models/) ## Overview - [Coding agents](https://doc.sensory.com/tnl/7.8/agent-tools.md): This site publishes a machine-readable index and a per-page Markdown mirror designed for AI coding tools.… (HTML: https://doc.sensory.com/tnl/7.8/agent-tools/) - [Contact information](https://doc.sensory.com/tnl/7.8/contact.md): Get in touch with Sensory. (HTML: https://doc.sensory.com/tnl/7.8/contact/) - [Frequently Asked Questions](https://doc.sensory.com/tnl/7.8/faq.md): Recipes — push audio, capture speech after a wake word, UI-thread callbacks.… (HTML: https://doc.sensory.com/tnl/7.8/faq/) - [How to upgrade](https://doc.sensory.com/tnl/7.8/upgrade.md): The TrulyHandsfree and TrulyNatural SDKs are fully backwards-compatible with application code and models from earlier releases. (HTML: https://doc.sensory.com/tnl/7.8/upgrade/) ## Reference - [VoiceHub](https://doc.sensory.com/tnl/7.8/reference/voicehub.md): Sensory's VoiceHub is a web portal that provides a convenient interface for developers to prototype and experiment with wake words, language models and natural language understanding.… (HTML: https://doc.sensory.com/tnl/7.8/reference/voicehub/) ## API reference - [Integrate with your build](https://doc.sensory.com/tnl/7.8/api/build-system.md): This describes how to add the TrulyNatural SDK to your own application's build system. We support CMake (recommended), Make, Java, Gradle on Android, and Xcode iOS. (HTML: https://doc.sensory.com/tnl/7.8/api/build-system/) - [Constants](https://doc.sensory.com/tnl/7.8/api/constants.md): These are preprocessor macros or module constants available during the application build phase. They contain library information such as the SDK variant and version. (HTML: https://doc.sensory.com/tnl/7.8/api/constants/) - [Memory management](https://doc.sensory.com/tnl/7.8/api/heap.md): This section describes heap memory management used by the TrulyNatural SDK C language binding. The Java binding uses the standard garbage collecting approach. (HTML: https://doc.sensory.com/tnl/7.8/api/heap/) - [Inference](https://doc.sensory.com/tnl/7.8/api/inference.md): Session instances encapsulate the entire runtime state for a model.… (HTML: https://doc.sensory.com/tnl/7.8/api/inference/) - [Input and output](https://doc.sensory.com/tnl/7.8/api/io.md): The inference Session uses Stream instances for all input and output. This includes model loading, audio input and output, binary data, and large sections of text. (HTML: https://doc.sensory.com/tnl/7.8/api/io/) - [Library configuration](https://doc.sensory.com/tnl/7.8/api/library-config.md): This section describes functions and settings that control overall TrulyNatural SDK library behavior. (HTML: https://doc.sensory.com/tnl/7.8/api/library-config/) - [API overview](https://doc.sensory.com/tnl/7.8/api/overview.md): This is a brief overview of the API design goals, the SDK's conceptual model, and the two supported audio processing modes. (HTML: https://doc.sensory.com/tnl/7.8/api/overview/) ## Setting keys - [Setting keys](https://doc.sensory.com/tnl/7.8/api/setting-keys/index.md): Settings are strings used as keys in Session object function or method calls. (HTML: https://doc.sensory.com/tnl/7.8/api/setting-keys/) - [Configuration](https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration.md): Configuration settings are both readable and writable and are part of task models; they are saved to Stream by dup and save, and restored by load. (HTML: https://doc.sensory.com/tnl/7.8/api/setting-keys/configuration/) - [Events](https://doc.sensory.com/tnl/7.8/api/setting-keys/events.md): Use setHandler with keys in this section to register callback handlers for events. The values for these settings refer to runtime instances of code objects and are not serialized by save or dup. (HTML: https://doc.sensory.com/tnl/7.8/api/setting-keys/events/) - [Iterators](https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators.md): Use these keys with forEach to loop over lists of values. The values for these settings refer to runtime instances of code objects and are not serialized by save or dup. (HTML: https://doc.sensory.com/tnl/7.8/api/setting-keys/iterators/) - [Library information](https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information.md): These keys return information about the library. They require a valid Session but are available before loading a task model. (HTML: https://doc.sensory.com/tnl/7.8/api/setting-keys/library-information/) - [Results](https://doc.sensory.com/tnl/7.8/api/setting-keys/results.md): These are read-only settings that report the results of model inference. (HTML: https://doc.sensory.com/tnl/7.8/api/setting-keys/results/) - [Runtime](https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime.md): These settings inspect the state, or change the behavior, of Session object instances. They are not serialized by save or dup. (HTML: https://doc.sensory.com/tnl/7.8/api/setting-keys/runtime/) - [Values](https://doc.sensory.com/tnl/7.8/api/setting-keys/values.md): These are string constants that define task-types used with require, or that identify template slots. (HTML: https://doc.sensory.com/tnl/7.8/api/setting-keys/values/) ## C examples - [C examples](https://doc.sensory.com/tnl/7.8/api/sample/c/index.md): The C sample programs are available in sample/c/ in the TrulyNatural installation directory. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/) - [alsa-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/alsa-stream.md): This is the source for the fromAudioDevice Stream implementation for ALSA, used for live audio capture on Linux. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/alsa-stream/) - [aqs-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/aqs-stream.md): This is the source for the fromAudioDevice Stream implementation for Audio Queue Services, used for live audio capture on macOS and iOS. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/aqs-stream/) - [data-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/data-stream.md): This is the source for the fromAudioDevice Stream implementation for memory data, similar to fromMemory. It's used in the spot-data-stream.c example. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/data-stream/) - [live-enroll.c](https://doc.sensory.com/tnl/7.8/api/sample/c/live-enroll.md): This is the source code for the live-enroll command-line tool. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/live-enroll/) - [live-segment.c](https://doc.sensory.com/tnl/7.8/api/sample/c/live-segment.md): This example runs a wake word recognizer on live audio, segments the speech following the wake word with a VAD, and then saves this audio snippet to a file. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/live-segment/) - [live-spot-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/live-spot-stream.md): This example shows how to run a recognizer on live audio captured using a custom audio stream. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/live-spot-stream/) - [live-spot.c](https://doc.sensory.com/tnl/7.8/api/sample/c/live-spot.md): New to the Session API?… (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/live-spot/) - [push-audio.c](https://doc.sensory.com/tnl/7.8/api/sample/c/push-audio.md): This example runs a recognizer where the application pushes data through the recognition pipeline. Shows VAD audio processing for use with third-party recognizers such as keyword-to-search applications. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/push-audio/) - [snsr-edit.c](https://doc.sensory.com/tnl/7.8/api/sample/c/snsr-edit.md): This is the source code for the snsr-edit command-line tool. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/snsr-edit/) - [snsr-eval.c](https://doc.sensory.com/tnl/7.8/api/sample/c/snsr-eval.md): This is the source code for the snsr-eval command-line tool. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/snsr-eval/) - [spot-convert.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-convert.md): This is the source code for the spot-convert command-line tool. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/spot-convert/) - [spot-data-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data-stream.md): This example runs a wake word from code space with a custom audio stream, using pull mode processing with run. It is a reasonable starting point for running on a small device with an RTOS. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data-stream/) - [spot-data.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data.md): This example runs a small keyword spotter from code space. It uses a custom memory allocator to avoid calls to the system heap allocator, and reads audio data from code space to avoid file system use. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/spot-data/) - [spot-enroll.c](https://doc.sensory.com/tnl/7.8/api/sample/c/spot-enroll.md): This is the source code for the spot-enroll command-line tool. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/spot-enroll/) - [wmme-stream.c](https://doc.sensory.com/tnl/7.8/api/sample/c/wmme-stream.md): This is the source for the fromAudioDevice Stream implementation for Windows Multimedia Extensions, used for live audio capture on Windows. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/c/wmme-stream/) ## Java examples - [Java examples](https://doc.sensory.com/tnl/7.8/api/sample/java/index.md): The Java sample programs and code snippets are available in sample/java/ in the TrulyNatural installation directory. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/java/) - [SnsrEnrollmentTest.java](https://doc.sensory.com/tnl/7.8/api/sample/java/SnsrEnrollmentTest.md): This file contains UDT enrollment and evaluation unit tests. It shows how to remove an enrollment from an enrollment context loaded from file. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/java/SnsrEnrollmentTest/) - [SnsrStreamAudioDeviceGeneric.java](https://doc.sensory.com/tnl/7.8/api/sample/java/SnsrStreamAudioDeviceGeneric.md): This is the source for the fromAudioDevice implementation for Java. It provides a Stream adapter for Java Audio. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/java/SnsrStreamAudioDeviceGeneric/) - [enrollUDT.java](https://doc.sensory.com/tnl/7.8/api/sample/java/enrollUDT.md): This example shows how to enroll a user-defined wake word (UDT, trigger, key word spotter). (HTML: https://doc.sensory.com/tnl/7.8/api/sample/java/enrollUDT/) - [evalUDT.java](https://doc.sensory.com/tnl/7.8/api/sample/java/evalUDT.md): This example shows how to run a wake word recognizer. It uses the UDT phrase enrolled with enrollUDT.java. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/java/evalUDT/) - [segmentSpottedAudio.java](https://doc.sensory.com/tnl/7.8/api/sample/java/segmentSpottedAudio.md): This example runs a phrase spotter followed by a VAD. It saves the VAD-segmented audio to file. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/java/segmentSpottedAudio/) ## Android examples - [Android examples](https://doc.sensory.com/tnl/7.8/api/sample/android/index.md): The Android sample programs and code snippets are available in sample/android/ in the TrulyNatural installation directory. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/android/) - [SnsrStreamAudioDeviceAndroid.java](https://doc.sensory.com/tnl/7.8/api/sample/android/SnsrStreamAudioDeviceAndroid.md): This is the source for the fromAudioDevice implementation for Android. It provides a Stream adapter for Android Audio. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/android/SnsrStreamAudioDeviceAndroid/) - [enroll-trigger](https://doc.sensory.com/tnl/7.8/api/sample/android/enroll-trigger.md): This example shows how to enroll a user-defined wake word (UDT, trigger, key word spotter). (HTML: https://doc.sensory.com/tnl/7.8/api/sample/android/enroll-trigger/) - [snsr-debug](https://doc.sensory.com/tnl/7.8/api/sample/android/snsr-debug.md): This sample shows how to log recognizer audio and event timing debug information using the tpl-spot-debug template. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/android/snsr-debug/) ## iOS examples - [iOS examples](https://doc.sensory.com/tnl/7.8/api/sample/ios/index.md): The iOS sample programs are available in sample/ios/ in the TrulyNatural installation directory. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/ios/) - [PhraseSpot](https://doc.sensory.com/tnl/7.8/api/sample/ios/phrasespot.md): This Swift application runs a phrase spotter and shows the results in a text window. (HTML: https://doc.sensory.com/tnl/7.8/api/sample/ios/phrasespot/) ## Models - [Templates](https://doc.sensory.com/tnl/7.8/models/tpl/index.md): Task templates are models that use composition to add behavior to basic model types. Templates have slots that you can fill with any model that has a task-type that matches what the slot expects. (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/) - [Model types](https://doc.sensory.com/tnl/7.8/models/types/index.md): The type of a model specifies the runtime behavior: what it does, which setting keys it supports, and when it invokes event callbacks. (HTML: https://doc.sensory.com/tnl/7.8/models/types/) - [Downloads _(stt)_](https://doc.sensory.com/tnl/7.8/models/downloads.md): The following STT models are available for download. These are compatible with TrulyNatural STT SDK 7.7.0 and later. (HTML: https://doc.sensory.com/tnl/7.8/models/downloads/) - [tpl-opt-spot-vad-lvcsr _(tnl)_](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-opt-spot-vad-lvcsr.md): This template optionally runs the wake word in slot 0 until it detects, then segments the audio following the wake word with a VAD and sends the segmented audio to the LVCSR or STT recognizer in slot 1. (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/tpl-opt-spot-vad-lvcsr/) - [tpl-spot-concurrent](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-concurrent.md): This template runs two wake word models at the same time. It provides a convenient way to create a single wake word model that has the combined vocabulary of two other models. (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-concurrent/) - [tpl-spot-debug](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-debug.md): This template adds runtime data collection to a wake word model.… (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-debug/) - [tpl-spot-select](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-select.md): This template allows you to dynamically select which of the two embedded wake word models to run. (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-select/) - [tpl-spot-sequential](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-sequential.md): This template runs two wake word models in sequence. Use this to listen for a trigger phrase followed by a command, for example: "Voice genie, play music." (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-sequential/) - [tpl-spot-vad-lvcsr _(tnl)_](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-vad-lvcsr.md): This template runs the wake word in slot 0 until it detects, segments the audio following the wake word with a VAD, and sends the segmented audio to the LVCSR or STT recognizer in slot 1. (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-vad-lvcsr/) - [tpl-spot-vad](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-vad.md): This template runs the wake word in slot 0 until it detects, then does start- and endpoint detection with a VAD on the audio stream following the wake word. (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/tpl-spot-vad/) - [tpl-vad-lvcsr _(tnl)_](https://doc.sensory.com/tnl/7.8/models/tpl/tpl-vad-lvcsr.md): This template detects speech with a VAD and sends the segmented audio to the LVCSR or STT recognizer in slot 0. (HTML: https://doc.sensory.com/tnl/7.8/models/tpl/tpl-vad-lvcsr/) - [Adapting wake word](https://doc.sensory.com/tnl/7.8/models/types/ca.md): These are fixed wake word models that continuously adapt to speakers' voices to improve false-accept rates. They are drop-in replacements for fixed wake words. (HTML: https://doc.sensory.com/tnl/7.8/models/types/ca/) - [Wake word enrollment](https://doc.sensory.com/tnl/7.8/models/types/enroll.md): These models provide user enrollment for EFT and UDT. They produce wake-word models. (HTML: https://doc.sensory.com/tnl/7.8/models/types/enroll/) - [LVCSR _(tnl)_](https://doc.sensory.com/tnl/7.8/models/types/lvcsr.md): These recognizers use a phonetic acoustic model and an FST vocabulary decoder. They are suitable for small to medium vocabulary tasks, but not for unconstrained audio transcription. (HTML: https://doc.sensory.com/tnl/7.8/models/types/lvcsr/) - [Speech To Text _(stt)_](https://doc.sensory.com/tnl/7.8/models/types/stt.md): These models do audio transcription with transformers. (HTML: https://doc.sensory.com/tnl/7.8/models/types/stt/) - [VAD](https://doc.sensory.com/tnl/7.8/models/types/vad.md): Models of this type find speech segments in audio data streams. (HTML: https://doc.sensory.com/tnl/7.8/models/types/vad/) - [Wake word](https://doc.sensory.com/tnl/7.8/models/types/wake-word.md): Fixed and enrolled wake words, and command sets. (HTML: https://doc.sensory.com/tnl/7.8/models/types/wake-word/) ## Tools - [audio-check](https://doc.sensory.com/tnl/7.8/tools/audio-check.md): This tool runs checks on the audio for problems such as all-zero runs or clipping. Also estimates signal-to-noise ratio. (HTML: https://doc.sensory.com/tnl/7.8/tools/audio-check/) - [live-enroll](https://doc.sensory.com/tnl/7.8/tools/live-enroll.md): Interactive command-line phrase spotter enrollment, using the default audio capture device. (HTML: https://doc.sensory.com/tnl/7.8/tools/live-enroll/) - [snsr-edit](https://doc.sensory.com/tnl/7.8/tools/snsr-edit.md): This tool edits default task settings, and composes specialized tasks by filling template task slots with spotter models. (HTML: https://doc.sensory.com/tnl/7.8/tools/snsr-edit/) - [snsr-eval-batch](https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch.md): This tool runs a Wake word, LVCSR or STT model over a (typically large) number of audio files to measure the performance in terms of the false accept (FA) rate, and the false reject (FR) ratio.… (HTML: https://doc.sensory.com/tnl/7.8/tools/snsr-eval-batch/) - [snsr-eval](https://doc.sensory.com/tnl/7.8/tools/snsr-eval.md): This tool evaluates / runs TrulyNatural SDK snsr model files. It supports all task types, except wake word enrollment which is handled by spot-enroll and live-enroll. (HTML: https://doc.sensory.com/tnl/7.8/tools/snsr-eval/) - [snsr-log-split](https://doc.sensory.com/tnl/7.8/tools/snsr-log-split.md): Command-line splitter for logfiles generated by the debug template tpl-spot-debug. (HTML: https://doc.sensory.com/tnl/7.8/tools/snsr-log-split/) - [spot-convert](https://doc.sensory.com/tnl/7.8/tools/spot-convert.md): Command-line phrase spotter model conversion tool, targeting Sensory's deeply embedded DSP solutions running THF Micro. (HTML: https://doc.sensory.com/tnl/7.8/tools/spot-convert/) - [spot-enroll](https://doc.sensory.com/tnl/7.8/tools/spot-enroll.md): Command-line wake word enrollment. (HTML: https://doc.sensory.com/tnl/7.8/tools/spot-enroll/) ## Changes - [Version 5 beta changes](https://doc.sensory.com/tnl/7.8/changes/version-5.md): Looking for the latest changes? See Version 7 changes. (HTML: https://doc.sensory.com/tnl/7.8/changes/version-5/) - [Version 6 changes](https://doc.sensory.com/tnl/7.8/changes/version-6.md): Looking for the latest changes? See Version 7 changes. (HTML: https://doc.sensory.com/tnl/7.8/changes/version-6/) ## Symbols Direct deep-links from C/Java identifier to the documenting heading. Use this section to jump from a user-typed symbol (e.g. `snsrLoad`) to its anchor on the relevant API page. - [snsrCallback](https://doc.sensory.com/tnl/7.8/api/inference.md#callback): callback (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#callback) - [snsrClearRC](https://doc.sensory.com/tnl/7.8/api/inference.md#clearrc): clearRC (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#clearrc) - [snsrDescribeError](https://doc.sensory.com/tnl/7.8/api/inference.md#describeerror): describeError (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#describeerror) - [snsrDup](https://doc.sensory.com/tnl/7.8/api/inference.md#dup): dup (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#dup) - [snsrErrorDetail](https://doc.sensory.com/tnl/7.8/api/inference.md#errordetail): errorDetail (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#errordetail) - [snsrForEach](https://doc.sensory.com/tnl/7.8/api/inference.md#foreach): forEach (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#foreach) - [snsrGetDouble](https://doc.sensory.com/tnl/7.8/api/inference.md#getters): getters (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#getters) - [snsrLoad](https://doc.sensory.com/tnl/7.8/api/inference.md#load): load (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#load) - [snsrNew](https://doc.sensory.com/tnl/7.8/api/inference.md#new): new (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#new) - [snsrProfile](https://doc.sensory.com/tnl/7.8/api/inference.md#profile): profile (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#profile) - [snsrPush](https://doc.sensory.com/tnl/7.8/api/inference.md#push): push (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#push) - [snsrRC](https://doc.sensory.com/tnl/7.8/api/inference.md#rc): rC (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#rc) - [snsrRCMessage](https://doc.sensory.com/tnl/7.8/api/inference.md#rcmessage): rCMessage (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#rcmessage) - [snsrRequire](https://doc.sensory.com/tnl/7.8/api/inference.md#require): require (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#require) - [snsrReset](https://doc.sensory.com/tnl/7.8/api/inference.md#reset): reset (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#reset) - [snsrRun](https://doc.sensory.com/tnl/7.8/api/inference.md#run): run (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#run) - [snsrSave](https://doc.sensory.com/tnl/7.8/api/inference.md#save): save (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#save) - [snsrSet](https://doc.sensory.com/tnl/7.8/api/inference.md#set): set (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#set) - [snsrSetHandler](https://doc.sensory.com/tnl/7.8/api/inference.md#sethandler): setHandler (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#sethandler) - [snsrSetDouble](https://doc.sensory.com/tnl/7.8/api/inference.md#setters): setters (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#setters) - [snsrStop](https://doc.sensory.com/tnl/7.8/api/inference.md#stop): stop (HTML: https://doc.sensory.com/tnl/7.8/api/inference/#stop) - [snsrStreamFromAsset](https://doc.sensory.com/tnl/7.8/api/io.md#fromasset): fromAsset (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromasset) - [snsrStreamFromAudioDevice](https://doc.sensory.com/tnl/7.8/api/io.md#fromaudiodevice): fromAudioDevice (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromaudiodevice) - [snsrStreamFromAudioFile](https://doc.sensory.com/tnl/7.8/api/io.md#fromaudiofile): fromAudioFile (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromaudiofile) - [snsrStreamFromAudioStream](https://doc.sensory.com/tnl/7.8/api/io.md#fromaudiostream): fromAudioStream (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromaudiostream) - [snsrStreamFromBuffer](https://doc.sensory.com/tnl/7.8/api/io.md#frombuffer): fromBuffer (HTML: https://doc.sensory.com/tnl/7.8/api/io/#frombuffer) - [snsrStreamFromCode](https://doc.sensory.com/tnl/7.8/api/io.md#fromcode): fromCode (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromcode) - [snsrStreamFromFILE](https://doc.sensory.com/tnl/7.8/api/io.md#fromfile): fromFILE (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromfile) - [snsrStreamFromFileName](https://doc.sensory.com/tnl/7.8/api/io.md#fromfilename): fromFileName (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromfilename) - [snsrStreamFromMemory](https://doc.sensory.com/tnl/7.8/api/io.md#frommemory): fromMemory (HTML: https://doc.sensory.com/tnl/7.8/api/io/#frommemory) - [snsrStreamFromOpenStream](https://doc.sensory.com/tnl/7.8/api/io.md#fromopenstream): fromOpenStream (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromopenstream) - [snsrStreamFromProvider](https://doc.sensory.com/tnl/7.8/api/io.md#fromprovider): fromProvider (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromprovider) - [snsrStreamFromStreams](https://doc.sensory.com/tnl/7.8/api/io.md#fromstreams): fromStreams (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromstreams) - [snsrStreamFromString](https://doc.sensory.com/tnl/7.8/api/io.md#fromstring): fromString (HTML: https://doc.sensory.com/tnl/7.8/api/io/#fromstring) - [snsrStreamRaise](https://doc.sensory.com/tnl/7.8/api/io.md#raise): raise (HTML: https://doc.sensory.com/tnl/7.8/api/io/#raise) - [snsrStreamAtEnd](https://doc.sensory.com/tnl/7.8/api/io.md#atend): atEnd (HTML: https://doc.sensory.com/tnl/7.8/api/io/#atend) - [snsrStreamClose](https://doc.sensory.com/tnl/7.8/api/io.md#close): close (HTML: https://doc.sensory.com/tnl/7.8/api/io/#close) - [snsrStreamCopy](https://doc.sensory.com/tnl/7.8/api/io.md#copy): copy (HTML: https://doc.sensory.com/tnl/7.8/api/io/#copy) - [snsrStreamErrorDetail](https://doc.sensory.com/tnl/7.8/api/io.md#errordetail): errorDetail (HTML: https://doc.sensory.com/tnl/7.8/api/io/#errordetail) - [snsrStreamGetDelim](https://doc.sensory.com/tnl/7.8/api/io.md#getdelim): getDelim (HTML: https://doc.sensory.com/tnl/7.8/api/io/#getdelim) - [snsrStreamGetMeta](https://doc.sensory.com/tnl/7.8/api/io.md#getmeta): getMeta (HTML: https://doc.sensory.com/tnl/7.8/api/io/#getmeta) - [snsrStreamOpen](https://doc.sensory.com/tnl/7.8/api/io.md#open): open (HTML: https://doc.sensory.com/tnl/7.8/api/io/#open) - [snsrStreamPrint](https://doc.sensory.com/tnl/7.8/api/io.md#print): print (HTML: https://doc.sensory.com/tnl/7.8/api/io/#print) - [snsrStreamRC](https://doc.sensory.com/tnl/7.8/api/io.md#rc): rC (HTML: https://doc.sensory.com/tnl/7.8/api/io/#rc) - [snsrStreamRead](https://doc.sensory.com/tnl/7.8/api/io.md#read): read (HTML: https://doc.sensory.com/tnl/7.8/api/io/#read) - [snsrStreamSkip](https://doc.sensory.com/tnl/7.8/api/io.md#skip): skip (HTML: https://doc.sensory.com/tnl/7.8/api/io/#skip) - [snsrStreamWrite](https://doc.sensory.com/tnl/7.8/api/io.md#write): write (HTML: https://doc.sensory.com/tnl/7.8/api/io/#write) - [snsrStream_getData](https://doc.sensory.com/tnl/7.8/api/io.md#getdata): getData (HTML: https://doc.sensory.com/tnl/7.8/api/io/#getdata) - [snsrStream_getVmt](https://doc.sensory.com/tnl/7.8/api/io.md#getvmt): getVmt (HTML: https://doc.sensory.com/tnl/7.8/api/io/#getvmt) - [snsrStream_setDetail](https://doc.sensory.com/tnl/7.8/api/io.md#setdetail): setDetail (HTML: https://doc.sensory.com/tnl/7.8/api/io/#setdetail) - [snsrRelease](https://doc.sensory.com/tnl/7.8/api/heap.md#release): release (HTML: https://doc.sensory.com/tnl/7.8/api/heap/#release) - [snsrRetain](https://doc.sensory.com/tnl/7.8/api/heap.md#retain): retain (HTML: https://doc.sensory.com/tnl/7.8/api/heap/#retain) - [snsrMalloc](https://doc.sensory.com/tnl/7.8/api/heap.md#malloc): malloc (HTML: https://doc.sensory.com/tnl/7.8/api/heap/#malloc) - [snsrFree](https://doc.sensory.com/tnl/7.8/api/heap.md#free): free (HTML: https://doc.sensory.com/tnl/7.8/api/heap/#free) - [snsrRealloc](https://doc.sensory.com/tnl/7.8/api/heap.md#realloc): realloc (HTML: https://doc.sensory.com/tnl/7.8/api/heap/#realloc) - [snsrTearDown](https://doc.sensory.com/tnl/7.8/api/heap.md#teardown): tearDown (HTML: https://doc.sensory.com/tnl/7.8/api/heap/#teardown) ## Format notes - Markdown pages begin with YAML front matter (`---` … `---`) containing `source_path` and `canonical_url` before the body. - mkdocs-autorefs are expanded to `[text](url)` when resolvable; in-page targets use absolute `.md` URLs on this host (fragments preserved). Unresolved references keep `[id]` form with matching `[id]: …` and `*[abbrev]: …` definition lines at the bottom of that `.md` member. - See the `How to read this file` section above for entry format and a warning about URL synthesis. - Legal boilerplate (`Sensory SDK license`, `Open Source licenses`) lives in `## Licenses` at the bottom of this file so RAG pipelines that bail on proprietary-text snippets only lose the license links, not the technical content. - `llms-full.txt` per-page headers have the form `` on this site mirror. The in-zip copy of `llms-full.txt` uses bundle-relative paths instead (``); the parenthesized canonical URL is identical on both surfaces and is the most stable join key. ## Licenses - [Sensory SDK license](https://doc.sensory.com/tnl/7.8/licenses/index.md): NOTICE TO USER: PLEASE READ THIS CONTRACT CAREFULLY.… (HTML: https://doc.sensory.com/tnl/7.8/licenses/) - [Open Source licenses](https://doc.sensory.com/tnl/7.8/licenses/oss.md): One or more of the libraries included in this TrulyNatural SDK uses third-party Open Source components with permissive license agreements. (HTML: https://doc.sensory.com/tnl/7.8/licenses/oss/)