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(); }
//загрузка аудиофайла и дальнейшие распознавание 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; } }