edge-tts
PowerShell / Terminal TTS Skill (edge-tts)
Use edge-tts — free, neural-quality voices (400+), works from any terminal. No Windows API nonsense. Sounds like a real human. 🎉
Step 1 — Check & Install
Always check if installed first:
Get-Command edge-tts -ErrorAction SilentlyContinue
Install with uv (preferred):
uv tool install edge-tts
Fallback with pip:
pip install edge-tts
This installs two executables: edge-tts (generate audio) and edge-playback (speak aloud).
Step 2 — Basic Usage
Speak aloud (use edge-playback, NOT edge-tts --play):
edge-playback --text "Hello world"
Save to MP3:
edge-tts --text "Hello world" --write-media output.mp3
⚠️
--playflag does NOT exist on Windows. Always useedge-playbackto speak aloud.
Step 3 — Voices
List ALL voices (400+):
edge-tts --list-voices
Filter voices by language in PowerShell:
edge-tts --list-voices | Select-String "en-US"
edge-tts --list-voices | Select-String "Female"
Recommended English neural voices:
| Voice | Gender | Style |
|---|---|---|
en-US-AriaNeural |
Female | Natural, warm |
en-US-JennyNeural |
Female | Friendly |
en-US-GuyNeural |
Male | Natural |
en-US-EricNeural |
Male | Calm |
en-GB-SoniaNeural |
Female | British |
en-GB-RyanNeural |
Male | British |
en-AU-NatashaNeural |
Female | Australian |
Use a specific voice:
edge-playback --voice "en-US-AriaNeural" --text "Hi, I'm Aria!"
edge-tts --voice "en-US-AriaNeural" --text "Hi" --write-media aria.mp3
Step 4 — Rate, Volume, Pitch
All adjustments use +X% or -X% string format:
# Rate: default is +0%, range roughly -50% to +100%
edge-playback --voice "en-US-AriaNeural" --rate "+20%" --text "Faster speech"
edge-playback --voice "en-US-AriaNeural" --rate "-30%" --text "Slower speech"
# Volume: default +0%
edge-playback --voice "en-US-AriaNeural" --volume "+50%" --text "Louder"
# Pitch: default +0Hz
edge-playback --voice "en-US-AriaNeural" --pitch "+10Hz" --text "Higher pitch"
The Complete Say.ps1 Script
When the user wants a full CLI wrapper script, generate this:
<#
.SYNOPSIS
TTS CLI wrapper around edge-tts / edge-playback.
.DESCRIPTION
Speaks text aloud or saves to MP3. Supports pipeline input,
voice selection, rate/volume/pitch control, and voice listing/search.
.EXAMPLE
.\Say.ps1 "Hello world"
.\Say.ps1 -Text "Hello" -Voice "en-US-AriaNeural" -Rate "+20%"
.\Say.ps1 -Text "Hello" -OutFile speech.mp3
.\Say.ps1 -List
.\Say.ps1 -Search "en-GB"
"Hello from pipeline" | .\Say.ps1
#>
[CmdletBinding(DefaultParameterSetName = 'Speak')]
param(
[Parameter(ParameterSetName='Speak', Position=0, ValueFromPipeline=$true)]
[string]$Text,
[Parameter(ParameterSetName='Speak')]
[string]$Voice = 'en-US-AriaNeural',
# Rate adjustment e.g. "+20%", "-10%"
[Parameter(ParameterSetName='Speak')]
[string]$Rate = '+0%',
# Volume adjustment e.g. "+50%", "-20%"
[Parameter(ParameterSetName='Speak')]
[string]$Volume = '+0%',
# Pitch adjustment e.g. "+5Hz", "-10Hz"
[Parameter(ParameterSetName='Speak')]
[string]$Pitch = '+0Hz',
# Save to MP3 file (speaks aloud if omitted)
[Parameter(ParameterSetName='Speak')]
[string]$OutFile,
# Also speak aloud when saving to file
[Parameter(ParameterSetName='Speak')]
[switch]$Also,
[Parameter(ParameterSetName='List', Mandatory)]
[switch]$List,
[Parameter(ParameterSetName='Search', Mandatory)]
[string]$Search
)
begin {
# Check edge-tts is installed
if (-not (Get-Command edge-tts -ErrorAction SilentlyContinue)) {
Write-Error "edge-tts not found. Install with: uv tool install edge-tts"
exit 1
}
# LIST mode
if ($PSCmdlet.ParameterSetName -eq 'List') {
edge-tts --list-voices
return
}
# SEARCH mode
if ($PSCmdlet.ParameterSetName -eq 'Search') {
Write-Host "Voices matching '$Search':" -ForegroundColor Cyan
edge-tts --list-voices | Select-String $Search
return
}
}
process {
if ($PSCmdlet.ParameterSetName -ne 'Speak') { return }
if (-not $Text) { return }
$baseArgs = @(
'--voice', $Voice,
'--rate', $Rate,
'--volume', $Volume,
'--pitch', $Pitch,
'--text', $Text
)
if ($OutFile) {
& edge-tts @baseArgs --write-media $OutFile
Write-Host "Saved to: $OutFile" -ForegroundColor Green
if ($Also) {
& edge-playback @baseArgs
}
} else {
& edge-playback @baseArgs
}
}
Pipeline Examples
# Simple string
"Good morning!" | .\Say.ps1
# From file
Get-Content notes.txt | .\Say.ps1 -Voice "en-GB-SoniaNeural"
# Command output
(Get-Date -Format "dddd, MMMM d") | .\Say.ps1
# Save to file
"Hello" | .\Say.ps1 -OutFile hello.mp3
# Speak AND save
.\Say.ps1 -Text "Hello" -OutFile hello.mp3 -Also
Common Gotchas
--playdoesn't exist on Windows — always useedge-playbackexecutable instead- Rate/Volume/Pitch need
+X%/+XHzformat — not plain numbers - Requires internet — edge-tts calls Microsoft's servers for synthesis
- Output is MP3 not WAV — use ffmpeg if WAV needed:
ffmpeg -i out.mp3 out.wav - Voice names are case-sensitive —
en-US-AriaNeuralnoten-us-arianeural uv tool installputs executables in uv's tool bin — make sure it's on PATH
More from lirrensi/agent-cli-helpers
desktop-notifications
>
27screenshot
>
15bg-jobs
>
9crony
>
8memory-bank
Use this skill to save, recall, or organize memories across conversations. Trigger on: 'remember this', 'save this', 'note this', 'what did we discuss about...', 'check your notes', 'do you remember', 'recall'. Also use proactively when the user seems to be resuming previous work, referencing past decisions, or when you discover something genuinely worth preserving for future sessions. This skill is NOT limited to code — use it for business decisions, personal notes, meeting recaps, research, project management, creative work, client history, anything.
8document-extractor
>
5