analizza mix

This commit is contained in:
Nick
2025-11-03 20:10:10 +01:00
parent 77bd4fabb6
commit 86fa13a1a0
5 changed files with 180 additions and 93 deletions

View File

@@ -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."
}