Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

OpenVoiceOS Dinkum Listener

ovos-dinkum-listener is the voice input daemon for OpenVoiceOS. It reads audio from the microphone, runs it through a wakeword, VAD, and STT pipeline, and emits the results on the message bus for the rest of OVOS to use.

Full documentation lives in the technical manual and in docs/.

Install

pip install ovos-dinkum-listener[extras] to install this package and the default plugins.

Without extras you will also need to manually install, and possibly configure STT, WW, and VAD modules as described below.

Configuration

you can set the Wakeword, VAD, STT and Microphone plugins

eg, to run under MacOS you should use https://github.com/OpenVoiceOS/ovos-microphone-plugin-sounddevice

non exhaustive list of config options

{
  "stt": {
    "module": "ovos-stt-plugin-server",
    "fallback_module": "",
    "ovos-stt-plugin-server": {"url": "https://stt.openvoiceos.com/stt"}
  },
  "listener": {
    // NOTE, multiple hotwords are supported, these fields define the main wake_word,
    // this is equivalent to setting "active": true in the "hotwords" section
    // see "hotwords" section at https://github.com/OpenVoiceOS/ovos-config/blob/dev/ovos_config/mycroft.conf
    "wake_word": "hey_mycroft",
    "stand_up_word": "wake_up",
    "microphone": {
      "module": "ovos-microphone-plugin-alsa"
    },
    // If enabled will only check for wakeword if VAD also detected speech
    // this should reduce false activations
    "vad_pre_wake_enabled": true,
    // Voice Activity Detection is used to determine when users are speaking
    VAD": {
     // recommended plugin: "ovos-vad-plugin-silero"
     "module": "ovos-vad-plugin-silero",
     "ovos-vad-plugin-silero": {"threshold": 0.2},
     "ovos-vad-plugin-webrtcvad": {"vad_mode": 3}
    },
    // Seconds of speech before voice command has begun
    "speech_begin": 0.1,
    // Seconds of silence before a voice command has finished
    "silence_end": 0.5,
    // Settings used by microphone to set recording timeout with and without speech detected
    "recording_timeout": 10.0,
    // Settings used by microphone to set recording timeout without speech detected.
    "recording_timeout_with_silence": 3.0,
    // max time allowed without user speaking before exiting RECORDING mode
    "recording_mode_max_silence_seconds": 30.0,
    // Setting to remove all silence/noise from start and end of recorded speech (only non-streaming)
    "remove_silence": true,
    // continuous listen is an experimental setting, it removes the need for
    // wake words and uses VAD only, a streaming STT is strongly recommended
    // NOTE: depending on hardware this may cause mycroft to hear its own TTS responses as questions
    "continuous_listen": false,

    // hybrid listen is an experimental setting,
    // it will not require a wake word for X seconds after a user interaction
    // this means you dont need to say "hey mycroft" for follow up questions
    "hybrid_listen": false,
    // number of seconds to wait for an interaction before requiring wake word again
    "listen_timeout": 45
  }
}

Tips and tricks

Saving Transcriptions

You can enable saving of recordings to file, this should be your first step to diagnose problems, is the audio inteligible? is it being cropped? too noisy? low volume?

set "save_utterances": true in your listener config, recordings will be saved to ~/.local/share/mycroft/listener/utterances

If the recorded audio looks good to you, maybe you need to use a different STT plugin, maybe the one you are using does not like your microphone, or just isn't very good for your language

Wrong Transcriptions

If you consistently get specific words or utterances transcribed wrong, you can remedy around this to some extent by using the ovos-utterance-corrections-plugin

You can define replacements at word level ~/.local/share/mycroft/word_corrections.json

for example whisper STT often gets artist names wrong, this allows you to correct them

{
    "Jimmy Hendricks": "Jimi Hendrix",
    "Eric Klapptern": "Eric Clapton",
    "Eric Klappton": "Eric Clapton"
}

Silence Removal

By default OVOS applies VAD (Voice Activity Detection) to crop silence from the audio sent to STT, this helps in performance and in accuracy (reduces hallucinations in plugins like FasterWhisper)

Depending on your microphone/VAD plugin, this might be removing too much audio

set "remove_silence": false in your listener config, this will send the full audio recording to STT

Listen Sound

does your listen sound contain speech? some users replace the "ding" sound with words such as "yes?"

In this case the listen sound will be sent to STT and might negatively affect the transcription

set "instant_listen": false in your listener config, this will drop the listen sound audio from the STT audio buffer. You will need to wait for the listen sound to finish before speaking your command in this case

Wake Word Verifiers

After the wake-word engine fires, optional verifier plugins can inspect the raw audio and suppress false detections before any callback is triggered. Plugins that implement HotWordVerifier (from ovos-plugin-manager) are discovered automatically.

Example — enable the Silero-VAD verifier with a custom threshold:

{
  "listener": {
    "ww_verifiers": {
      "ovos-ww-verifier-silero": {"threshold": 0.1}
    }
  }
}

Fail-open behaviour: if a verifier plugin raises an unexpected exception, the exception is logged and the detection is not suppressed. Only an explicit False return from HotWordVerifier.verify() discards the wake.

Disable a specific verifier without removing it from config:

{
  "listener": {
    "ww_verifiers": {
      "ovos-ww-verifier-silero": {"enabled": false}
    }
  }
}

Note: enabling ovos-ww-verifier-silero and "vad_pre_wake_enabled": true at the same time applies Silero VAD twice. Use one or the other.

How to test

Install the package with test dependencies, then run the suite:

pip install -e ".[extras]"
pip install pytest pytest-timeout
pytest test/ --timeout=30 -q

Expected output (clean environment):

...
258 passed in ~30s

To exercise the verifier chain in isolation:

pytest test/unittests/test_hotwords.py::TestHotwordVerifierChain -v

Expected output:

PASSED test_verify_no_verifiers_returns_true
PASSED test_verify_single_verifier_accepts
PASSED test_verify_single_verifier_rejects
PASSED test_verify_multiple_all_accept
PASSED test_verify_first_verifier_rejects_short_circuits
PASSED test_verify_second_verifier_rejects
PASSED test_verify_raising_verifier_is_fail_open
PASSED test_verify_raising_verifier_followed_by_rejecting_verifier
PASSED test_verify_constructor_verifiers_param

9 passed

To test end-to-end with the Silero verifier plugin installed:

pip install ovos-ww-verifier-silero

Add to your OVOS config:

{
  "listener": {
    "ww_verifiers": {
      "ovos-ww-verifier-silero": {"threshold": 0.1}
    },
    "vad_pre_wake_enabled": false
  }
}

Then start the listener and observe logs — a detected wake word followed by "wake word verifier plugins discarded detection" means the verifier rejected the audio (expected on a non-speech trigger).

Related projects

Credits

Voice Loop state machine implementation by @Synesthesiam for mycroft-dinkum

License

Apache License 2.0. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ovos_dinkum_listener-0.9.0a1.tar.gz (115.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ovos_dinkum_listener-0.9.0a1-py3-none-any.whl (113.5 kB view details)

Uploaded Python 3

File details

Details for the file ovos_dinkum_listener-0.9.0a1.tar.gz.

File metadata

  • Download URL: ovos_dinkum_listener-0.9.0a1.tar.gz
  • Upload date:
  • Size: 115.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ovos_dinkum_listener-0.9.0a1.tar.gz
Algorithm Hash digest
SHA256 47646f9332d7a2e78508f5bb1938b35801206f9abb237bbc957c822a1158ba94
MD5 061c8e44e292742ddc463a4462cbcd30
BLAKE2b-256 94b6485d7c45564931841fe61ed625d2d420dfca20fd928d4c60f59f08ce76e3

See more details on using hashes here.

File details

Details for the file ovos_dinkum_listener-0.9.0a1-py3-none-any.whl.

File metadata

File hashes

Hashes for ovos_dinkum_listener-0.9.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 f70b148bcda9edee326e4ae95e6b6752a8d63e5904885f88e91863ca7277f313
MD5 a0bf157816ed897b156a6c9b314a620e
BLAKE2b-256 6f8fb0fb703cbe148b5e3cb0fa524f0abb68e432948602ce4049fa51244e5f04

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.9.0a1 This release

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.2

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page