DCS Cockpit Voice Agent
Find a file
2025-10-13 11:50:15 +02:00
.cursor/plans windows... 2025-10-11 20:05:16 +02:00
assets/sounds sounds 2025-10-11 21:56:12 +02:00
config viggen better delays 2025-10-13 11:50:15 +02:00
docs udp port config 2025-10-13 07:42:11 +02:00
src/cva viggen better delays 2025-10-13 11:50:15 +02:00
tests config UI 2025-10-13 03:29:20 +02:00
.gitignore windows... 2025-10-11 20:05:16 +02:00
IMPLEMENTATION_STATUS.md structured xml prompts 2025-10-13 07:53:49 +02:00
pyproject.toml uv shorthands 2025-10-13 03:50:36 +02:00
README.md doc sync 2025-10-13 01:20:23 +02:00
uv.lock fix transcription gibberish test 2025-10-12 23:43:58 +02:00

DCS-CVA (DCS Cockpit Voice Agent)

Voice-controlled action system for DCS World using AI transcription and LLM intent parsing.

Features

  • Push-to-Talk Voice Control: Keyboard, mouse, or game controller PTT support
  • AI Transcription: faster-whisper backend with GPU acceleration (Vosk planned, not yet implemented)
  • Intent Parsing: OpenRouter LLM API for natural language command interpretation
  • Modular Architecture: Decorator-based Python definitions for commands, interactions, and actions
  • DCS-BIOS Integration: Direct control of aircraft systems via UDP (send-only)
  • Configuration UI: Planned (currently edit config/app.toml directly)

Quick Start

# Install dependencies (requires Python 3.10+)
uv sync --extra faster_whisper

# Set your OpenRouter API key (bash/Linux)
export OPENROUTER_API_KEY="your-api-key-here"

# Set your OpenRouter API key (Windows PowerShell)
$Env:OPENROUTER_API_KEY="your-api-key-here"

# Run default tests (unit + integration with mock UDP)
uv run -m pytest -q

# Run the application (as administrator on Windows)
uv run -m cva.main  # Optional: pass custom config path as argument

For current feature status and known limitations, see Implementation Status.

For detailed setup instructions, troubleshooting, and examples, see Getting Started Guide.

Architecture

CVA uses a three-layer execution system:

  1. Commands: LLM-exposed tools with rich descriptions for AI parsing
  2. Interactions: Multi-action sequences (e.g., startup procedures)
  3. Actions: Atomic DCS-BIOS operations (e.g., flip switch)

All definitions are decorator-based Python functions for type safety and IDE support.

Documentation

Project Structure

dcs-cva/
├── src/cva/              # Main application code
├── config/               # Configuration and definitions
│   ├── app.toml         # Main config file
│   └── definitions/     # Python-based execution definitions
├── docs/                # Documentation
├── assets/              # Sound effects and resources
└── tests/               # Test suite

Key Advantages: Natural Language Understanding

DCS-CVA breaks away from traditional phrase-based voice control systems by leveraging LLM intent parsing for truly natural cockpit communication.

Each aircraft module can define a custom prompt that teaches the LLM about:

  • Aircraft-specific terminology and naming conventions
  • Unique quirks and operational oddities of that aircraft
  • Contextual understanding to interpret pilot intent more accurately
# modules/YourAircraft/__init__.py
module = Module("YourAircraft", prompt="""
You are controlling a [Aircraft Name] in DCS World.
- Use [aircraft-specific terms] for [standard terms]
- [Aircraft] has [unique feature/behavior]
- Common pilot phrases: [natural language patterns]
""")

Conversation Context

The system maintains short conversation history, allowing natural follow-up commands:

  • "Turn on the battery" → "Now turn it back off"
  • "Set radio to 251.5" → "Change it to 252.0"
  • "Deploy flaps" → "Retract them"

No More Rigid Phrases

Instead of memorizing exact commands like "BATTERY MASTER SWITCH ON", pilots can use natural language:

  • "Battery on please"
  • "I need the battery master switch"
  • "Power up the electrical system"
  • "Give me battery power"

This approach dramatically reduces the learning curve and makes voice control feel natural and intuitive.

License

[To be determined]

Contributing

[To be determined]