added mix control

This commit is contained in:
Nick
2025-10-27 20:35:32 +01:00
parent d3d9a8dbbb
commit 6780eb2ecb
4 changed files with 108 additions and 4 deletions

View File

@@ -37,10 +37,10 @@
},
"6": {
"channel": 6,
"name": "Vox2",
"on": true,
"level_db": -1.1,
"pan": 0
"name": "ON",
"on": false,
"level_db": 0.01,
"pan": 200
},
"7": {
"channel": 7,

View File

@@ -819,4 +819,100 @@ class TF5MixerController:
"mixes": mixes,
"cache_age_seconds": int(cache_age),
"message": f"Riepilogo di {len(mixes)} mix (cache: {int(cache_age)}s fa)"
}
def set_channel_to_mix_level(self, channel: int, mix_number: int, level_db: float) -> dict:
"""Imposta il livello di invio di un canale verso un mix/aux.
Args:
channel: Numero del canale (1-40)
mix_number: Numero del mix (1-20)
level_db: Livello in dB (da -inf a +10.0)
Returns:
Un dizionario con lo stato dell'operazione
"""
if not 1 <= channel <= TF5_INPUT_CHANNELS:
return {"status": "error", "message": f"Il canale deve essere tra 1 e {TF5_INPUT_CHANNELS}"}
if not 1 <= mix_number <= TF5_MIX_BUSSES:
return {"status": "error", "message": f"Il mix deve essere tra 1 e {TF5_MIX_BUSSES}"}
if level_db <= -138:
internal_value = -32768
else:
internal_value = int(level_db * 100)
command = f"set MIXER:Current/InCh/ToMix/Level {channel-1} {mix_number-1} {internal_value}"
response = self._send_command(command)
return {
"status": "success" if "OK" in response else "error",
"message": f"Canale {channel} → Mix {mix_number} impostato a {level_db:+.1f} dB",
"response": response
}
def set_channel_to_mix_on_off(self, channel: int, mix_number: int, state: bool) -> dict:
"""Accende o spegne l'invio di un canale verso un mix/aux.
Args:
channel: Numero del canale (1-40)
mix_number: Numero del mix (1-20)
state: True per accendere, False per spegnere
Returns:
Un dizionario con lo stato dell'operazione
"""
if not 1 <= channel <= TF5_INPUT_CHANNELS:
return {"status": "error", "message": f"Il canale deve essere tra 1 e {TF5_INPUT_CHANNELS}"}
if not 1 <= mix_number <= TF5_MIX_BUSSES:
return {"status": "error", "message": f"Il mix deve essere tra 1 e {TF5_MIX_BUSSES}"}
value = 1 if state else 0
command = f"set MIXER:Current/InCh/ToMix/On {channel-1} {mix_number-1} {value}"
response = self._send_command(command)
return {
"status": "success" if "OK" in response else "error",
"message": f"Invio canale {channel} → Mix {mix_number} {'acceso' if state else 'spento'}",
"response": response
}
def get_channel_to_mix_info(self, channel: int, mix_number: int) -> dict:
"""Legge le informazioni dell'invio di un canale verso un mix.
Args:
channel: Numero del canale (1-40)
mix_number: Numero del mix (1-20)
Returns:
Un dizionario con le informazioni del send
"""
if not 1 <= channel <= TF5_INPUT_CHANNELS:
return {"status": "error", "message": f"Il canale deve essere tra 1 e {TF5_INPUT_CHANNELS}"}
if not 1 <= mix_number <= TF5_MIX_BUSSES:
return {"status": "error", "message": f"Il mix deve essere tra 1 e {TF5_MIX_BUSSES}"}
ch_idx = channel - 1
mix_idx = mix_number - 1
# Leggi livello
resp_level = self._send_command(f"get MIXER:Current/InCh/ToMix/Level {ch_idx} {mix_idx}")
level_raw = self._parse_value(resp_level)
try:
level_int = int(level_raw)
level_db = level_int / 100.0 if level_int > -32768 else float('-inf')
except:
level_db = None
# Leggi stato ON/OFF
resp_on = self._send_command(f"get MIXER:Current/InCh/ToMix/On {ch_idx} {mix_idx}")
is_on = self._parse_value(resp_on) == "1"
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'})"
}

View File

@@ -129,6 +129,9 @@ class TF5TelegramBot:
self.controller.get_all_channels_summary,
self.controller.get_all_mixes_summary,
self.controller.refresh_cache,
self.controller.set_channel_to_mix_level,
self.controller.set_channel_to_mix_on_off,
self.controller.get_channel_to_mix_info,
],
temperature=0,
)
@@ -185,6 +188,11 @@ IDENTIFICAZIONE CANALI E MIX:
- "tutti i mic/tutte le chitarre" → cerca e gestisci multipli
- "il monitor" / "l'aux 2" → cerca tra i mix
SEND AI MIX/AUX:
- "alza il gelato nell'aux 2" → usa set_channel_to_mix_level
- "manda più chitarra nel monitor" → aumenta il send
- "togli la voce dal mix 3" → spegni il send o abbassa molto
SCENE:
- "carica/richiama/vai alla scena X" → recall_scene
- Accetta "A5", "scena A 5", "la cinque del banco A", ecc.