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(); } } }
/// <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; }
/// <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(); } }