Files
voculinux/README.md
T
Jatin K MalikandGitHub 3645c692fd Test Structure Reorganization and CI Improvements (#5)
* Add GitHub Actions CI/CD workflows and status badges

* Fix CI workflow dependency installation

* Fix CI workflow: remove pip caching and add explicit requirements.txt

* Fix CI workflow: add system dependencies for PyGObject and pycairo

* Refactor code for improved readability and consistency

- Cleaned up whitespace and formatting in audio_feedback.py, config_manager.py, keyboard_shortcuts.py, tray_indicator.py, run_basic_tests.py, and test_basic.py.
- Enhanced the structure of the code by aligning comments and ensuring consistent indentation.
- Updated function definitions and calls to maintain a uniform style across the codebase.
- Improved logging messages for better clarity during debugging.
- Ensured all files end with a newline for better compatibility with various tools.

* Refactor imports for consistency and clarity across multiple modules

* Fix test imports by setting PYTHONPATH and adding conftest.py

* Update CI workflow to use Python 3.12 and ensure proper import path in tests

* Fix CI: Add GObject Introspection development dependencies

* Update CI: Use virtual environment like local setup

* Fix CI

* Update README and setup.py: Change Python version to 3.8 and correct author email

* Restructure tests for better organization and maintainability

* Fix formatting

* Update CI workflow to remove redundant test step

* Fix CI tests by properly mocking VOSK model loading

* Update CI and Tests

* Simplify
2025-04-16 20:23:40 -05:00

8.3 KiB

Vocalinux

Vocalinux CI codecov Status: Early Development License: GPL v3 Python 3.8+ GitHub release CI Contributions welcome GitHub issues

A seamless voice dictation system for Linux, comparable to the built-in solutions on macOS and Windows.

Overview

Vocalinux provides a user-friendly speech-to-text solution for Linux users with:

  • Activation via customizable keyboard shortcuts (default: Alt+Shift+V)
  • Real-time transcription with minimal latency
  • Universal compatibility across applications
  • Offline operation for privacy and reliability
  • Visual indicators for microphone status
  • Audio feedback for recognition status

Technical Foundation

This project leverages existing open-source technologies:

  • Speech recognition: VOSK API / Whisper
  • Text injection: xdotool (X11) / ydotool/wtype (Wayland)
  • User interface: GTK for system tray and settings
  • Audio feedback: PulseAudio for sound notifications

Project Structure

vocalinux/
├── docs/                      # Documentation
│   ├── INSTALL.md            # Installation guide
│   └── USER_GUIDE.md         # User guide with command reference
├── resources/                 # Resource files
│   └── sounds/               # Audio notification sounds
│       ├── start_recording.mp3  # Sound when recording starts
│       ├── stop_recording.mp3   # Sound when recording stops
│       └── error.mp3            # Sound when an error occurs
├── src/                       # Source code
│   ├── __init__.py           # Package initialization
│   ├── main.py               # Main entry point
│   ├── speech_recognition/   # Speech recognition components
│   │   ├── __init__.py
│   │   ├── command_processor.py  # Voice commands processor
│   │   └── recognition_manager.py  # Speech recognition engine management
│   ├── text_injection/       # Text injection components
│   │   ├── __init__.py
│   │   └── text_injector.py  # X11/Wayland text injection
│   └── ui/                   # User interface components
│       ├── __init__.py
│       ├── audio_feedback.py  # Audio notification system
│       ├── config_manager.py  # Configuration management
│       ├── keyboard_shortcuts.py  # Keyboard shortcut handling
│       └── tray_indicator.py  # System tray UI
├── tests/                     # Test suite
│   └── test_basic.py         # Basic unit tests
├── install.sh                 # Installation script
├── LICENSE                    # GPLv3 license
├── README.md                  # This file
├── setup.py                   # Python package configuration
└── vocalinux.desktop          # Desktop entry file

Installation

Prerequisites

  • Ubuntu 22.04 or newer (may work on other Linux distributions)
  • Python 3.6 or newer
  • X11 or Wayland desktop environment

Quick Install

# Clone the repository
git clone https://github.com/jatinkrmalik/vocalinux.git
cd vocalinux

# Run the installer script
./install.sh

The installer will:

  1. Install system dependencies
  2. Set up Python dependencies
  3. Configure the application
  4. Create a desktop entry

For detailed installation instructions, see docs/INSTALL.md.

Usage

Starting the Application

After installation, you can start Vocalinux in several ways:

# From the terminal
vocalinux

# With debugging enabled
vocalinux --debug

# With a specific speech recognition engine
vocalinux --engine whisper

# With a specific model size
vocalinux --model medium

Using Voice Dictation

  1. Press the keyboard shortcut (default: Alt+Shift+V) to start recording
  2. You'll hear a start sound when recording begins
  3. Speak clearly into your microphone
  4. Press the same shortcut again or pause speaking to stop recording
  5. You'll hear a stop sound when recording ends

Using Voice Commands

Vocalinux supports various voice commands for text formatting:

Command Action
"new line" Inserts a line break
"period" Types a period (.)
"comma" Types a comma (,)
"question mark" Types a question mark (?)
"delete that" Deletes the last sentence
"capitalize" Capitalizes the next word

For a complete list of commands, see docs/USER_GUIDE.md.

Configuration

Configuration is stored in ~/.config/vocalinux/config.json and includes:

{
    "recognition": {
        "engine": "vosk",
        "model_size": "small",
        "auto_punctuate": true,
        "vad_sensitivity": 3,
        "timeout": 2.0
    },
    "shortcuts": {
        "toggle_recognition": "alt+shift+v"
    },
    "ui": {
        "start_minimized": false,
        "show_notifications": true,
        "audio_feedback": true
    },
    "advanced": {
        "debug_logging": false,
        "wayland_mode": false
    }
}

Custom Sounds

You can customize the audio feedback by replacing the sound files in the resources/sounds/ directory:

  • start_recording.mp3 - Played when recording starts
  • stop_recording.mp3 - Played when recording stops
  • error.mp3 - Played when an error occurs

Both MP3 and WAV formats are supported, with MP3 being the primary format.

Development

Setting Up Development Environment

# Clone the repository
git clone https://github.com/jatinkrmalik/vocalinux.git
cd vocalinux

# Install development dependencies
pip install -e ".[dev]"

# Run tests
pytest tests/

Key Components

  1. Speech Recognition Manager (src/speech_recognition/recognition_manager.py)

    • Manages speech recognition engines (VOSK, Whisper)
    • Handles audio recording and voice activity detection
    • Processes recognition results
  2. Command Processor (src/speech_recognition/command_processor.py)

    • Interprets voice commands in recognition results
    • Converts commands to text or actions
  3. Text Injector (src/text_injection/text_injector.py)

    • Injects text into active applications
    • Supports both X11 and Wayland environments
    • Automatically falls back to XWayland when needed
  4. Audio Feedback (src/ui/audio_feedback.py)

    • Provides audio cues for application states
    • Supports both MP3 and WAV formats
    • Uses system audio players (PulseAudio/ALSA)
  5. Tray Indicator (src/ui/tray_indicator.py)

    • Provides system tray interface
    • Shows recognition status
    • Offers menu for control
  6. Keyboard Shortcut Manager (src/ui/keyboard_shortcuts.py)

    • Manages global keyboard shortcuts
    • Enables activation from any application
    • Handles modifier key normalization

Running Tests

# Run all tests
pytest

# Run with coverage report
pytest --cov=src

Roadmap

Future development plans include:

  1. Custom icon design
  2. Graphical settings dialog
  3. Advanced voice commands for specific applications
  4. Multi-language support
  5. Better integration with popular applications
  6. Improved model management
  7. Customizable keyboard shortcuts via GUI
  8. More audio feedback options

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.