예제 #1
0
    void FixedUpdate()
    {
        if (currSceneEnum == SceneEnum.PlayScene)
        {
            if (isActive)
            {
                // Aggiorna array delle features currentFeatures in modo tale che venga calcolata la nota giusta ad ogni update
                current_Features = TestingScript.GetCurrentFeatures();

                //salva la nota che si stava suonando nell'update precedente prima di calcolare la nuova nota
                indexPreviousNote = indexPlayingNote;                                       //  Salva in memoria l'indice dell'ultima nota suonata
                indexPlayingNote  = TestML.ReteNeurale(current_Features);                   //  Rappresenta la nota che deve essere suonata

                ChangeColor(indexPreviousNote, indexPlayingNote);                           //  Cambia il colore del tasto sulla tastiera corrispondente alla nota che si sta suonando
            }


            if (!isActive)
            {
                ResetColorNotes();                                                          //  Ripristina i colori delle note al default
            }
        }

        if (currSceneEnum == SceneEnum.TrainingScene)
        {
            //  Avvia l'animazione di caricamento se necessario
            if (LoadingCircle.activeSelf)
            {
                StartCircleAnimation();
            }
        }
    }
예제 #2
0
    /// <summary>
    /// Apre un pannello per selezionare la configurazione (ed il dataset) da utilizzare nella cartella MyDataset
    /// </summary>
    public static void OpenPanel()
    {
        //  Naviga fino alla cartella contenente tutti i datasets
        var tmp = FileUtils.GeneratePath().Split('/').ToList();

        tmp.Remove(tmp.Last());
        tmp.Remove(tmp.Last());

        var tmp_path = "";

        foreach (var item in tmp)
        {
            tmp_path += item + '/';
        }

        //  Apre il pannello
        var paths = StandaloneFileBrowser.OpenFolderPanel("Change Dataset", tmp_path, false);

        if (paths.Length > 0)
        {
            var path = paths.Last().Split('\\').ToList().Last();

            if (path.Length != 0)
            {
                FileUtils.selectedDataset = paths.Last().Split('\\').ToList().Last();

                //Popola matrici della rete neurale con la nuova configurazione
                TestML.Populate();
            }
        }

        //  Controlla l'esistenza dei file necessari per suonare
        FileUtils.CheckForDefaultFiles();
    }
    /// <summary>
    /// Aggiunge nella matrice di confusione la previsione effettuata.
    /// </summary>
    private void DataSelector()
    {
        var features = TestingScript.GetCurrentFeatures();

        var predicted = TestML.ReteNeurale(features);

        TestingList[currentNoteId, predicted] += 1;
    }
예제 #4
0
    /// <summary>
    /// Chiamato quando viene inizializzato un oggetto contenente lo script _GM.cs
    /// </summary>
    private void Awake()
    {
        /*
         * In unity, possono essere caricati nella build solo determinati tipi di file. File .txt vengono copiati all'interno della cartella
         * della build.
         * In questo modo riusciamo ad avere lo script .py (che in questo momento è un file .txt) all'interno della build.
         * Dunque, leggiamo il file .txt dalla cartella Resources, e usaando il metodo SavePy, salviamo lo script letto dal file .txt
         * in un file ad estensione .py. Questo file potrà poi essere lanciato su linea di comando.
         */

        string nameFile = "ML";                                           //  Nome dello script python.
        var    MLFile   = Resources.Load <TextAsset>("Text/" + nameFile); //  Carica lo script dalla cartella Resources di Unity(file .txt)

        FileUtils.SavePy(MLFile.bytes, MLFile.name);                      //  Converte il file .txt in script .py

        currentScene = SceneManager.GetActiveScene();                     //  Prende la scena correntemente attiva


        switch (currentScene.buildIndex)
        {
        case (0):
            currSceneEnum = SceneEnum.Mainpage;
            break;

        case (1):
            currSceneEnum = SceneEnum.PlayScene;
            break;

        case (2):
            currSceneEnum = SceneEnum.TrainingScene;
            break;

        case (3):
            currSceneEnum = SceneEnum.TestingScene;
            break;
        }

        //  Caso in cui la scena corrente è la scena mainpage(Mainpage)
        if (currSceneEnum == SceneEnum.Mainpage)
        {
        }

        //  Caso in cui la scena corrente è la scena per suonare (PlayScene)
        if (currSceneEnum == SceneEnum.PlayScene)
        {
            TestML.Populate();                                              //  Effettua il caricamento dei file necessari per la scena PlayScene
        }

        // Se la scena corrente è la scena di training (TrainingScene)
        if (currSceneEnum == SceneEnum.TrainingScene)
        {
            if (TestML.Populate())                                          //  Restituisce true se trova i file weights.txt e bias.txt
            {
                SetLearnStatus(true);                                       //  Segnala che è stato effettuato il Learning sul dataset selezionato
                UpdateLatestLearningDate();                                 //  Aggiorna il testo contente la data dell'ultimo training effettuato sul dataset selezionato
            }
            else
            {
                SetLearnStatus(false);                                      //  Segnala che non è stato effettuato il trianing sul dataset selezionato
            }
        }

        // Se la scena corrente è la scena di testing (TestingScene)
        if (currSceneEnum == SceneEnum.TestingScene)
        {
            TestML.Populate();
        }
    }