static void Main(string[] args) { var instrumentFolders = Directory.GetDirectories(Directory.GetCurrentDirectory() + "/../../Samples"); Dictionary <String, List <String> > map = new Dictionary <string, List <string> >(); foreach (var folder in instrumentFolders) { var files = Directory.GetFiles(folder); for (int i = 0; i < instruments.Count; i++) { if (folder.Contains(instruments[i])) { map.Add(instruments[i], files.ToList()); } } } for (int i = 0; i < instruments.Count; i++) { var values = new List <double>(); for (int j = 0; j < instruments.Count; j++) { values.Add(0.1); } values[i] = 1; MarkedValues.Add(instruments[i], values); } network = new NeuroNetwork.NeuroNetwork(MarkedValues.Count, "weights"); player = new SoundPlayer(); player.FftCalculated += audioGraph_FFTCalculated; for (int i = 0; i < instruments.Count; i++) { for (int j = 0; j < map[instruments[i]].Count; j++) { player.Load(map[instruments[i]][j]); Console.WriteLine("Playing {0}", map[instruments[i]][j]); player.Play(); while (player.Status == "Playing") { } } } }
public static void Main(string[] args) { var pictureChooser = new PictureChooser(@"..\..\digits\"); var pictures = pictureChooser.Pictures; var names = new List <string> { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; var neuroNetwork = new NeuroNetwork(names, 30, 50); int i = 0; while (true) { Console.Clear(); Console.WriteLine(i++); var picturesList = pictures.ToList(); var rand = new Random(); var number = rand.Next(picturesList.Count); var picture = picturesList [number].Key; var name = picturesList [number].Value; int[,] input = picture.ToInput(); var neuroProb = neuroNetwork.Recognize(input); if (i < 2000) // Auto learning { bool isTrue = name.Equals(neuroProb.Key.Name); neuroProb.Key.Learn(isTrue, input); } else // Manual learning { ShowInput(input); Console.WriteLine("Probably, it is " + neuroProb.Key.Name); Console.WriteLine("Is it true?"); var key = Console.ReadKey(); if (key.Key == ConsoleKey.UpArrow) { neuroProb.Key.Learn(true, input); } else if (key.Key == ConsoleKey.DownArrow) { neuroProb.Key.Learn(false, input); } } } }
static void Main(string[] args) { var instrumentFolders = Directory.GetDirectories(Directory.GetCurrentDirectory() + "/../../Samples"); var player = new SoundPlayer(); player.FftCalculated += audioGraph_FFTCalculated; Dictionary <String, List <String> > map = new Dictionary <string, List <string> >(); foreach (var folder in instrumentFolders) { var files = Directory.GetFiles(folder); for (int i = 0; i < instruments.Count; i++) { if (folder.Contains(instruments[i])) { map.Add(instruments[i], files.ToList()); } } } for (int i = 0; i < instruments.Count; i++) { var values = new List <double>(); for (int j = 0; j < instruments.Count; j++) { values.Add(0.01); } values[i] = 1; MarkedValues.Add(instruments[i], values); } network = new NeuroNetwork.NeuroNetwork(MarkedValues.Count); var random = new Random(); int generationNumber = 0; for (int i = 0; i < instruments.Count; i++) { testMap.Add(instruments[i], new List <String>()); } int count = 0; for (int i = 0; i < instruments.Count; i++) { count += map[instruments[i]].Count / 2; } do { for (int i = 0; i < count; i++) { try { var instrumentNumber = (int)Math.Round(random.NextDouble() * (instruments.Count - 1)); currentInstrument = instruments[instrumentNumber]; var fileNumber = (int)Math.Round(random.NextDouble() * (map[currentInstrument].Count - 1)); player.Load(map[currentInstrument][fileNumber]); player.Play(); //Console.WriteLine("Playing {0}...", map[currentInstrument][j]); while (player.Status == "Playing") { } } catch (Exception) { continue; } } isTest = true; for (int i = 0; i < instruments.Count; i++) { testMap[instruments[i]].Clear(); } Console.WriteLine("Generation - {0}", generationNumber); generationNumber++; for (int i = 0; i < instruments.Count; i++) { currentInstrument = instruments[i]; var fileNumber = (int)Math.Round(random.NextDouble() * (map[currentInstrument].Count - 1)); player.Load(map[instruments[i]][fileNumber]); player.Play(); while (player.Status == "Playing") { } } isTest = false; isValid = true; for (int i = 0; i < instruments.Count; i++) { var valid = .0; for (int j = 0; j < testMap[instruments[i]].Count; j++) { if (testMap[instruments[i]][j] == instruments[i]) { valid++; } } isValid &= valid / testMap[instruments[i]].Count > 0.7; Console.WriteLine("{0} - {1}/{2}", instruments[i], valid, testMap[instruments[i]].Count); testMap[instruments[i]].Clear(); } }while (!isValid); //GC.KeepAlive(player); //GC.KeepAlive(player.fileStream); //GC.KeepAlive(player.waveOutDevice); network.SaveWeights("weights"); }