Checkers-Drafts Game: Speech Chat Feature Implementation
Based upon the previously implemented Text Chat Feature, implementation of text-to-speech (TTS) and speech recognition features for the Drafts application, enabling voice-based communication and accessibility enhancements.
About
The Blazor Server is tasked with being “the go between” passing as text the spoken voice of one player to the other player. The speaking player’s voice stream is converted to text (Speech to Text). The receiving player’s end the performs the Text-To-Speech conversion. Note that no attempt is made to mimic the speaker’s voice. There is a selection of standard voices the senders to choose from, including a Default Voice. The player makes a selection based upon language, and country in /Player, the lobby. The TTS and STT features are implemented using the Web Speech API, which is supported in modern browsers. The implementation includes error handling for unsupported browsers and fallback options to ensure a seamless user experience.
Notes
- Voice selection can’t be made on a phone.
- Note that the speech is only half duplex. One player presses to speak whilst the other listens. Communication is then like a pair of walky-talkys.
- One player can mute the voice but it applies to both and can only be undone by the player the actions the mute.
- Given that the voice text stream uses the same stream that the Text Chat uses, it is injected at the speakers end and filtered out at the receiver, there is an option to also show in the Text Chat area.
Phase 1: Text-to-Speech (TTS) Infrastructure
1.1 TTS Service
File: Services/TtsService.cs
- Created centralized TTS service
- Features:
- Multiple language support
- Voice selection and customization
- Volume control
- Speech queue management
- Error handling and fallbacks
- Methods:
SpeakAsync()- Convert text to speechSpeakWithVoiceAsync()- Use specific voiceStopSpeaking()- Cancel current speechGetAvailableVoices()- List system voices
1.2 Voice Preferences
File: Data/AppUser.cs
- Added TTS preference fields:
PreferredTtsLanguage- Language code (en, es, fr, etc.)PreferredTtsRegion- Regional variant (US, GB, etc.)PreferredTtsVoice- Specific voice name
- Null values indicate system defaults
1.3 Voice Settings UI
File: Components/Pages/Player.razor
- Added voice preference controls
- Language dropdown with common languages
- Region dropdown (language-dependent)
- Voice selection dropdown
- Real-time voice preview
- Save preferences to database
1.4 Service Registration
File: Program.cs
- Registered
TtsServiceas scoped service - Added to DI container for dependency injection
Phase 2: JavaScript TTS Integration
2.1 TTS JavaScript Functions
File: wwwroot/js/draftsGame.js
- Added
window.draftsVoiceobject with methods:isSupported()- Check browser TTS supportspeak()- Speak text with optionsstop()- Stop current speechgetVoices()- Get available voicessetVolume()- Adjust speech volume
- Browser compatibility detection
- Error handling for unsupported browsers
2.2 Voice Detection
File: Components/DraftsGame.razor
- Added
DetectTtsSupport()method - Browser capability checking
- Fallback to text-only mode
- User notification of TTS status
2.3 Voice Queue Management
- Speech queue to prevent overlapping
- Priority system for game events
- Automatic cleanup of completed speech
- Error recovery and retry logic
Phase 3: Game Event TTS
3.1 Game Event Announcements
File: Components/DraftsGame.razor
- Integrated TTS for game events:
- Game start announcements
- Player moves
- Game end notifications
- System messages
- Chat messages (optional)
- Added
AnnounceEventAsync()method - Event priority system
3.2 Move Announcements
- Piece movement coordinates
- Capture notifications
- King promotions
- Game state changes
- Turn indicators
3.3 System Integration
File: Services/DraftsService.cs
- Added
TryAnnounceVoiceInfo()method - Voice preference detection for players
- Automatic voice setup on game start
- Player-specific voice announcements
Phase 4: Speech Recognition
4.1 Speech Recognition Service
File: Services/SpeechRecognitionService.cs
- Created speech recognition service
- Features:
- Real-time speech-to-text
- Command recognition
- Language detection
- Confidence scoring
- Error handling
- Methods:
StartRecognitionAsync()- Begin listeningStopRecognitionAsync()- Stop listeningProcessCommandAsync()- Handle voice commands
4.2 Voice Commands
File: Components/DraftsGame.razor
- Implemented voice command system:
- “Move [coordinate]” - Make moves
- “Chat [message]” - Send chat messages
- “Help” - Show available commands
- “Stop” - Cancel current action
- “Volume [level]” - Adjust TTS volume
- Command parsing and validation
- Natural language processing
4.3 Recognition UI
- Microphone button with visual feedback
- Real-time transcription display
- Confidence indicator
- Error messages and guidance
- Privacy notifications
Phase 5: Advanced TTS Features
5.1 Voice Customization
File: Components/Pages/Player.razor
- Enhanced voice settings:
- Speech rate control
- Pitch adjustment
- Volume normalization
- Voice preview functionality
- Real-time voice testing
- Save preferences per user
5.2 Multi-Language Support
- Language detection from user preferences
- Automatic language switching
- Regional accent support
- Localization of voice commands
- Cross-language compatibility
5.3 Accessibility Features
- Visual indicators for speech events
- Keyboard shortcuts for TTS control
- Screen reader compatibility
- High contrast mode support
- Alternative input methods
Technical Implementation Details
1. TTS Architecture
User Event → TtsService → JavaScript TTS → Browser Speech API → Audio Output
2. Speech Recognition Flow
Microphone → Browser Recognition API → SpeechRecognitionService → Command Processing → Game Action
3. Voice Preference Storage
- User preferences stored in database
- Fallback to system defaults
- Browser-specific voice mapping
- Automatic voice detection
4. Error Handling
- Browser compatibility checks
- Network failure recovery
- Permission request handling
- Graceful degradation to text-only
Files Modified/Created
New Files:
Services/TtsService.cs- Text-to-speech serviceServices/SpeechRecognitionService.cs- Speech recognition service
Modified Files:
Data/AppUser.cs- Voice preference fieldsComponents/DraftsGame.razor- Game TTS integrationComponents/Pages/Player.razor- Voice settings UIProgram.cs- Service registrationwwwroot/js/draftsGame.js- TTS JavaScript functions
Database Schema
Voice Preferences
-- Added to existing Users table
ALTER TABLE "Users" ADD COLUMN "PreferredTtsLanguage" TEXT;
ALTER TABLE "Users" ADD COLUMN "PreferredTtsRegion" TEXT;
ALTER TABLE "Users" ADD COLUMN "PreferredTtsVoice" TEXT;
API Endpoints
Voice Settings
- GET
/api/voices/available- Get available system voices - POST
/api/voices/test- Test voice with sample text - PUT
/api/users/voice-preferences- Update user voice preferences
Speech Recognition
- POST
/api/speech/start- Start speech recognition - POST
/api/speech/stop- Stop speech recognition - POST
/api/speech/command- Process voice command
JavaScript API
TTS Functions
window.draftsVoice = {
// Check browser support
isSupported: function() { /* ... */ },
// Speak text with options
speak: function(text, options) { /* ... */ },
// Stop current speech
stop: function() { /* ... */ },
// Get available voices
getVoices: function() { /* ... */ },
// Set speech volume
setVolume: function(level) { /* ... */ },
// Set speech rate
setRate: function(rate) { /* ... */ },
// Set speech pitch
setPitch: function(pitch) { /* ... */ }
};
Speech Recognition Functions
window.draftsSpeech = {
// Check recognition support
isSupported: function() { /* ... */ },
// Start listening
start: function(options) { /* ... */ },
// Stop listening
stop: function() { /* ... */ },
// Process speech result
onResult: function(callback) { /* ... */ },
// Handle errors
onError: function(callback) { /* ... */ }
};
Configuration
Service Registration
builder.Services.AddScoped<TtsService>();
builder.Services.AddScoped<SpeechRecognitionService>();
Browser Permissions
- Microphone access for speech recognition
- Speech synthesis API access
- HTTPS requirement for some browsers
- User consent management
Voice Command Reference
Game Commands
"Move [from] to [to]"- Make a move"Chat [message]"- Send chat message"Help"- Show available commands"Stop speaking"- Stop TTS"Volume [1-10]"- Set volume level
System Commands
"New game"- Start new game"Leave game"- Exit current game"Settings"- Open settings"Refresh"- Refresh game list
Navigation Commands
"Go to lobby"- Return to lobby"Go to admin"- Navigate to admin panel"Home"- Go to home page
Usage Examples
TTS Integration
@inject TtsService Tts
<button @onclick="AnnounceMove">Announce Move</button>
@code {
private async Task AnnounceMove()
{
await Tts.SpeakAsync("Piece moved from A3 to B4");
}
}
Speech Recognition
<button @onclick="ToggleRecognition">
@isListening ? "Stop Listening" : "Start Listening"
</button>
@code {
private bool isListening = false;
private async Task ToggleRecognition()
{
if (isListening)
{
await SpeechService.StopRecognitionAsync();
}
else
{
await SpeechService.StartRecognitionAsync();
}
isListening = !isListening;
}
}
Testing Checklist
TTS Features
- Voice selection works
- Language switching functions
- Volume control responds
- Speech rate adjustment works
- Game events announced
- Chat messages spoken
- Error handling works
- Browser compatibility verified
Speech Recognition
- Microphone access granted
- Voice commands recognized
- Move commands execute
- Chat messages sent
- System commands work
- Confidence scoring accurate
- Background noise handling
- Multi-language support
Integration
- TTS and recognition work together
- Voice preferences persist
- Cross-browser compatibility
- Mobile device support
- Accessibility compliance
- Performance acceptable
Performance Metrics
- TTS latency: <200ms for short messages
- Recognition accuracy: >85% for clear speech
- Memory usage: <5MB for voice services
- CPU usage: <10% during active speech
- Network impact: Minimal (local processing)
Browser Compatibility
Supported Browsers
- Chrome 33+ (full support)
- Edge 14+ (full support)
- Firefox 49+ (partial support)
- Safari 7+ (partial support)
- Mobile browsers (limited support)
Feature Support Matrix
| Feature | Chrome | Edge | Firefox | Safari | Mobile* |
|---|---|---|---|---|---|
| TTS | ✅ | ✅ | ✅ | ✅ | ✅ |
| Recognition | ✅ | ✅ | ⚠️ | ❌ | ✅ |
| Voice Selection** | ✅ | ✅ | ⚠️ | ✅ | ⚠️ |
*Tested on Android devices
** When selection is not available, uses Default Voice
Security Considerations
Privacy
- Microphone access requires explicit consent
- Speech data processed locally when possible
- No voice data stored permanently
- Clear privacy policy for speech features
Permissions
- HTTPS required for speech recognition
- Microphone permission requests
- User can revoke permissions anytime
- Fallback to text-only mode
Future Enhancements
Advanced Features
- Custom voice training
- Emotion detection in speech
- Multi-language conversation
- Voice biometrics for authentication
- Real-time translation
- Voice-activated game controls
Technical Improvements
- Cloud-based TTS for better quality
- Offline speech recognition
- Voice command customization
- Advanced noise cancellation
- Voice analytics and insights
Status: ✅ Complete speech chat implementation with TTS and speech recognition
Troubleshooting
Common Issues
- TTS not working: Check browser support and permissions
- Recognition fails: Verify microphone access and HTTPS
- Voice quality poor: Adjust rate, pitch, and volume settings
- Commands not recognized: Check language settings and microphone quality
Debug Tools
- Browser developer tools for Web Audio API
- Console logging for speech events
- Network tab for API calls
- Media devices panel for microphone status
Performance Tips
- Limit concurrent TTS instances
- Use speech queues to prevent overlap
- Optimize voice selection caching
- Monitor memory usage with extended sessions
| Topic | Subtopic | |
| This Category Links | ||
| Category: | Artificial Intelligence Index: | Artificial Intelligence |
| Next: > | Checkers-Drafts Game | Groups Feature Implementation |
| < Prev: | Checkers-Drafts Game | Text Chat Feature Implementation |