wyoming-tester/README.md

235 lines
5.5 KiB
Markdown

# Wyoming Protocol Tester
A cross-platform tool to test Wyoming protocol TTS (Text-to-Speech) and STT (Speech-to-Text) endpoints.
## Requirements
- Python 3.7 or higher
- No external dependencies (uses only Python standard library)
## Installation
1. Download or clone this repository
2. No installation needed - the script is ready to use!
## Usage
The tool has two modes: STT (Speech-to-Text) and TTS (Text-to-Speech).
### Testing Speech-to-Text (STT)
Convert an audio file to text using a Wyoming STT endpoint:
```bash
# Linux/macOS
python3 wyoming_tester.py stt --audio test.wav --endpoint localhost:10300
# Windows
python wyoming_tester.py stt --audio test.wav --endpoint localhost:10300
```
**Parameters:**
- `--audio`, `-a`: Input audio file (must be 16kHz mono WAV format)
- `--endpoint`, `-e`: STT server endpoint in format `host:port`
- `--save`: Save the endpoint for future use (optional)
**Example:**
```bash
python wyoming_tester.py stt --audio my_voice.wav --endpoint 192.168.1.100:10300 --save
```
### Testing Text-to-Speech (TTS)
Convert text to speech using a Wyoming TTS endpoint:
```bash
# Linux/macOS
python3 wyoming_tester.py tts --text "Hello world" --endpoint localhost:10200
# Windows
python wyoming_tester.py tts --text "Hello world" --endpoint localhost:10200
```
**Parameters:**
- `--text`, `-t`: Text to synthesize
- `--endpoint`, `-e`: TTS server endpoint in format `host:port`
- `--output`, `-o`: Output audio file (default: `output.wav`)
- `--save`: Save the endpoint for future use (optional)
**Example:**
```bash
python wyoming_tester.py tts --text "Testing Wyoming TTS" --endpoint 192.168.1.100:10200 --output result.wav --save
```
### Using Saved Endpoints
After saving an endpoint with `--save`, you can omit the `--endpoint` parameter in future runs:
```bash
# STT with saved endpoint
python wyoming_tester.py stt --audio test.wav
# TTS with saved endpoint
python wyoming_tester.py tts --text "Hello again"
```
Endpoints are saved in `~/.wyoming_tester_config.json` (or `%USERPROFILE%\.wyoming_tester_config.json` on Windows).
## Preparing Audio Files for STT
The STT test requires audio files in a specific format:
- **Format:** WAV
- **Sample Rate:** 16kHz (16000 Hz)
- **Channels:** Mono (1 channel)
- **Bit Depth:** 16-bit (recommended)
### Converting Audio Files
#### Using FFmpeg (Cross-platform)
Install FFmpeg from [ffmpeg.org](https://ffmpeg.org/download.html), then:
```bash
# Convert any audio file to the correct format
ffmpeg -i input.mp3 -ar 16000 -ac 1 -sample_fmt s16 output.wav
```
#### Using SoX (Linux)
```bash
# Install SoX
sudo apt-get install sox
# Convert audio
sox input.mp3 -r 16000 -c 1 -b 16 output.wav
```
#### Using Python (Cross-platform)
If you have `pydub` installed:
```python
from pydub import AudioSegment
audio = AudioSegment.from_file("input.mp3")
audio = audio.set_frame_rate(16000).set_channels(1)
audio.export("output.wav", format="wav")
```
### Creating a Test Audio File
You can record a test audio file:
**Windows:**
1. Use Voice Recorder app
2. Save the recording
3. Convert to 16kHz mono using FFmpeg
**Linux:**
```bash
# Record with arecord (5 seconds)
arecord -f S16_LE -r 16000 -c 1 -d 5 test.wav
```
**macOS:**
```bash
# Record with sox
rec -r 16000 -c 1 test.wav
```
## Testing Against Wyoming Services
### Common Wyoming Ports
- **Faster-Whisper STT:** Port 10300
- **Piper TTS:** Port 10200
- **Custom services:** Check your service configuration
### Example with Docker
If you're running Wyoming services in Docker:
```bash
# Test local Docker service
python wyoming_tester.py stt --audio test.wav --endpoint localhost:10300
# Test remote service
python wyoming_tester.py tts --text "Hello" --endpoint 192.168.1.100:10200
```
## Troubleshooting
### "Connection refused" Error
- Verify the Wyoming service is running
- Check the host and port are correct
- Ensure firewall allows connections
### "Audio file not found" Error
- Verify the file path is correct
- Use absolute paths if needed: `C:\path\to\audio.wav` or `/path/to/audio.wav`
### "Expected 16kHz mono" Warning
- The audio file format doesn't match requirements
- Convert the audio using one of the methods above
- The test will still attempt to run but may fail
### No Transcription Received
- Check the Wyoming STT service logs
- Verify the service supports the audio format
- Try a shorter audio clip for testing
### No Audio Generated
- Check the Wyoming TTS service logs
- Verify the service is configured correctly
- Check if the text contains unsupported characters
## Making the Script Executable
### Linux/macOS
```bash
chmod +x wyoming_tester.py
./wyoming_tester.py stt --audio test.wav --endpoint localhost:10300
```
### Windows
You can create a batch file `test_stt.bat`:
```batch
@echo off
python wyoming_tester.py stt --audio test.wav --endpoint localhost:10300
```
Or `test_tts.bat`:
```batch
@echo off
python wyoming_tester.py tts --text "Hello world" --endpoint localhost:10200
```
## Configuration File
Saved endpoints are stored in JSON format:
```json
{
"stt_endpoint": "localhost:10300",
"tts_endpoint": "localhost:10200"
}
```
Location:
- **Linux/macOS:** `~/.wyoming_tester_config.json`
- **Windows:** `%USERPROFILE%\.wyoming_tester_config.json`
## Wyoming Protocol
This tool implements the Wyoming protocol for voice services. For more information about the protocol, visit:
- [Wyoming Protocol Documentation](https://github.com/rhasspy/wyoming)
- [Home Assistant Wyoming Integration](https://www.home-assistant.io/integrations/wyoming/)
## License
This tool is provided as-is for testing Wyoming protocol endpoints.