| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- # -*- coding: utf-8 -*-
- """
- Audio-Konfiguration.
- Zentraler Zugriff auf Audio-Einstellungen für Plugins.
- """
- from dataclasses import dataclass
- from typing import TYPE_CHECKING
- from trixy_core.audio.processing.context import AudioType, AudioFormatInfo
- if TYPE_CHECKING:
- from trixy_core.application import IApplication
- @dataclass
- class AudioSettings:
- """
- Zentrale Audio-Einstellungen.
- Wird von Plugins genutzt um die korrekten Formate zu kennen.
- """
- # TTS-Einstellungen
- tts_sample_rate: int = 22050
- tts_channels: int = 1
- tts_bit_depth: int = 16
- # Asset-Einstellungen (Sound-Effekte)
- asset_sample_rate: int = 44100
- asset_channels: int = 2
- asset_bit_depth: int = 16
- # Musik-Einstellungen
- music_sample_rate: int = 44100
- music_channels: int = 2
- music_bit_depth: int = 16
- def get_format(self, audio_type: AudioType) -> AudioFormatInfo:
- """
- Gibt das Format für einen Audio-Typ zurück.
- Args:
- audio_type: Der Audio-Typ
- Returns:
- Audio-Format-Informationen
- """
- if audio_type == AudioType.TTS:
- return AudioFormatInfo(
- sample_rate=self.tts_sample_rate,
- channels=self.tts_channels,
- bit_depth=self.tts_bit_depth,
- )
- elif audio_type == AudioType.ASSET:
- return AudioFormatInfo(
- sample_rate=self.asset_sample_rate,
- channels=self.asset_channels,
- bit_depth=self.asset_bit_depth,
- )
- elif audio_type == AudioType.MUSIC:
- return AudioFormatInfo(
- sample_rate=self.music_sample_rate,
- channels=self.music_channels,
- bit_depth=self.music_bit_depth,
- )
- else:
- # Default: Musik-Format
- return AudioFormatInfo(
- sample_rate=self.music_sample_rate,
- channels=self.music_channels,
- bit_depth=self.music_bit_depth,
- )
- # Globale Instanz (wird bei Application-Start gesetzt)
- _audio_settings: AudioSettings | None = None
- def get_audio_settings() -> AudioSettings:
- """
- Gibt die globalen Audio-Einstellungen zurück.
- Returns:
- AudioSettings-Instanz
- Raises:
- RuntimeError: Wenn die Einstellungen noch nicht initialisiert wurden
- """
- global _audio_settings
- if _audio_settings is None:
- # Fallback auf Defaults
- _audio_settings = AudioSettings()
- return _audio_settings
- def set_audio_settings(settings: AudioSettings) -> None:
- """
- Setzt die globalen Audio-Einstellungen.
- Wird beim Application-Start aufgerufen.
- Args:
- settings: Die Audio-Einstellungen
- """
- global _audio_settings
- _audio_settings = settings
- def init_audio_settings_from_config(config) -> AudioSettings:
- """
- Initialisiert Audio-Einstellungen aus einer Config.
- Args:
- config: Server-, Client- oder Standalone-Config
- Returns:
- AudioSettings-Instanz
- """
- settings = AudioSettings()
- # Audio-Config aus verschiedenen Config-Typen extrahieren
- audio_config = getattr(config, 'audio', None)
- if audio_config:
- # TTS (Standard: 22050 Hz Mono)
- settings.tts_sample_rate = getattr(audio_config, 'sample_rate', 22050)
- settings.tts_channels = 1 # TTS ist immer Mono
- settings.tts_bit_depth = getattr(audio_config, 'bit_depth', 16)
- # Musik
- settings.music_sample_rate = getattr(audio_config, 'music_sample_rate', 44100)
- settings.music_channels = getattr(audio_config, 'music_channels', 2)
- settings.music_bit_depth = getattr(audio_config, 'music_bit_depth', 16)
- # Assets (gleich wie Musik)
- settings.asset_sample_rate = settings.music_sample_rate
- settings.asset_channels = settings.music_channels
- settings.asset_bit_depth = settings.music_bit_depth
- set_audio_settings(settings)
- return settings
- def get_format_for_type(audio_type: AudioType) -> AudioFormatInfo:
- """
- Shortcut: Gibt das Format für einen Audio-Typ zurück.
- Args:
- audio_type: Der Audio-Typ
- Returns:
- Audio-Format-Informationen
- """
- return get_audio_settings().get_format(audio_type)
|