Local speech-to-text on hotkeys. Press a hotkey — speak — the text appears in the clipboard and (optionally) is auto-pasted into the active field.
Works fully offline on CPU (whisper.cpp), no GPU, and no audio/text is sent anywhere — everything is recognized locally.
- Global hotkeys — work in any application, even without window focus.
- Three recording modes:
- Hold (Push-to-Talk) — records while the key is held;
- Toggle — press to start, press again to stop;
- Auto (VAD) — automatic stop on silence (Silero VAD) + configurable silence threshold.
- Hotkeys by click — click the "Record"/"Cancel" field and press the desired combination; it is captured automatically (Escape — cancel).
- Microphone capture via a native WASAPI backend — supports built-in microphone arrays (e.g. Intel Smart Sound: EXCLUSIVE + PCM16 48 kHz stereo), with a fallback to NAudio WASAPI and MME.
- Background noise suppression (on/off) — a lightweight local filter (high-pass + adaptive noise floor) with no external models.
- Auto-paste (Ctrl+V) into the active field — toggled by a setting.
- Russian + English (multilingual model), automatic language detection.
- Model selection in a dedicated section — a list of models with description, speed, quality, size, "Download" / "Delete from disk" buttons and a mutually exclusive selector.
- Engine selection — Whisper (default) or NVIDIA Parakeet
parakeet-tdt-0.6b-v3(multilingual, 25 European languages incl. Russian; large-level accuracy at small-model speed; offline CPU inference via parakeet.cpp). - Technical terms dictionary — mixed into the model's initial prompt, improving recognition of "API", "CPU", "JSON", etc.
- Temperature (0 — strict/deterministic … 0.8 — softer) — affects the "strictness" of recognition.
- Use context (for long speech) — use the text of the previous segment.
- Model download progress and cancel — in the status bar: progress bar, size/speed/time and a "Cancel" button; a partially downloaded file is cleaned up.
- Capture is blocked until the selected model is downloaded/loaded (to avoid freezes).
- Settings window with a left menu: General · Appearance · Models · Hotkeys · Microphone · Startup · About.
- Auto-save — every change applies immediately (no "Save" button needed).
- Theme: Light / Dark / Auto (follows the Windows theme), including the window title bar (custom modern titlebar) and matching look of fields/buttons/toggles.
- Modern toggle switches.
- Tooltips (ⓘ) next to every setting with an explanation.
- Status overlay — a "Capturing"/"Recognizing" indicator at the bottom of the screen, above windows.
- "Hide window on focus loss" setting (disabled by default).
- Tray: minimizes into the background, opens settings on double-click of the icon; context menu.
- Tray and taskbar icon changes with the Windows theme (light/dark glyph).
- Autostart with Windows (optional).
- Windows 10/11 (11 recommended).
- CPU with AVX/AVX2/FMA/F16C support (otherwise use the
Whisper.net.Runtime.NoAvxruntime). - Microsoft Visual C++ Redistributable 2015–2022 (x64) — required by whisper.cpp.
- A microphone and permission to use it in Windows privacy settings.
- Internet on first launch (model download).
All models are q8-quantized ggml (Q8_0) — considerably smaller in memory and on disk than fp16, at virtually the same quality and speed.
| Size | File on disk | Speed | Quality | Comment |
|---|---|---|---|---|
| Tiny (q8) | ~42 MB | very fast | low | for simple tasks |
| Base (q8) | ~78 MB | fast | medium | a compromise |
| Small (default) (q8) | ~252 MB | medium | high | good RU/EN quality |
| Medium (q8) | ~785 MB | slow | very high | more accurate, slower |
| Large (turbo, q8) | ~834 MB | very slow | maximum | compact, for powerful CPUs |
Models are stored in %LOCALAPPDATA%\VoiceTyper\models and are downloaded once.
In the "Models" section they can be pre-downloaded and deleted from disk (to free up space).
On update, obsolete fp16 and q5 files are automatically removed from disk.
Available when the Parakeet engine is selected in the "Models" section.
Model parakeet-tdt-0.6b-v3 (NVIDIA, CC-BY-4.0), quants from
mudler/parakeet-cpp-gguf:
| Quant | File on disk | Size | Comment |
|---|---|---|---|
| q4_k | tdt-0.6b-v3-q4_k.gguf | ~644 MB | least memory |
| q5_k | tdt-0.6b-v3-q5_k.gguf | ~708 MB | compromise |
| q6_k | tdt-0.6b-v3-q6_k.gguf | ~775 MB | higher accuracy |
| q8_0 (default) | tdt-0.6b-v3-q8_0.gguf | ~897 MB | best accuracy, ~1 GB RAM |
Parakeet v3 auto-detects the language (no language setting needed for it); Whisper remains the default engine. Model weights are not bundled — they are downloaded once from HuggingFace; recognition afterwards is fully offline.
Requires the .NET 10 SDK (download).
# 1) Build the solution (Release)
dotnet build VoiceTyper.slnx -c Release
# 2) Run the tests
dotnet test VoiceTyper.Tests -c Releasedotnet run --project VoiceTyper.Appor the built exe:
VoiceTyper.App\bin\Release\net10.0-windows\VoiceTyper.exeThe repository already contains a built VoiceTyper.App\Native\mc_wasapi.dll (WASAPI capture for
Intel Smart Sound, built with MinGW, statically linked — depends only on system
KERNEL32/ole32/UCRT). It is copied to the output automatically.
If this file is missing — the application still builds, but the native backend is skipped and capture goes through NAudio WASAPI/MME (sufficient for ordinary microphones).
To rebuild mc_wasapi.dll from the mc_wasapi.cpp source (optional, requires MinGW-w64):
g++ -std=c++17 -O2 -shared -static-libgcc -static-libstdc++ -DUNICODE -D_UNICODE `
-I <mingw>\x86_64-w64-mingw32\include mc_wasapi.cpp -o mc_wasapi.dll -lole32 -luuiddotnet publish VoiceTyper.App -c Release -r win-x64 --self-contained true -o publishRun publish\VoiceTyper.exe. Requires the VC++ Redistributable.
- Launch VoiceTyper. The settings window opens by default; the application also runs in the tray.
- Settings: double-click the tray icon (or menu → "Open settings").
- Defaults:
- Record/stop:
Ctrl+Alt+Space - Cancel:
Ctrl+Alt+Escape
- Record/stop:
- Focus the target field, press the record hotkey, speak, release/press again.
- The text appears in the clipboard; with auto-paste enabled — directly in the input field.
- All settings are saved automatically.
The application writes a detailed log to %LOCALAPPDATA%\VoiceTyper\logs\voiceTyper.log
(format yyyy-MM-dd HH:mm:ss.fff [Level] message, errors include a stack trace).
The log is cleared on each launch; at ~1 MB the file is rotated (up to 5 archives voiceTyper.N.log).
Logged: startup, settings, microphones, hotkeys, model downloads, recording states,
recognized text and all errors.
- Auto-paste does not work in windows with elevated privileges (UAC) if VoiceTyper is launched without administrator rights. Fix: run both with the same privilege level.
- Quality depends on the model size and the microphone. For Russian, "Small" gives an acceptable result; for demanding scenarios use "Medium".
- A hotkey may conflict with system shortcuts — the application will show a notification; change the combination in settings.
- Noise suppression is a light filter (high-pass + adaptive noise floor). For stronger suppression it can be extended to RNNoise (separately).
VoiceTyper.slnx
├── VoiceTyper.Core/ # logic without UI: settings, audio (NAudio + native WASAPI),
│ # Whisper (Whisper.net), VAD, noise suppression, recording state machine
├── VoiceTyper.App/ # WPF: settings window (MVVM, section menu), tray, status overlay,
│ # themes, global hotkeys (NHotkey.Wpf), Native/mc_wasapi.dll
└── VoiceTyper.Tests/ # xUnit tests
Settings: %APPDATA%\VoiceTyper\settings.json
Models: %LOCALAPPDATA%\VoiceTyper\models
- Whisper.net + whisper.cpp — CPU recognition
- NAudio — audio capture
- NHotkey.Wpf — global hotkeys
- WindowsInput — Ctrl+V simulation
- CommunityToolkit.Mvvm — MVVM