client.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # -*- coding: utf-8 -*-
  2. """
  3. Client/Satellite-Konfiguration.
  4. """
  5. from dataclasses import dataclass, field
  6. @dataclass
  7. class ServerConnectionConfig:
  8. """Server-Verbindungs-Konfiguration."""
  9. host: str = "localhost"
  10. port: int = 2101
  11. reconnect_interval_seconds: float = 5.0
  12. connection_timeout_seconds: float = 10.0
  13. @dataclass
  14. class ClientAudioConfig:
  15. """Audio-Konfiguration für den Client."""
  16. # Sprach-Audio (Wakeword-Erkennung)
  17. sample_rate: int = 16000
  18. channels: int = 1
  19. bit_depth: int = 16
  20. # Musik-Wiedergabe (sollte mit Server übereinstimmen)
  21. music_sample_rate: int = 44100 # 44.1kHz - Standard für die meisten Geräte
  22. music_channels: int = 2
  23. music_bit_depth: int = 16
  24. # Geräte
  25. input_device: str | None = None
  26. output_device: str | None = None
  27. buffer_size: int = 1024
  28. @dataclass
  29. class ClientWakewordConfig:
  30. """Wakeword-Konfiguration für den Client."""
  31. models: list[str] = field(default_factory=lambda: ["custom", "system_command"])
  32. threshold: float = 0.5
  33. model_directory: str = "models/wakeword"
  34. use_onnx: bool = True
  35. enabled: bool = True
  36. silence_timeout_seconds: float = 3.0
  37. max_recording_seconds: float = 60.0
  38. no_speech_timeout_seconds: float = 5.0
  39. pre_buffer_seconds: float = 0.5
  40. wakeword_cooldown_seconds: float = 3.0
  41. @dataclass
  42. class SatelliteIdentityConfig:
  43. """Satelliten-Identität."""
  44. room: str = ""
  45. alias: str = ""
  46. mac_address: str = "" # Wird automatisch ermittelt wenn leer
  47. @dataclass
  48. class ClientLoggingConfig:
  49. """Logging-Konfiguration für den Client."""
  50. level: str = "INFO"
  51. log_directory: str = "logs"
  52. @dataclass
  53. class ClientConfig:
  54. """Haupt-Client-Konfiguration."""
  55. server: ServerConnectionConfig = field(default_factory=ServerConnectionConfig)
  56. audio: ClientAudioConfig = field(default_factory=ClientAudioConfig)
  57. wakeword: ClientWakewordConfig = field(default_factory=ClientWakewordConfig)
  58. identity: SatelliteIdentityConfig = field(default_factory=SatelliteIdentityConfig)
  59. logging: ClientLoggingConfig = field(default_factory=ClientLoggingConfig)
  60. config_port: int = 2105
  61. config_listener_enabled: bool = True
  62. assets_directory: str = "assets"
  63. profile: str = "default"