Skip to content

Linux: silent audio discard on low mic volume without diagnostic feedback #782

Open

Description

@haroon0x

Hex version

3.1.1, stable channel, linux-x64

Platform

Linux Wayland

System details

Ubuntu 24.04 LTS, PipeWire 1.0.5 with WirePlumber, USB Audio (Logitech Webcam C170).

What happened?

When the system recording volume in PipeWire / ALSA is low (in our case 39% / 0.39 on the USB mic), spoken audio is silently discarded by VAD:

INFO hex::dictation: discarded dictation without detected speech level_dbfs=-47.203460693359375 audio_ms=8127 vad_ms=19

Running hex dictation stop --print exits with code 4:

hex: no speech was recorded; nothing to print

Nothing in the UI or CLI indicates that input gain is too low to trigger speech detection. To a user, Hex appears completely unresponsive. Raising the input volume to 75% (wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 0.75) resolved it immediately.

Steps to reproduce

  1. Set the default recording source volume low (e.g. wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 0.35).
  2. Run hex dictation start, speak a sentence at normal volume, then run hex dictation stop --print.
  3. Hex exits with code 4, discarding the recording without explaining that input levels fell below the VAD threshold.

Proposed solutions

  • Warn in hex devices or hex status when the active input source volume in PipeWire/PulseAudio is set low (e.g. below 50%).
  • Show an input sensitivity indicator or add a diagnostic command (e.g. hex devices test or hex doctor) to help users verify live microphone levels against the VAD threshold.

Activity

  1. thdxr commented on Nov 1, 2026

    @thdxr
    Member

    a quiet source can sink the speech detector: pipewire's volume slider is cubic, so 35% is only about 4% of full signal, and the silero check (threshold 0.4, 160 ms minimum) then finds no speech and the capture is dropped. what helps today is the live level bars on general's microphone row (linux included), which show the peak hex actually receives, so speaking while general is open tells you right away if the input is too quiet.

    • reading the source volume is linux-only (pactl/wpctl) and doesn't cover mic gain or quiet hardware, so a percentage threshold like 50% would misfire.

    • the detector's score doesn't follow loudness in a simple way, so any "too quiet" cutoff would have to be measured, not guessed.

    • linux and windows skip the practice step, so the "no sound, pick another mic" hint never shows there.

    • at 35-39%, did general's level bars move much when you spoke, or did they stay near rest?

    • would a line like "input was very quiet" on the no-speech message be enough, or do you specifically want a hex devices/status warning?

    — from 𝕺𝖕𝖊𝖓𝕮𝖔𝖉𝖊

  2. added
    needs-designFeature that needs a closer look and design before we build it
    on Nov 1, 2026
  3. thdxr commented on Nov 1, 2026

    @thdxr
    Member

    yeah dropping it with no sign at all was bad. pipewire's slider is cubic, so 39% is a lot quieter than it looks

    fixed in #783 (next dev build). when hex throws a dictation away for being too quiet or having no speech it now plays the error sound, shows "too quiet, check your mic level" next to the hud, logs the level and peak against the threshold, and settings keeps a "last dictation discarded" line until one goes through. works the same on linux, windows and mac

    thanks for the logs and the wpctl repro, that made it easy

    — from 𝕺𝖕𝖊𝖓𝕮𝖔𝖉𝖊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-designFeature that needs a closer look and design before we build it

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions