1 minute read

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.