Exemplo n.º 1
0
        private void buttonAddMffc_Click(object sender, EventArgs e)
        {
            OpenFileDialog    openFileDialog = new OpenFileDialog();    //экземпляр класса OpenFileDialog
            SoundToAmplitudes Amplitude      = new SoundToAmplitudes(); //экземпляр класса SoundToAmplitudes

            string[]       args;
            Transformation converting = new Transformation();

            openFileDialog.Filter = "wav files (*.wav)|*.wav";

            int index = Convert.ToInt32(textBoxAddMffc.Text);

            if (openFileDialog.ShowDialog() == DialogResult.OK)  // Or this; I was just being thorough.
            {
                var soundFile = new FileInfo(openFileDialog.FileName);
                args = new[] { Convert.ToString(soundFile) };
                Amplitude.Sound(args);
            }

            SimpleDFT Furier = new SimpleDFT(); //экземпляр класса SimpleDFT

            //отправляем массив коммплексных чисел
            Complex[]   massForFurier = Furier.FFT(converting.normalizationWoH(Amplitude.list));
            mfcc        MFCC          = new mfcc();//экземпляр класса
            kmeans      average_k     = new kmeans();
            emotionsDAL data          = new emotionsDAL();

            double[] mass_mfcc = MFCC.MFCC_20_calculation(converting.transformationToMell(massForFurier));

            for (int i = 0; i < mass_mfcc.Length; i++)
            {
                sum = sum + mass_mfcc[i];
            }

            voice = String.Join(" ", mass_mfcc);

            double[] m = average_k.kAverage(mass_mfcc);
            for (int i = 0; i < m.Length; i++)
            {
                summa = summa + m[i];
            }
            string downMass = "";

            downMass = String.Join(" ", m);

            //включаем бд
            data.OpenConnection(ConnectionString);
            //обновление усредненных mffc

            data.insertMFFC(downMass, Convert.ToString(sum), index);
            //добавление усредненных mffc
            data.insertK_average(downMass, Convert.ToString(summa), index);
            //закрытие бд
            data.CloseConnection();
        }
Exemplo n.º 2
0
        //загрузка аудиофайла и дальнейшие распознавание
        private void buttonDownload_Click(object sender, EventArgs e)
        {
            //OpenFileDialog openFileDialog = new OpenFileDialog();//экземпляр класса OpenFileDialog

            string[]       args;
            Transformation converting = new Transformation();

            openFileDialog.Filter = "wav files (*.wav)|*.wav";

            if (openFileDialog.ShowDialog() == DialogResult.OK)  // Or this; I was just being thorough.
            {
                var soundFile = new FileInfo(openFileDialog.FileName);
                args = new[] { Convert.ToString(soundFile) };
                Amplitude.Sound(args);
            }

            SimpleDFT Furier = new SimpleDFT(); //экземпляр класса SimpleDFT

            //отправляем массив коммплексных чисел
            Complex[] massForFurier = Furier.FFT(converting.normalizationWoH(Amplitude.list));
            mfcc      MFCC          = new mfcc();//экземпляр класса

            double[] mass_mfcc = MFCC.MFCC_20_calculation(converting.transformationToMell(massForFurier));

            for (int i = 0; i < mass_mfcc.Length; i++)
            {
                sum = sum + mass_mfcc[i];
            }

            voice = String.Join(" ", mass_mfcc);

            List <double> compareEmotion = new List <double>();
            List <string> emotion        = new List <string>();

            using (SqlConnection cn = new SqlConnection())
            {
                cn.ConnectionString = @"Data Source = LAPTOP-OE4CANNK; Initial Catalog = emotions; Integrated Security = True";
                cn.Open();
                // Создание объекта команды с помощью конструктора
                string        strSQL    = "Select * From mffc";
                SqlCommand    myCommand = new SqlCommand(strSQL, cn);
                SqlDataReader dr        = myCommand.ExecuteReader();
                while (dr.Read())
                {
                    //добавление коэффициентов из бд в список
                    emotion.Add(Convert.ToString(dr[1]));
                }
                cn.Close();
            }

            double[] sadFemale     = emotion[0].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(num => double.Parse(num)).ToArray();
            double[] happyFemale   = emotion[1].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(num => double.Parse(num)).ToArray();
            double[] evilFemale    = emotion[2].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(num => double.Parse(num)).ToArray();
            double[] supriseFemale = emotion[3].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(num => double.Parse(num)).ToArray();

            double[] sadMale     = emotion[4].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(num => double.Parse(num)).ToArray();
            double[] happyMale   = emotion[5].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(num => double.Parse(num)).ToArray();
            double[] evilMale    = emotion[6].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(num => double.Parse(num)).ToArray();
            double[] supriseMale = emotion[7].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(num => double.Parse(num)).ToArray();

            double koef = 0;

            for (int i = 0; i < mass_mfcc.Length; i++)
            {
                koef += (mass_mfcc[i] - happyFemale[i]);
            }

            compareEmotion.Add(koef);
            koef = 0;

            for (int i = 0; i < mass_mfcc.Length; i++)
            {
                koef += (mass_mfcc[i] - evilFemale[i]);
            }

            compareEmotion.Add(koef);
            koef = 0;

            for (int i = 0; i < mass_mfcc.Length; i++)
            {
                koef += (mass_mfcc[i] - supriseFemale[i]);
            }

            compareEmotion.Add(koef);
            koef = 0;

            for (int i = 0; i < mass_mfcc.Length; i++)
            {
                koef += (mass_mfcc[i] - sadMale[i]);
            }

            compareEmotion.Add(koef);
            koef = 0;
            for (int i = 0; i < mass_mfcc.Length; i++)
            {
                koef += (mass_mfcc[i] - happyMale[i]);
            }

            compareEmotion.Add(koef);
            koef = 0;
            for (int i = 0; i < mass_mfcc.Length; i++)
            {
                koef += (mass_mfcc[i] - evilMale[i]);
            }

            compareEmotion.Add(koef);
            koef = 0;

            for (int i = 0; i < mass_mfcc.Length; i++)
            {
                koef += (mass_mfcc[i] - supriseMale[i]);
            }

            compareEmotion.Add(koef);

            double minEmote = compareEmotion[0];

            //нахождение минимальной разницы
            foreach (double val in compareEmotion)
            {
                if (val < minEmote)
                {
                    minEmote = val;
                }
            }

            int caseEmote = 0;

            for (int i = 0; i < compareEmotion.Count; i++)
            {
                if (minEmote == compareEmotion[i])
                {
                    caseEmote = i;
                    break;
                }
            }

            kmeans      average_k = new kmeans();
            emotionsDAL data      = new emotionsDAL();
            double      summa     = 0;

            switch (caseEmote)
            {
            case 0:
                textBoxNameOfEmo.Text = "Грусть. Женский";
                Bitmap image1 = new Bitmap(@"C:\Users\Azure\Documents\Visual Studio 2017\Projects\anicore 3.0\anicore\bin\Debug\emotions\sad.bmp");
                pictureBox2.Location    = new System.Drawing.Point(213, 123); //left,top
                pictureBox2.Size        = new System.Drawing.Size(100, 100);
                pictureBox2.SizeMode    = PictureBoxSizeMode.AutoSize;
                pictureBox2.BorderStyle = BorderStyle.Fixed3D;
                pictureBox2.Image       = image1;

                if (MessageBox.Show("Вы хотите сохранить данные?", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    //усредненный массив
                    double[] m = average_k.kAverage(sadFemale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }
                    string downMass = "";
                    downMass = String.Join(" ", m);

                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), 1);
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), 1);
                    //закрытие бд
                    data.CloseConnection();
                }
                else
                {
                    string result = Microsoft.VisualBasic.Interaction.InputBox("Введите id текущей эмоции", "Изменение", string.Empty, 100, 100);
                    //усредненный массив
                    double[] m = average_k.kAverage(sadFemale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }
                    string downMass = "";
                    downMass = String.Join(" ", m);
                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //закрытие бд
                    data.CloseConnection();
                };

                break;

            case 1:
                textBoxNameOfEmo.Text = "Радость. Женский";
                Bitmap image2 = new Bitmap(@"C:\Users\Azure\Documents\Visual Studio 2017\Projects\anicore 3.0\anicore\bin\Debug\emotions\happy.bmp");
                pictureBox2.Location    = new System.Drawing.Point(213, 123); //left,top
                pictureBox2.Size        = new System.Drawing.Size(100, 100);
                pictureBox2.SizeMode    = PictureBoxSizeMode.AutoSize;
                pictureBox2.BorderStyle = BorderStyle.Fixed3D;
                pictureBox2.Image       = image2;
                if (MessageBox.Show("Вы хотите сохранить данные?", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    //усредненный массив
                    double[] m = average_k.kAverage(happyFemale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);

                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), 2);
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), 2);
                    //закрытие бд
                    data.CloseConnection();
                }
                else
                {
                    string result = Microsoft.VisualBasic.Interaction.InputBox("Введите id текущей эмоции", "Изменение", string.Empty, 100, 100);
                    //усредненный массив
                    double[] m = average_k.kAverage(happyFemale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);
                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //закрытие бд
                    data.CloseConnection();
                };
                break;

            case 2:
                textBoxNameOfEmo.Text = "Злость. Женский";
                Bitmap image3 = new Bitmap(@"C:\Users\Azure\Documents\Visual Studio 2017\Projects\anicore 3.0\anicore\bin\Debug\emotions\devil.bmp");
                pictureBox2.Location    = new System.Drawing.Point(213, 123); //left,top
                pictureBox2.Size        = new System.Drawing.Size(100, 100);
                pictureBox2.SizeMode    = PictureBoxSizeMode.AutoSize;
                pictureBox2.BorderStyle = BorderStyle.Fixed3D;
                pictureBox2.Image       = image3;

                if (MessageBox.Show("Вы хотите сохранить данные?", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    //усредненный массив
                    double[] m = average_k.kAverage(evilFemale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);

                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), 3);
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), 3);
                    //закрытие бд
                    data.CloseConnection();
                }
                else
                {
                    string result = Microsoft.VisualBasic.Interaction.InputBox("Введите id текущей эмоции", "Изменение", string.Empty, 100, 100);
                    //MessageBox.Show(result);
                    //включаем бд
                    double[] m = average_k.kAverage(evilFemale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //закрытие бд
                    data.CloseConnection();
                };
                break;

            case 3:
                textBoxNameOfEmo.Text = "Удивление. Женский";
                Bitmap image4 = new Bitmap(@"C:\Users\Azure\Documents\Visual Studio 2017\Projects\anicore 3.0\anicore\bin\Debug\emotions\surprised.bmp");
                pictureBox2.Location    = new System.Drawing.Point(213, 123); //left,top
                pictureBox2.Size        = new System.Drawing.Size(100, 100);
                pictureBox2.SizeMode    = PictureBoxSizeMode.AutoSize;
                pictureBox2.BorderStyle = BorderStyle.Fixed3D;
                pictureBox2.Image       = image4;
                if (MessageBox.Show("Вы хотите сохранить данные?", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    //усредненный массив
                    double[] m = average_k.kAverage(supriseFemale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);

                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), 4);
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), 4);
                    //закрытие бд
                    data.CloseConnection();
                }
                else
                {
                    string result = Microsoft.VisualBasic.Interaction.InputBox("Введите id текущей эмоции", "Изменение", string.Empty, 100, 100);
                    //усредненный массив
                    double[] m = average_k.kAverage(supriseFemale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);
                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //закрытие бд
                    data.CloseConnection();
                };
                break;

            case 4:
                textBoxNameOfEmo.Text = "Грусть. Мужской";
                Bitmap image5 = new Bitmap(@"C:\Users\Azure\Documents\Visual Studio 2017\Projects\anicore 3.0\anicore\bin\Debug\emotions\sad.bmp");
                pictureBox2.Location    = new System.Drawing.Point(213, 123);     //left,top
                pictureBox2.Size        = new System.Drawing.Size(100, 100);
                pictureBox2.SizeMode    = PictureBoxSizeMode.AutoSize;
                pictureBox2.BorderStyle = BorderStyle.Fixed3D;
                // pictureBox2.Image = image5;
                if (MessageBox.Show("Вы хотите сохранить данные?", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    //усредненный массив
                    double[] m = average_k.kAverage(sadMale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);

                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), 5);
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), 5);
                    //закрытие бд
                    data.CloseConnection();
                }
                else
                {
                    string result = Microsoft.VisualBasic.Interaction.InputBox("Введите id текущей эмоции", "Изменение", string.Empty, 100, 100);
                    //MessageBox.Show(result);
                    //включаем бд
                    double[] m = average_k.kAverage(sadMale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //закрытие бд
                    data.CloseConnection();
                };
                break;

            case 5:
                textBoxNameOfEmo.Text = "Радость. Мужской";
                Bitmap image6 = new Bitmap(@"C:\Users\Azure\Documents\Visual Studio 2017\Projects\anicore 3.0\anicore\bin\Debug\emotions\happy.bmp");
                pictureBox2.Location    = new System.Drawing.Point(213, 123);     //left,top
                pictureBox2.Size        = new System.Drawing.Size(100, 100);
                pictureBox2.SizeMode    = PictureBoxSizeMode.AutoSize;
                pictureBox2.BorderStyle = BorderStyle.Fixed3D;
                pictureBox2.Image       = image6;
                if (MessageBox.Show("Вы хотите сохранить данные?", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    //усредненный массив
                    double[] m = average_k.kAverage(happyMale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);

                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), 6);
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), 6);
                    //закрытие бд
                    data.CloseConnection();
                }
                else
                {
                    string result = Microsoft.VisualBasic.Interaction.InputBox("Введите id текущей эмоции", "Изменение", string.Empty, 100, 100);
                    //MessageBox.Show(result);
                    //включаем бд
                    double[] m = average_k.kAverage(happyMale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //закрытие бд
                    data.CloseConnection();
                };
                break;

            case 6:
                textBoxNameOfEmo.Text = "Злость. Мужской";
                Bitmap image7 = new Bitmap(@"C:\Users\Azure\Documents\Visual Studio 2017\Projects\anicore 3.0\anicore\bin\Debug\emotions\devil.bmp");
                pictureBox2.Location    = new System.Drawing.Point(213, 123);     //left,top
                pictureBox2.Size        = new System.Drawing.Size(100, 100);
                pictureBox2.SizeMode    = PictureBoxSizeMode.AutoSize;
                pictureBox2.BorderStyle = BorderStyle.Fixed3D;
                pictureBox2.Image       = image7;
                if (MessageBox.Show("Вы хотите сохранить данные?", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    //усредненный массив
                    double[] m = average_k.kAverage(evilMale);
                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }
                    string downMass = "";
                    downMass = String.Join(" ", m);

                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), 7);
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), 7);
                    //закрытие бд
                    data.CloseConnection();
                }
                else
                {
                    string result = Microsoft.VisualBasic.Interaction.InputBox("Введите id текущей эмоции", "Изменение", string.Empty, 100, 100);
                    //MessageBox.Show(result);
                    //включаем бд
                    double[] m = average_k.kAverage(evilMale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //закрытие бд
                    data.CloseConnection();
                };
                break;

            case 7:
                textBoxNameOfEmo.Text = "Удивление. Мужской";
                Bitmap image8 = new Bitmap(@"C:\Users\Azure\Documents\Visual Studio 2017\Projects\anicore 3.0\anicore\bin\Debug\emotions\surprised.bmp");
                pictureBox2.Location    = new System.Drawing.Point(213, 123);     //left,top
                pictureBox2.Size        = new System.Drawing.Size(100, 100);
                pictureBox2.SizeMode    = PictureBoxSizeMode.AutoSize;
                pictureBox2.BorderStyle = BorderStyle.Fixed3D;
                pictureBox2.Image       = image8;
                if (MessageBox.Show("Вы хотите сохранить данные?", "Сохранение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    //усредненный массив
                    double[] m = average_k.kAverage(supriseMale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }
                    string downMass = "";
                    downMass = String.Join(" ", m);

                    //включаем бд
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), 8);
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), 8);
                    //закрытие бд
                    data.CloseConnection();
                }
                else
                {
                    string result = Microsoft.VisualBasic.Interaction.InputBox("Введите id текущей эмоции", "Изменение", string.Empty, 100, 100);
                    //MessageBox.Show(result);
                    //включаем бд
                    double[] m = average_k.kAverage(supriseMale);

                    for (int i = 0; i < m.Length; i++)
                    {
                        summa = summa + m[i];
                    }

                    string downMass = "";
                    downMass = String.Join(" ", m);
                    data.OpenConnection(ConnectionString);
                    //обновление усредненных mffc

                    data.updateMFFC(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //добавление усредненных mffc
                    data.insertK_average(downMass, Convert.ToString(summa), Convert.ToInt32(result));
                    //закрытие бд
                    data.CloseConnection();
                };
                break;
            }
        }