# Wake Word Detection - "Hey Alfred"

## Overview

The Alfred Mobile app now includes **offline wake word detection** using [Vosk](https://alphacephei.com/vosk/), an open-source speech recognition toolkit. This allows hands-free voice interaction by continuously listening for the wake phrase.

## Wake Words

The app listens for:
- **"Hey Alfred"**
- **"Alfred"**

When either phrase is detected, voice input automatically starts.

## How to Use

### 1. Enable Wake Word Mode

In the app's status bar (below the top bar), you'll see two toggle chips:

- **Wake Word** (keyboard icon) - Enable/disable continuous listening
- **Voice Off/On** (speaker icon) - Enable/disable TTS responses

Tap **Wake Word** to enable continuous listening mode. The chip will turn blue and say **"Always On"**.

### 2. Say the Wake Word

With wake word mode enabled, the app continuously listens for "Hey Alfred" or "Alfred" in the background.

When detected:
1. You'll see a system message: "Wake word detected!"
2. Voice input automatically starts (microphone icon appears)
3. Speak your command/question
4. Voice input stops after a pause (10 seconds allowed for natural pauses)
5. Message auto-sends to Alfred

### 3. Normal Conversation

After the wake word triggers voice input:
- **Speech pauses**: The app allows up to 10 seconds of silence for natural speaking rhythm
- **Auto-send**: Your message sends automatically when voice input completes
- **Wake word loops**: After sending, wake word detection resumes automatically

### 4. Enable TTS (Optional)

For a full voice conversation experience:
1. Enable **Voice On** (speaker icon)
2. Say "Hey Alfred" → speak your question → Alfred responds verbally
3. Say "Hey Alfred" again for the next question

## Technical Details

### Model
- **Vosk Small English Model** (vosk-model-small-en-us-0.15)
- **Size**: ~39MB
- **Location**: `app/src/main/assets/vosk-model/`
- **On-device processing**: No internet required, completely private

### Accuracy
- Works best in quiet environments
- Optimized for American English
- May occasionally false-trigger on similar-sounding words

### Privacy
- All speech recognition happens **on-device**
- No audio data sent to external servers
- Only transcribed text is sent to OpenClaw gateway (as with manual voice input)

### Performance
- **CPU usage**: Low (Vosk uses lightweight model)
- **Battery impact**: Moderate when wake word mode is enabled (continuous microphone access)
- **Latency**: ~100-500ms from wake word to voice input activation

### Permissions
- **Microphone**: Required for wake word detection
- Requested automatically when you enable wake word mode

## Troubleshooting

### Wake word not detecting
1. **Check microphone permission** - Grant in Android settings if denied
2. **Speak clearly** - Say "Hey Alfred" or "Alfred" distinctly
3. **Reduce background noise** - Works best in quiet environments
4. **Check volume** - Speak at normal conversation volume

### Battery drain
- Wake word mode uses continuous microphone access
- Disable wake word mode when not needed
- Use manual voice button for single commands

### False positives
- Vosk may occasionally trigger on similar words ("Elford", "Alpha Fred", etc.)
- This is normal for lightweight on-device models
- False triggers will just open voice input briefly

## Architecture

```
WakeWordDetector.kt
├── Vosk Model (assets/vosk-model/)
├── Continuous audio recording (16kHz)
├── Partial result processing
└── Wake word matching ("alfred", "hey alfred")

MainScreen.kt
├── Wake word toggle chip
├── Initialize detector on launch
├── Auto-trigger VoiceInputManager on detection
└── Display "Wake word detected!" message
```

## Future Enhancements

Potential improvements:
- [ ] Custom wake word training
- [ ] Background service (wake word works when app is backgrounded)
- [ ] Larger/more accurate Vosk model option
- [ ] Multi-language support
- [ ] Configurable wake words via settings

## Comparison: Wake Word vs Manual Voice

| Feature | Wake Word Mode | Manual Voice Button |
|---------|---------------|-------------------|
| Activation | Say "Hey Alfred" | Tap microphone button |
| Hands-free | ✅ Yes | ❌ No (requires tap) |
| Battery impact | Moderate | Low |
| Privacy | Full (on-device) | Full (on-device) |
| Accuracy | Good | Excellent |
| Background use | Not yet (app must be open) | Not yet (app must be open) |

## Related Files

- **Wake word logic**: `app/src/main/java/com/openclaw/alfred/voice/WakeWordDetector.kt`
- **UI integration**: `app/src/main/java/com/openclaw/alfred/ui/screens/MainScreen.kt`
- **Voice input**: `app/src/main/java/com/openclaw/alfred/voice/VoiceInputManager.kt`
- **TTS**: `app/src/main/java/com/openclaw/alfred/voice/TTSManager.kt`
- **Model**: `app/src/main/assets/vosk-model/`

---

**Enjoy hands-free conversations with Alfred!** 🎤
