Rimodellati vari metodi di comportamento. Quasi allo spazio
Riporto gli appunti e le considerazioni fatte nel processo di lavoro senza alterare l’autenticità del diario.
Aggiunto dimensioni al dizionario globale. Per ora liste con numeri di test.
"dimensioni":{
"frequenze": [0],
"durate": [1],
"ampiezze": [2]
},
Classe Spazio allo stato embrionale.
class Spazio:
def __init__(self, dizionario):
self.frequenze = dizionario.get("frequenze", [])
self.durate = dizionario.get("durate", [])
self.ampiezze = dizionario.get("ampiezze", [])
In Sezione su creaEventi passo lo Spazio
def creaEventi(self):
for c in self.comportamenti:
c.creaEventoSonoro(self.spazio)
Funzione aggiornata della classe Comportamento.
def calcolaPfield(self):
# Ciclo attraverso gli attributi dinamici che iniziano con "pfield"
for i in range(4, len(self.lista_tuples[2:]) + 2): # Iniziamo da 3 per "pfield3"
pfield_attr = f"pfield{i-1}"
# Verifica se l'attributo esiste
if hasattr(self, pfield_attr):
# Recupera l'espressione come stringa o valore dall'attributo
raw_value = getattr(self, self.lista_tuples[i][0])
try:
# Valuta il valore se è una stringa, altrimenti usa direttamente l'oggetto
evaluated_value = eval(raw_value) if isinstance(raw_value, str) else raw_value
# Se è una classe, crea un'istanza passando i valori richiesti
if callable(evaluated_value):
# Supponendo che i parametri richiesti siano, ad esempio, `self.pfield2`
instanceFunc = evaluated_value(1,1,100,100) # Passa i valori come richiesto dalla classe
funzione = instanceFunc.crea_funzione()
except Exception as e:
raise ValueError(f"Errore nel creare un'istanza da {raw_value}: {e}")
cycled_ritmo = cycle(self.ritmo)
# Usa la lunghezza di pfield2 per il ciclo
for _ in range(len(self.pfield2)):
# Assegna i valori dinamicamente
if isinstance(instanceFunc, Funzione):
valore = funzione(next(cycled_ritmo))
print(valore)
else:
valore = instanceFunc
getattr(self, pfield_attr).append(valore)
Rimodellato creaEventoSonoro che popola dinamicamente il dizionario di ciascun EventoSonoro.
def creaEventoSonoro(self,spazio):
self.spazio = spazio
self.calcolaPfield2()
self.calcolaPfield()
# Cicliamo per ogni evento che dobbiamo creare
for i in range(len(self.pfield2)):
indice_ritmo = next((i for i, (chiave, _) in enumerate(self.lista_tuples) if chiave == "ritmo"), -1)
dictEvento = {
("attacco" if self.lista_tuples[j][0] == "ritmo" else self.lista_tuples[j][0]): getattr(self, f"pfield{j-1}")[i]
for j in range(indice_ritmo, len(self.lista_tuples))
if hasattr(self, f"pfield{j-1}")
}
dictEvento["idEventoSonoro"] = i
self.eventiSonori.append(EventoSonoro(dictEvento))
E questa è la versione del reporitory allo stato di lavoro del diario.