A voice dictation application for Linux that supports multiple languages. The tool captures voice input, converts it to text using speech recognition, and types it into any application while properly handling keyboard layout conversions.
Automatic keybinding
Multi-language support with automatic language detection based on keyboard layout
Text-to-speech echo of recognized text
Visual status indicator during recording
Linux (tested on Fedora 42)
X11 or Wayland display server
The installation script will:
Install system dependencies
Install Python dependencies
Set up the application as a system service
Enable automatic startup on boot
# Clone the repository (if not already done)
git clone https://github.com/makelinux/multi-dictate.git
cd multi-dictate
# Run the installation script
./install.shTo completely remove the application:
./uninstall.shOnce installed with ./install.sh, the application is installed as a Python package and the service runs automatically:
-
Check service status:
systemctl --user status dictate.service
-
View service logs:
journalctl --user -u dictate.service -f
-
Control the service:
# Stop the service systemctl --user stop dictate.service # Start the service systemctl --user start dictate.service # Restart the service systemctl --user restart dictate.service # Disable auto-start on boot systemctl --user disable dictate.service
- Focus cursor on any input field or text editor
- Use one of the following keybindings:
Super+F9: Toggle speech echo on/off
Super+F10: Start manual recording
Super+F11: Stop manual recording
Super+F12: Toggle recording
Ctrl+Shift+S: Record until silence detected - Speak clearly into your microphone
- The recognized text will be typed at your cursor position
Edit ~/.config/multi-dictate/dictate.yaml to configure:
Configure custom keybindings to activate the dictation
Recognition language preferences
Text-to-speech settings
Voice activity detection parameters
Check keybindings
dconf read /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings
dconf dump /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/Check "Remote intergation" - orange icon on the top of the screen
-
Check PulseAudio is running:
pactl info
-
Test microphone:
parecord test.wav paplay test.wav
If text is typed incorrectly on non-QWERTY layouts:
-
Verify XKB tools are installed:
which setxkbmap xkbcomp
-
Check layout detection:
python -c "from kbd_utils import get_current_keyboard_layout; print(get_current_keyboard_layout())" -
Test layout mapping:
python test_dictate.py
-
On Wayland, you may see warnings about Xwayland - these can be safely ignored.
Run from source directory:
./run_dictate.pyCustom keyboard bindings
FIFO for keybindings
pasimple - PulseAudio interface
webrtcvad - Voice Activity Detection
speech_recognition, Google Speech Recognition
gtts - Google Text-to-Speech for echo mode
tkinter - for Visual status indicator
pyautogui.typewrite - for final text output into keyboard buffer
Proper text conversion for non-QWERTY layouts (AZERTY, QWERTZ, etc.)
Remote desktop access
Optional packages:
python-Levenshtein - For calibration mode only (--calibrate)
vosk - For offline speech recognition
Run the built-in tests:
make checkFast clipboard-based text insertion (much faster than typing)
This project is licensed under the MIT License - see the LICENSE file for details.