vim-piper

text to speech for vim using piper

Stars
5
Committers
1

Vim Piper

A simple wrapper over the Piper text-to-speech system.

Introduction

Vim Piper is a Vim plugin that integrates the Piper text-to-speech system into Vim. It allows you to easily convert text within Vim to speech using Piper. If you don't care about natural sounding tts, you can use vim-espeak.

Dependency

This plugin depends on the following:

  • piper-tts
  • a piper voice
  • aplay command from alsa-utils package (probably already installed)
  • Vim or Neovim

Getting piper

On Arch Linux, do the following:

yay -S piper-tts-bin piper-voices-en-us # or your language of choice

You may also find piper and it's voices in the repositories of other distros, if not, simply grab the pre-compiled binaries of piper from here, and manually download your desired voices from here. Once the download is finished, you can refer to the Configuration section of this README to find out out to setup vim-piper.

Installation

Using vim-plug

Add the following to your ~/.vimrc or ~/.config/nvim/init.vim:

Plug 'wolandark/vim-piper'

Then run :PlugInstall in Vim.

Configuration

You can configure the following variables in your ~/.vimrc.

let g:piper_bin = '/path/to/piper'
let g:piper_voice = '/path/to/voice/model.onnx'

The default values are:

let g:piper_bin = '/usr/bin/piper-tts'
let g:piper_voice = '/usr/share/piper-voices/en/en_US/joe/medium/en_US-joe-medium.onnx'

So if you install piper-tts and piper-voices-en-us from AUR, everything will work out of the box.

Functions

The plugin provides the following functions:

  • PassVisualSelection(): Utility function to get the visual selection.
  • SpeakWord(): Speak the word under the cursor.
  • SpeakCurrentLine(): Speak the current line.
  • SpeakCurrentParagraph(): Speak the current paragraph.
  • SpeakVisualSelection(): Speak the visual selection.
  • SpeakCurrentFile(): Speak the current file.

Mappings

The following mappings are defined by default:

  • nnoremap tw :call SpeakWord()
  • nnoremap tc :call SpeakCurrentLine()
  • nnoremap tp :call SpeakCurrentParagraph()
  • nnoremap tf :call SpeakCurrentFile()
  • vnoremap tv :call SpeakVisualSelection()

Demo

SpeakWord()

https://github.com/user-attachments/assets/d34e58f5-a411-4f40-811a-c912afff0cae

SpeakCurrentLine()

https://github.com/user-attachments/assets/b7a8db7a-a90f-4eb9-9108-8686d58cacbd

SpeakCurrentParagraph()

https://github.com/user-attachments/assets/bad5ac11-7377-46a0-9e19-baab4b7ae8e6

SpeakCurrentFile()

https://github.com/user-attachments/assets/6afc5a8c-5188-479a-af56-80a949e319a0

SpeakVisualSelection()

https://github.com/user-attachments/assets/657173b3-8bb1-46fc-bc9c-67b49b608bf9

License

Same as Vim.

Enjoy!