config.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. # -*- coding: utf-8 -*-
  2. """
  3. Audio-Konfiguration.
  4. Zentraler Zugriff auf Audio-Einstellungen für Plugins.
  5. """
  6. from dataclasses import dataclass
  7. from typing import TYPE_CHECKING
  8. from trixy_core.audio.processing.context import AudioType, AudioFormatInfo
  9. if TYPE_CHECKING:
  10. from trixy_core.application import IApplication
  11. @dataclass
  12. class AudioSettings:
  13. """
  14. Zentrale Audio-Einstellungen.
  15. Wird von Plugins genutzt um die korrekten Formate zu kennen.
  16. """
  17. # TTS-Einstellungen
  18. tts_sample_rate: int = 22050
  19. tts_channels: int = 1
  20. tts_bit_depth: int = 16
  21. # Asset-Einstellungen (Sound-Effekte)
  22. asset_sample_rate: int = 44100
  23. asset_channels: int = 2
  24. asset_bit_depth: int = 16
  25. # Musik-Einstellungen
  26. music_sample_rate: int = 44100
  27. music_channels: int = 2
  28. music_bit_depth: int = 16
  29. def get_format(self, audio_type: AudioType) -> AudioFormatInfo:
  30. """
  31. Gibt das Format für einen Audio-Typ zurück.
  32. Args:
  33. audio_type: Der Audio-Typ
  34. Returns:
  35. Audio-Format-Informationen
  36. """
  37. if audio_type == AudioType.TTS:
  38. return AudioFormatInfo(
  39. sample_rate=self.tts_sample_rate,
  40. channels=self.tts_channels,
  41. bit_depth=self.tts_bit_depth,
  42. )
  43. elif audio_type == AudioType.ASSET:
  44. return AudioFormatInfo(
  45. sample_rate=self.asset_sample_rate,
  46. channels=self.asset_channels,
  47. bit_depth=self.asset_bit_depth,
  48. )
  49. elif audio_type == AudioType.MUSIC:
  50. return AudioFormatInfo(
  51. sample_rate=self.music_sample_rate,
  52. channels=self.music_channels,
  53. bit_depth=self.music_bit_depth,
  54. )
  55. else:
  56. # Default: Musik-Format
  57. return AudioFormatInfo(
  58. sample_rate=self.music_sample_rate,
  59. channels=self.music_channels,
  60. bit_depth=self.music_bit_depth,
  61. )
  62. # Globale Instanz (wird bei Application-Start gesetzt)
  63. _audio_settings: AudioSettings | None = None
  64. def get_audio_settings() -> AudioSettings:
  65. """
  66. Gibt die globalen Audio-Einstellungen zurück.
  67. Returns:
  68. AudioSettings-Instanz
  69. Raises:
  70. RuntimeError: Wenn die Einstellungen noch nicht initialisiert wurden
  71. """
  72. global _audio_settings
  73. if _audio_settings is None:
  74. # Fallback auf Defaults
  75. _audio_settings = AudioSettings()
  76. return _audio_settings
  77. def set_audio_settings(settings: AudioSettings) -> None:
  78. """
  79. Setzt die globalen Audio-Einstellungen.
  80. Wird beim Application-Start aufgerufen.
  81. Args:
  82. settings: Die Audio-Einstellungen
  83. """
  84. global _audio_settings
  85. _audio_settings = settings
  86. def init_audio_settings_from_config(config) -> AudioSettings:
  87. """
  88. Initialisiert Audio-Einstellungen aus einer Config.
  89. Args:
  90. config: Server-, Client- oder Standalone-Config
  91. Returns:
  92. AudioSettings-Instanz
  93. """
  94. settings = AudioSettings()
  95. # Audio-Config aus verschiedenen Config-Typen extrahieren
  96. audio_config = getattr(config, 'audio', None)
  97. if audio_config:
  98. # TTS (Standard: 22050 Hz Mono)
  99. settings.tts_sample_rate = getattr(audio_config, 'sample_rate', 22050)
  100. settings.tts_channels = 1 # TTS ist immer Mono
  101. settings.tts_bit_depth = getattr(audio_config, 'bit_depth', 16)
  102. # Musik
  103. settings.music_sample_rate = getattr(audio_config, 'music_sample_rate', 44100)
  104. settings.music_channels = getattr(audio_config, 'music_channels', 2)
  105. settings.music_bit_depth = getattr(audio_config, 'music_bit_depth', 16)
  106. # Assets (gleich wie Musik)
  107. settings.asset_sample_rate = settings.music_sample_rate
  108. settings.asset_channels = settings.music_channels
  109. settings.asset_bit_depth = settings.music_bit_depth
  110. set_audio_settings(settings)
  111. return settings
  112. def get_format_for_type(audio_type: AudioType) -> AudioFormatInfo:
  113. """
  114. Shortcut: Gibt das Format für einen Audio-Typ zurück.
  115. Args:
  116. audio_type: Der Audio-Typ
  117. Returns:
  118. Audio-Format-Informationen
  119. """
  120. return get_audio_settings().get_format(audio_type)