Skip to main content

A Textual app that reminds you to keep your voice down on calls.

Project description

inside-voice

inside-voice is a terminal app that helps you keep your speaking volume down while you are on Zoom, Google Meet, or other calls. It watches your microphone level and plays a short local chime when your voice crosses above an adjustable dB threshold, or after it stays above the threshold for a configurable duration.

The app is Linux-first and built with cross-platform pieces (sounddevice/PortAudio + Textual), so macOS and Windows should be achievable even though Linux is the primary target.

Features

  • Live microphone level meter in dBFS
  • Textual TUI with mouse/keyboard-adjustable sliders
  • Sliders for threshold, repeat sustain duration, cooldown, and chime volume
  • Configurable first chime behavior: immediate crossing or sustained loudness
  • Generated two-tone chime; no bundled audio asset required
  • Mute toggle and quick calibration action
  • Settings saved under your platform config directory
  • Audio input device listing and selection

Requirements

  • Python 3.14+
  • uv
  • PortAudio runtime libraries

On Debian/Ubuntu-style Linux systems, PortAudio is typically available with:

sudo apt install libportaudio2 portaudio19-dev

Package names vary by distribution.

Install and run

From PyPI:

uv tool install inside-voice
inside-voice

From source:

git clone https://github.com/feoh/inside-voice.git
cd inside-voice
uv sync
uv run inside-voice

List input devices:

uv run inside-voice --list-devices

Choose a device by index or name substring:

uv run inside-voice --input-device 3
uv run inside-voice --input-device "USB Headset"

Start with a threshold override:

uv run inside-voice --threshold -28

Controls

  • q — quit
  • m — mute/unmute chime playback
  • c — one-shot threshold calibration: set threshold to current level + 6 dB
  • t — toggle first chime behavior between immediate and sustained
  • Arrow keys — adjust the focused slider; after c, Threshold gets focus
  • Page Up/Page Down — adjust focused slider in larger steps
  • Home/End — move focused slider to minimum/maximum
  • Mouse click/drag — set slider values

Tuning tips

  1. Join a call with your normal headphones/microphone setup.
  2. Speak at a comfortable normal volume.
  3. Press c to place the threshold slightly above that level.
    • c is not a mode; it immediately updates the Threshold slider and saves it.
    • After calibration, arrow keys adjust the Threshold slider for fine-tuning.
  4. Leave "Immediate first chime" enabled if you want prompt feedback.
  5. Disable "Immediate first chime" if you only want alerts after sustained loudness.
  6. If the chime triggers too often, raise the threshold or increase cooldown.
  7. If it triggers too late, lower the threshold or re-enable immediate first chime.
  8. Increase repeat sustain if repeated chimes are annoying while staying loud.

The meter uses dBFS, where 0 dBFS is the loudest possible digital input and quieter sounds are negative numbers. Typical microphone speech levels often land somewhere between -45 and -15 dBFS, depending on gain and hardware.

Configuration

Settings are saved automatically to your platform config directory, for example:

  • Linux: ~/.config/inside-voice/settings.json
  • macOS: ~/Library/Application Support/inside-voice/settings.json
  • Windows: %LOCALAPPDATA%\\inside-voice\\settings.json

Development

uv sync
uv run ruff check .
uv run mypy src tests
uv run pytest

License

MIT

Project details


Download files

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

Source Distribution

inside_voice-0.1.1.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

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

inside_voice-0.1.1-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file inside_voice-0.1.1.tar.gz.

File metadata

  • Download URL: inside_voice-0.1.1.tar.gz
  • Upload date:
  • Size: 9.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for inside_voice-0.1.1.tar.gz
Algorithm Hash digest
SHA256 37e83a883794ae822f1a508029c6c021ae8a7988b8d4a6eed17270946d1449ac
MD5 27bc5a31d7eb130dd58aab530da00035
BLAKE2b-256 a647334475309a1ad0e788b222ed04976fe336acc8269782cf7245657fa0ff53

See more details on using hashes here.

Provenance

The following attestation bundles were made for inside_voice-0.1.1.tar.gz:

Publisher: publish.yml on feoh/inside-voice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file inside_voice-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: inside_voice-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for inside_voice-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1dfe0a9ddf2fff319eca23a15d3e07bde315fb4123329256271fd041b00b66a7
MD5 6bd136d3c8280eacd29f5fbbe4a90b66
BLAKE2b-256 d652d814fd35d1531aa2ac8a43575f5fbd87f3912e474e75956b9b36f1540ad2

See more details on using hashes here.

Provenance

The following attestation bundles were made for inside_voice-0.1.1-py3-none-any.whl:

Publisher: publish.yml on feoh/inside-voice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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