analizza mix
This commit is contained in:
@@ -248,19 +248,23 @@ class TF5MixerController:
|
||||
self._save_cache()
|
||||
|
||||
def _parse_name(self, response: str) -> str:
|
||||
"""Estrae il nome tra virgolette dalla risposta."""
|
||||
"""Estrae il nome tra virgolette dalla prima riga della risposta."""
|
||||
try:
|
||||
start = response.find('"') + 1
|
||||
end = response.rfind('"')
|
||||
# Considera solo la prima riga per evitare di includere notifiche successive
|
||||
first_line = response.split('\n')[0]
|
||||
start = first_line.find('"') + 1
|
||||
end = first_line.rfind('"')
|
||||
if start > 0 and end > start:
|
||||
return response[start:end]
|
||||
return first_line[start:end]
|
||||
return "Sconosciuto"
|
||||
except:
|
||||
return "Errore"
|
||||
|
||||
def _parse_value(self, response: str) -> str:
|
||||
"""Estrae l'ultimo valore da una risposta OK."""
|
||||
parts = response.split()
|
||||
"""Estrae l'ultimo valore dalla prima riga di una risposta OK."""
|
||||
# Considera solo la prima riga per evitare notifiche successive
|
||||
first_line = response.split('\n')[0]
|
||||
parts = first_line.split()
|
||||
if len(parts) > 0 and parts[0] == "OK":
|
||||
return parts[-1]
|
||||
return "N/A"
|
||||
@@ -949,3 +953,54 @@ class TF5MixerController:
|
||||
"send_level_db": sanitized_level_db,
|
||||
"message": f"Canale {channel} → Mix {mix_number}: {sanitized_level_db:+.1f} dB ({'ON' if is_on else 'OFF'})"
|
||||
}
|
||||
|
||||
def get_full_mix_details(self, mix_number: int) -> dict:
|
||||
"""
|
||||
Raccoglie informazioni complete su un mix, inclusi tutti i canali inviati ad esso.
|
||||
Questa funzione è fondamentale per l'analisi del mix.
|
||||
|
||||
Args:
|
||||
mix_number: Numero del mix (1-20)
|
||||
|
||||
Returns:
|
||||
Un dizionario con i dettagli del mix e una lista dei canali inviati.
|
||||
"""
|
||||
if not 1 <= mix_number <= TF5_MIX_BUSSES:
|
||||
return {"status": "error", "message": f"Il mix deve essere tra 1 e {TF5_MIX_BUSSES}"}
|
||||
|
||||
# Aggiorna la cache se non è valida per avere i nomi dei canali
|
||||
if not self._is_cache_valid():
|
||||
self.refresh_cache()
|
||||
|
||||
# Ottieni le info principali del mix
|
||||
mix_info = self.get_mix_info(mix_number)
|
||||
if mix_info["status"] != "success":
|
||||
return mix_info
|
||||
|
||||
sends = []
|
||||
# Itera su tutti i canali di input per vedere cosa mandano a questo mix
|
||||
for channel in range(1, TF5_INPUT_CHANNELS + 1):
|
||||
send_info = self.get_channel_to_mix_info(channel, mix_number)
|
||||
|
||||
# Aggiungi solo i canali che sono effettivamente inviati al mix
|
||||
if send_info["status"] == "success" and send_info["send_level_db"] > -120.0:
|
||||
# Recupera le info principali del canale dalla cache per efficienza
|
||||
channel_cache = self._cache.get("channels", {}).get(str(channel), {})
|
||||
|
||||
sends.append({
|
||||
"channel": channel,
|
||||
"channel_name": channel_cache.get("name", "Sconosciuto"),
|
||||
"channel_is_on": channel_cache.get("on", False),
|
||||
"send_level_db": send_info["send_level_db"],
|
||||
"send_is_on": send_info["on"]
|
||||
})
|
||||
|
||||
# Ordina i canali dal più forte al più debole per facilitare l'analisi
|
||||
sends.sort(key=lambda x: x["send_level_db"], reverse=True)
|
||||
|
||||
return {
|
||||
"status": "success",
|
||||
"mix_details": mix_info,
|
||||
"active_sends": sends,
|
||||
"message": f"Dettagli completi per il Mix {mix_number} recuperati."
|
||||
}
|
||||
Reference in New Issue
Block a user