Пример #1
0
        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")
                    {
                    }
                }
            }
        }
Пример #2
0
        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);
                    }
                }
            }
        }
Пример #3
0
        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");
        }