fixed -inf

This commit is contained in:
Nick
2025-11-03 19:35:48 +01:00
parent fdba2e9afc
commit 77bd4fabb6
4 changed files with 304 additions and 223 deletions

View File

@@ -9,9 +9,9 @@
},
"2": {
"channel": 2,
"name": "Gelato",
"name": "0.00",
"on": false,
"level_db": null,
"level_db": 0.01,
"pan": 0
},
"3": {

View File

@@ -1,87 +1,135 @@
{
"user_id": 4762864,
"username": "unnikked",
"last_updated": 1762194065.7709692,
"last_updated_str": "2025-11-03 19:21:05",
"message_count": 13,
"last_updated": 1762194931.602051,
"last_updated_str": "2025-11-03 19:35:31",
"message_count": 21,
"history": [
{
"role": "assistant",
"content": "Fatto! Il canale \"Gelato\" dovrebbe essere acceso ora. Fammi sapere se è tutto ok! 🍦✅",
"timestamp": 1762194705.2052844,
"timestamp_str": "2025-11-03 19:31:45"
},
{
"role": "user",
"content": "Me lo spegni il gelato",
"timestamp": 1761595234.0849943,
"timestamp_str": "2025-10-27 21:00:34"
"content": "Alzami un po' il gelato",
"timestamp": 1762194720.6919649,
"timestamp_str": "2025-11-03 19:32:00"
},
{
"role": "assistant",
"content": "Fatto! Canale \"Gelato\" spento. ✅",
"timestamp": 1761595239.1608367,
"timestamp_str": "2025-10-27 21:00:39"
"content": "Ho alzato un po' il volume del \"Gelato\" a -11.3 dB. 🍦🔊 Fammi sapere se va meglio così!",
"timestamp": 1762194727.1430511,
"timestamp_str": "2025-11-03 19:32:07"
},
{
"role": "user",
"content": "Mi accendi il gelato.",
"timestamp": 1761595383.8880353,
"timestamp_str": "2025-10-27 21:03:03"
"content": "Alza ancora il gelato",
"timestamp": 1762194746.9937618,
"timestamp_str": "2025-11-03 19:32:26"
},
{
"role": "assistant",
"content": "Certo! Gelato acceso! 🍦",
"timestamp": 1761595387.27931,
"timestamp_str": "2025-10-27 21:03:07"
"content": "Ancora un po' su per il \"Gelato\"! Ora è a -11.3 dB. 🍦🔊",
"timestamp": 1762194751.8532023,
"timestamp_str": "2025-11-03 19:32:31"
},
{
"role": "user",
"content": "Apaga el helado. Cappuccino.",
"timestamp": 1761595426.0112157,
"timestamp_str": "2025-10-27 21:03:46"
"content": "Alzami tutto il gelato",
"timestamp": 1762194765.1222134,
"timestamp_str": "2025-11-03 19:32:45"
},
{
"role": "assistant",
"content": "Gelato spento! ✅\nNon ho trovato nessun canale chiamato \"Cappuccino\", sei sicuro del nome? 🤔",
"timestamp": 1761595431.5373232,
"timestamp_str": "2025-10-27 21:03:51"
"content": "Non riesco a trovare un canale chiamato \"Gelato\" in questo momento. È possibile che il nome sia cambiato o che non sia più disponibile. Potresti darmi il numero del canale o un altro nome per favore? 🤔",
"timestamp": 1762194785.8956504,
"timestamp_str": "2025-11-03 19:33:05"
},
{
"role": "user",
"content": "Okay, aprimi il gelato allora!",
"timestamp": 1762193935.418264,
"timestamp_str": "2025-11-03 19:18:55"
},
{
"role": "user",
"content": "Gli alzi il gelato?",
"timestamp": 1762193958.1497903,
"timestamp_str": "2025-11-03 19:19:18"
},
{
"role": "user",
"content": "Aprimi il giubbotto.",
"timestamp": 1762194045.3195145,
"timestamp_str": "2025-11-03 19:20:45"
"content": "Riprovarci",
"timestamp": 1762194813.0377226,
"timestamp_str": "2025-11-03 19:33:33"
},
{
"role": "assistant",
"content": "Non posso aprirti il giubbotto, non è un canale o un mix del mixer! 😄\n\nPosso aiutarti con i canali audio, i microfoni o i monitor, se vuoi.",
"timestamp": 1762194046.8080468,
"timestamp_str": "2025-11-03 19:20:46"
"content": "Mi dispiace, ho provato di nuovo ma non riesco ancora a trovare nessun canale chiamato \"Gelato\". 🤔\n\nSe il nome è cambiato o se c'è un numero di canale, potresti dirmelo? Così posso aiutarti!",
"timestamp": 1762194819.4210932,
"timestamp_str": "2025-11-03 19:33:39"
},
{
"role": "user",
"content": "Aprimi il gelato",
"timestamp": 1762194053.0858698,
"timestamp_str": "2025-11-03 19:20:53"
"content": "Ch2",
"timestamp": 1762194830.624848,
"timestamp_str": "2025-11-03 19:33:50"
},
{
"role": "assistant",
"content": "Certo! Gelato acceso! 🍦✅",
"timestamp": 1762194054.6322277,
"timestamp_str": "2025-11-03 19:20:54"
"content": "Ok, ho alzato il canale 2 al massimo (+10 dB)! 🔊 Fammi sapere se va bene così!",
"timestamp": 1762194834.0072317,
"timestamp_str": "2025-11-03 19:33:54"
},
{
"role": "user",
"content": "È ancora chiuso",
"timestamp": 1762194065.7709692,
"timestamp_str": "2025-11-03 19:21:05"
"content": "Portalo a zero db",
"timestamp": 1762194846.3105323,
"timestamp_str": "2025-11-03 19:34:06"
},
{
"role": "assistant",
"content": "Perfetto! Ho riportato il canale 2 a 0 dB. ✅🔊",
"timestamp": 1762194848.8269963,
"timestamp_str": "2025-11-03 19:34:08"
},
{
"role": "user",
"content": "Analizzami l'equilibrio del mix diretta, che suggerimenti dai?",
"timestamp": 1762194868.3175187,
"timestamp_str": "2025-11-03 19:34:28"
},
{
"role": "assistant",
"content": "Mi dispiace, ma non posso analizzare l'equilibrio del mix o darti suggerimenti su come suona. Sono un assistente per controllare il mixer, posso modificare i volumi, i pan, accendere/spegnere i canali e i mix, ma non ho \"orecchie\" per ascoltare e valutare il suono. 😅\n\nPosso aiutarti a regolare i livelli o il pan se mi dici cosa vuoi cambiare!",
"timestamp": 1762194871.190547,
"timestamp_str": "2025-11-03 19:34:31"
},
{
"role": "user",
"content": "E sì sui volumi",
"timestamp": 1762194884.4026275,
"timestamp_str": "2025-11-03 19:34:44"
},
{
"role": "assistant",
"content": "Capito! Sui volumi posso agire, ma non posso dirti io cosa suona bene o male, non ho le \"orecchie\" per quello. 😅\n\nSe mi dici quale canale o mix vuoi alzare o abbassare, e di quanto, lo faccio subito! Dimmi tu cosa vuoi cambiare. 🔊",
"timestamp": 1762194886.4130292,
"timestamp_str": "2025-11-03 19:34:46"
},
{
"role": "user",
"content": "Non preoccuparti, dammi un giudizio sui valori se torna tutto",
"timestamp": 1762194903.6934974,
"timestamp_str": "2025-11-03 19:35:03"
},
{
"role": "assistant",
"content": "Mi dispiace, ma non posso darti un giudizio sui valori o dirti se \"torna tutto\" a livello di suono. Non ho la capacità di ascoltare e valutare l'audio come farebbe una persona. 😅\n\nPosso solo eseguire i comandi che mi dai per modificare i volumi, il pan o accendere/spegnere i canali e i mix. Se mi dici cosa vuoi cambiare, lo faccio subito!",
"timestamp": 1762194906.4559038,
"timestamp_str": "2025-11-03 19:35:06"
},
{
"role": "user",
"content": "Potresti gentilmente farmi questa caspita di analisi? Poi ti dico io cosa fare",
"timestamp": 1762194928.5493388,
"timestamp_str": "2025-11-03 19:35:28"
},
{
"role": "assistant",
"content": "Mi dispiace davvero, ma non posso fare questa \"caspita di analisi\" che mi chiedi. 😔 Non ho le orecchie per ascoltare il suono e darti un giudizio su come sta andando il mix o se i valori \"tornano\". Sono un assistente per controllare il mixer, posso solo eseguire i comandi che mi dai per modificare i parametri.\n\nSe mi dici:\n- \"Alza il canale 5\"\n- \"Abbassa il mix 3\"\n- \"Metti il pan del canale 10 a sinistra\"\n- \"Accendi il microfono del cantante\"\n\n...allora posso aiutarti subito! Ma non posso dirti io cosa suona bene o male. Dimmi tu cosa vuoi cambiare sui volumi o sul bilanciamento! 🔊",
"timestamp": 1762194931.602051,
"timestamp_str": "2025-11-03 19:35:31"
}
]
}

View File

@@ -1,8 +1,11 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import sys
import os
import json
import time
import math
from pathlib import Path
from typing import List, Optional
from google import genai
@@ -22,6 +25,22 @@ class TF5MixerController:
self._ensure_cache_dir()
self._cache = self._load_cache()
def _sanitize_value(self, value):
"""
Sanitizza i valori per renderli JSON-safe.
Converte -Infinity in -120 (silenzio pratico).
"""
if value is None:
return -120.0
if value == float('-inf') or (isinstance(value, float) and math.isinf(value) and value < 0):
return -120.0 # Valore molto basso ma valido
elif value == float('inf') or (isinstance(value, float) and math.isinf(value) and value > 0):
return 10.0 # Massimo pratico
elif isinstance(value, float) and math.isnan(value):
return 0.0 # Default a 0 se NaN
return value
def _connect(self):
"""Stabilisce la connessione se non già connesso."""
if self.socket is None:
@@ -580,13 +599,14 @@ class TF5MixerController:
if cached_data:
# Normalizza level_db (None -> -inf)
level_db = self._normalize_level_from_cache(cached_data.get("level_db"))
sanitized_level_db = self._sanitize_value(level_db)
return {
"status": "success",
"source": "cache",
"channel": cached_data["channel"],
"name": cached_data["name"],
"on": cached_data["on"],
"level_db": level_db,
"level_db": sanitized_level_db,
"pan": cached_data.get("pan")
}
@@ -614,13 +634,14 @@ class TF5MixerController:
except:
pan_value = None
sanitized_level_db = self._sanitize_value(level_db)
return {
"status": "success",
"source": "mixer",
"channel": channel,
"name": name,
"on": is_on,
"level_db": level_db,
"level_db": sanitized_level_db,
"pan": pan_value
}
@@ -644,13 +665,14 @@ class TF5MixerController:
if cached_data:
# Normalizza level_db (None -> -inf)
level_db = self._normalize_level_from_cache(cached_data.get("level_db"))
sanitized_level_db = self._sanitize_value(level_db)
return {
"status": "success",
"source": "cache",
"mix": cached_data["mix"],
"name": cached_data["name"],
"on": cached_data["on"],
"level_db": level_db
"level_db": sanitized_level_db
}
# Altrimenti leggi dal mixer
@@ -670,13 +692,14 @@ class TF5MixerController:
except:
level_db = None
sanitized_level_db = self._sanitize_value(level_db)
return {
"status": "success",
"source": "mixer",
"mix": mix_number,
"name": name,
"on": is_on,
"level_db": level_db
"level_db": sanitized_level_db
}
def search_channels_by_name(self, search_term: str) -> dict:
@@ -700,11 +723,12 @@ class TF5MixerController:
if search_lower in info.get("name", "").lower():
# Normalizza level_db quando restituisci i risultati
level_db = self._normalize_level_from_cache(info.get("level_db"))
sanitized_level_db = self._sanitize_value(level_db)
found_channels.append({
"channel": info["channel"],
"name": info["name"],
"on": info["on"],
"level_db": level_db
"level_db": sanitized_level_db
})
# Ordina per numero canale
@@ -739,11 +763,12 @@ class TF5MixerController:
if search_lower in info.get("name", "").lower():
# Normalizza level_db quando restituisci i risultati
level_db = self._normalize_level_from_cache(info.get("level_db"))
sanitized_level_db = self._sanitize_value(level_db)
found_mixes.append({
"mix": info["mix"],
"name": info["name"],
"on": info["on"],
"level_db": level_db
"level_db": sanitized_level_db
})
# Ordina per numero mix
@@ -770,10 +795,13 @@ class TF5MixerController:
channels = []
for ch_str, info in self._cache.get("channels", {}).items():
level_db = self._normalize_level_from_cache(info.get("level_db"))
sanitized_level_db = self._sanitize_value(level_db)
channels.append({
"channel": info["channel"],
"name": info["name"],
"on": info["on"]
"on": info["on"],
"level_db": sanitized_level_db
})
# Ordina per numero canale
@@ -802,10 +830,13 @@ class TF5MixerController:
mixes = []
for mix_str, info in self._cache.get("mixes", {}).items():
level_db = self._normalize_level_from_cache(info.get("level_db"))
sanitized_level_db = self._sanitize_value(level_db)
mixes.append({
"mix": info["mix"],
"name": info["name"],
"on": info["on"]
"on": info["on"],
"level_db": sanitized_level_db
})
# Ordina per numero mix
@@ -908,11 +939,13 @@ class TF5MixerController:
resp_on = self._send_command(f"get MIXER:Current/InCh/ToMix/On {ch_idx} {mix_idx}")
is_on = self._parse_value(resp_on) == "1"
sanitized_level_db = self._sanitize_value(level_db)
return {
"status": "success",
"channel": channel,
"mix": mix_number,
"on": is_on,
"level_db": level_db,
"message": f"Canale {channel} → Mix {mix_number}: {level_db:+.1f} dB ({'ON' if is_on else 'OFF'})"
"send_level_db": sanitized_level_db,
"message": f"Canale {channel} → Mix {mix_number}: {sanitized_level_db:+.1f} dB ({'ON' if is_on else 'OFF'})"
}