# vois.rs Real-time voice changer for your mic: pitch/formant shifting, 12 effect presets and a built-in virtual microphone — written in pure Rust. ![Rust](https://img.shields.io/badge/Rust-1.74+-orange?style=flat-square&logo=rust&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-Linux%20%7C%20macOS%20%7C%20Windows-blue?style=flat-square) ![PipeWire](https://img.shields.io/badge/PipeWire-supported-purple?style=flat-square) ![License](https://img.shields.io/badge/license-GPL--3.0--or--later-red?style=flat-square&logo=gnu&logoColor=white) ![version](https://img.shields.io/badge/version-0.1.0-green?style=flat-square) [English](#english) | [Русский](#russian)
--- ## English ### Overview vois.rs turns your microphone into a voice changer in real time: shift pitch and formants with a phase-vocoder DSP chain, apply game/voice-change style presets (Robot, 8-bit, Demon, Girl, Alien, Ghost...), and expose the processed voice as a **virtual microphone** that Discord, Zoom, OBS and games can use — no external tools required. > **Heads up:** this project was hacked together very quickly on a "vibe" and may contain bugs, rough edges and half-finished bits. Use at your own risk and report issues! ### Features | Feature | Description | |---------|-------------| | Real-time pitch shift | Phase-vocoder, −12…+12 semitones, formants preserved | | Formant shift | Change the timbre (girl / deep / bright) independently of pitch | | 12 presets | Clean, Girl/Anime, Boy, Manly/Deep, Demon, Robot, 8-bit, Alien, Radio, Megaphone, Ghost, Cyborg | | Effects | Vocoder, bitcrush, distortion, reverb, chorus, ring-mod, bandpass, noise, compressor, noise gate | | Virtual microphone | Built-in `vois.rs` mic (PipeWire/PulseAudio) — no VB-CABLE needed on Linux | | TUI | Full-screen terminal UI with arrow-key + mouse control and live meters | | WAV recording | Record the processed audio with the `R` hotkey or `--record` | | Test tone | `--tone 220` lets you hear what a preset does without a mic | | Cross-platform | Linux (ALSA/PipeWire), macOS (CoreAudio), Windows (WASAPI) | ### Presets | Preset | Pitch | Formant | Effects | |--------|-------|---------|---------| | Clean | 0 st | 1.00× | passthrough (A/B compare) | | Girl / Anime | +5 st | 1.25× | — | | Boy | +3 st | 1.12× | — | | Manly / Deep | −4 st | 0.78× | compressor | | Demon | −9 st | 0.85× | distortion + reverb | | Robot | 0 st | 1.00× | channel vocoder + bitcrush | | 8-bit | 0 st | 1.00× | bitcrush (5-bit, decimate ×4, auto-level) | | Alien | −2 st | 1.15× | ring-mod + chorus | | Radio | 0 st | 1.00× | bandpass + noise + compressor | | Megaphone | 0 st | 1.00× | distortion + narrow EQ + compressor | | Ghost | −3 st | 1.05× | big reverb + chorus | | Cyborg | +2 st | 1.00× | vocoder + bitcrush | ### Usage ```bash cargo build --release ./target/release/vois # virtual mic is ON by default ./target/release/vois -p "Girl / Anime" # pick a preset ./target/release/vois --no-virtual-mic # just output to your speakers ./target/release/vois --tone 220 # hear presets without a mic ./target/release/vois --list # list audio devices ./target/release/vois --list-presets # list presets ``` In Discord / Zoom / OBS select **`vois.rs`** as your microphone. ### TUI controls | Key / Mouse | Action | |-------------|--------| | `↑` / `↓` / click | switch preset (live preview) | | `←` / `→` | change pitch (main) / change setting (settings) | | `S` / `Tab` | open settings screen | | `H` | help | | `Q` / `Ctrl+C` | quit | Settings screen: `↑↓` select, `←→` / `Enter` change, `Esc` back — preset, pitch, formant, gate threshold (dB), gain (dB), mute, LIVE/PASSTHROUGH mode, record. ### Dependencies - `cpal` — audio capture/playback (ALSA / WASAPI / CoreAudio) - `rustfft` — phase-vocoder FFT - `ratatui` + `crossterm` — terminal UI - `ringbuf` — lock-free sample buffers - `hound` — WAV recording - Linux virtual mic requires `pactl` (PipeWire/PulseAudio) ### Installation 1. `cargo build --release` 2. Run `./target/release/vois` 3. Select **`vois.rs`** as your microphone in your voice app ### Roadmap / ideas - Windows/macOS virtual mic (VB-CABLE / BlackHole) as output device - Latency meter and lower-latency FFT modes - Pitch auto-correction / karaoke-style smoothing - More presets and user-defined chains - Web UI / tray icon - Playback of a soundboard through the virtual mic --- ## Русский ### Обзор vois.rs превращает твой микрофон в войс-ченджер в реальном времени: сдвиг высоты и формант на фазовом вокодере, 12 пресетов в стиле войс-модов (Robot, 8-bit, Demon, Girl, Alien, Ghost...) и **виртуальный микрофон**, который видят Discord, Zoom, OBS и игры — без внешних программ. > **Важно:** проект был написан очень быстро, «на вайбе», поэтому могут быть баги, недоделки и шероховатости. Пользуйся на свой страх и риск, баги репорть! ### Возможности | Возможность | Описание | |-------------|----------| | Сдвиг высоты | Фазовый вокодер, −12…+12 полутонов, форманты сохраняются | | Сдвиг формант | Меняет тембр (девушка / глубокий / звонкий) независимо от высоты | | 12 пресетов | Clean, Girl/Anime, Boy, Manly/Deep, Demon, Robot, 8-bit, Alien, Radio, Megaphone, Ghost, Cyborg | | Эффекты | Вокодер, биткраш, дисторшн, реверб, хорус, кольцевая модуляция, полосовой фильтр, шум, компрессор, шумоподавитель | | Виртуальный микрофон | Встроенный `vois.rs` (PipeWire/PulseAudio) — на Linux не нужен VB-CABLE | | TUI | Полноэкранный интерфейс с управлением стрелками и мышью, живые уровни | | Запись в WAV | Клавиша `R` или `--record` | | Тестовый тон | `--tone 220` — послушать пресет без микрофона | | Кроссплатформенность | Linux (ALSA/PipeWire), macOS (CoreAudio), Windows (WASAPI) | ### Пресеты | Пресет | Высота | Форманты | Эффекты | |--------|--------|----------|---------| | Clean | 0 пт | 1.00× | passthrough (сравнение A/B) | | Girl / Anime | +5 пт | 1.25× | — | | Boy | +3 пт | 1.12× | — | | Manly / Deep | −4 пт | 0.78× | компрессор | | Demon | −9 пт | 0.85× | дисторшн + реверб | | Robot | 0 пт | 1.00× | вокодер + биткраш | | 8-bit | 0 пт | 1.00× | биткраш (5 бит, децимация ×4, автолевел) | | Alien | −2 пт | 1.15× | кольцевая модуляция + хорус | | Radio | 0 пт | 1.00× | полосовой фильтр + шум + компрессор | | Megaphone | 0 пт | 1.00× | дисторшн + узкий EQ + компрессор | | Ghost | −3 пт | 1.05× | большой реверб + хорус | | Cyborg | +2 пт | 1.00× | вокодер + биткраш | ### Запуск ```bash cargo build --release ./target/release/vois # виртуальный микрофон включён по умолчанию ./target/release/vois -p "Girl / Anime" # выбрать пресет ./target/release/vois --no-virtual-mic # просто вывод в колонки/наушники ./target/release/vois --tone 220 # послушать пресеты без микрофона ./target/release/vois --list # список устройств ./target/release/vois --list-presets # список пресетов ``` В Discord / Zoom / OBS выбери микрофон **`vois.rs`**. ### Управление в TUI | Клавиша / мышь | Действие | |----------------|----------| | `↑` / `↓` / клик | переключение пресета (живой предпросмотр) | | `←` / `→` | pitch (главный экран) / изменение параметра (настройки) | | `S` / `Tab` | экран настроек | | `H` | справка | | `Q` / `Ctrl+C` | выход | Экран настроек: `↑↓` выбор, `←→` / `Enter` изменение, `Esc` назад — пресет, pitch, formant, порог шумоподавителя (дБ), усиление (дБ), mute, режим LIVE/PASSTHROUGH, запись. ### Зависимости - `cpal` — захват/вывод звука (ALSA / WASAPI / CoreAudio) - `rustfft` — FFT для фазового вокодера - `ratatui` + `crossterm` — терминальный интерфейс - `ringbuf` — lock-free буферы сэмплов - `hound` — запись WAV - Виртуальный микрофон на Linux требует `pactl` (PipeWire/PulseAudio) ### Установка 1. `cargo build --release` 2. Запусти `./target/release/vois` 3. В голосовом приложении выбери микрофон **`vois.rs`** ### Планы / идеи - Виртуальный микрофон на Windows/macOS (VB-CABLE / BlackHole) как устройство вывода - Замер задержки и режимы FFT с меньшей латентностью - Автокоррекция высоты / сглаживание в стиле караоке - Больше пресетов и пользовательские цепочки эффектов - Web-UI / трей-иконка - Звуковая плата (soundboard) через виртуальный микрофон --- ### Links - [Releases](../../releases) - [Issues](../../issues) - [License](LICENSE) ### License GNU General Public License v3.0 (or later)