コード例 #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (TestCase1.Checked)
            {
                List <User> t    = TestcaseLoader.LoadTestcase1Testing(@"C:\test\Complete SpeakerID Dataset\TestingList.txt");
                Stopwatch   time = new Stopwatch();

                FileStream   f = new FileStream("Projectsequences1.txt", FileMode.Open);
                StreamReader s = new StreamReader(f);
                //Random rd = new Random();

                seq = AudioOperations.ExtractFeatures(t[0].UserTemplates[0]);
                double min2 = double.MaxValue;
                string ans2 = "";
                //Console.Write("Enter The Window Index :");
                // int w = Console.Read();
                while (s.Peek() != -1)
                {
                    double res2     = 0;
                    string sequence = "";
                    string _name    = s.ReadLine();
                    sequence = s.ReadLine();
                    string[] arr  = sequence.Split('#');
                    string[] arr3 = new string[arr.Length];
                    Sequence seq2 = new Sequence();
                    seq2.Frames = new MFCCFrame[arr.Length];
                    for (int i = 0; i < arr.Length; i++)
                    {
                        seq2.Frames[i] = new MFCCFrame();
                        for (int o = 0; o < arr.Length; o++)
                        {
                            arr3 = arr[o].Split('@');
                        }
                        for (int j = 0; j < 13; j++)
                        {
                            seq2.Frames[i].Features[j] = double.Parse(arr3[j]);
                        }
                    }
                    time.Start();
                    res2 = PRUNINGDTW.DTW2fun(seq, seq2);
                    time.Stop();
                    if (res2 < min2)
                    {
                        min2 = res2;
                        ans2 = _name;
                    }
                }
                Console.WriteLine("NEW DTW");
                Console.WriteLine(ans2 + " " + min2);

                Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", time.Elapsed);
                s.Close();
            }

            if (TestCase2.Checked)
            {
                List <User> t    = TestcaseLoader.LoadTestcase2Testing(@"C:\test\Complete SpeakerID Dataset\TestingList.txt");
                Stopwatch   time = new Stopwatch();

                FileStream   f = new FileStream("Projectsequences2.txt", FileMode.Open);
                StreamReader s = new StreamReader(f);

                seq = AudioOperations.ExtractFeatures(t[0].UserTemplates[0]);
                double min2 = double.MaxValue;
                string ans2 = "";
                //Console.Write("Enter The Window Index :");
                // int w = Console.Read();
                while (s.Peek() != -1)
                {
                    double res2     = 0;
                    string sequence = "";
                    string _name    = s.ReadLine();
                    sequence = s.ReadLine();
                    string[] arr  = sequence.Split('#');
                    string[] arr3 = new string[arr.Length];
                    Sequence seq2 = new Sequence();
                    seq2.Frames = new MFCCFrame[arr.Length];
                    for (int i = 0; i < arr.Length; i++)
                    {
                        seq2.Frames[i] = new MFCCFrame();
                        for (int o = 0; o < arr.Length; o++)
                        {
                            arr3 = arr[o].Split('@');
                        }
                        for (int j = 0; j < 13; j++)
                        {
                            seq2.Frames[i].Features[j] = double.Parse(arr3[j]);
                        }
                    }
                    time.Start();
                    res2 = PRUNINGDTW.DTW2fun(seq, seq2);
                    time.Stop();
                    if (res2 < min2)
                    {
                        min2 = res2;
                        ans2 = _name;
                    }
                }
                Console.WriteLine("NEW DTW");
                Console.WriteLine(ans2 + " " + min2);

                Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", time.Elapsed);
                s.Close();
            }

            if (TestCase3.Checked)
            {
                List <User> t    = TestcaseLoader.LoadTestcase3Testing(@"C:\test\Complete SpeakerID Dataset\TestingList.txt");
                Stopwatch   time = new Stopwatch();
                for (int k = 0; k < t.Count; k++)
                {
                    FileStream   f       = new FileStream("Projectsequences3.txt", FileMode.Open);
                    StreamReader s       = new StreamReader(f);
                    Random       rd      = new Random();
                    int          counter = rd.Next(0, t[k].UserTemplates.Count);
                    seq = AudioOperations.ExtractFeatures(t[k].UserTemplates[counter]);
                    double min2 = double.MaxValue;
                    string ans2 = "";
                    //Console.Write("Enter The Window Index :");
                    // int w = Console.Read();
                    while (s.Peek() != -1)
                    {
                        double res2     = 0;
                        string sequence = "";
                        string _name    = s.ReadLine();
                        sequence = s.ReadLine();
                        string[] arr  = sequence.Split('#');
                        string[] arr3 = new string[arr.Length];
                        Sequence seq2 = new Sequence();
                        seq2.Frames = new MFCCFrame[arr.Length];
                        for (int i = 0; i < arr.Length; i++)
                        {
                            seq2.Frames[i] = new MFCCFrame();
                            for (int o = 0; o < arr.Length; o++)
                            {
                                arr3 = arr[o].Split('@');
                            }
                            for (int j = 0; j < 13; j++)
                            {
                                seq2.Frames[i].Features[j] = double.Parse(arr3[j]);
                            }
                        }
                        time.Start();
                        res2 = PRUNINGDTW.DTW2fun(seq, seq2);
                        if (res2 < min2)
                        {
                            min2 = res2;
                            ans2 = _name;
                        }
                        Console.WriteLine("NEW DTW");
                        Console.WriteLine(ans2 + " " + min2);
                        time.Stop();
                        Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", time.Elapsed);
                    }
                    Console.WriteLine(ans2);
                    Console.WriteLine(min2);
                    MessageBox.Show(ans2 + " " + min2);
                    s.Close();
                }
            }

            if (Normal.Checked)
            {
                FileStream   f    = new FileStream("Projectsequences.txt", FileMode.Open);
                StreamReader s    = new StreamReader(f);
                Stopwatch    time = new Stopwatch();
                double       min2 = double.MaxValue;
                string       ans2 = "";
                //Console.Write("Enter The Window Index :");
                // int w = Console.Read();
                while (s.Peek() != -1)
                {
                    double res2     = 0;
                    string sequence = "";
                    string _name    = s.ReadLine();
                    sequence = s.ReadLine();
                    string[] arr  = sequence.Split('#');
                    string[] arr3 = new string[arr.Length];
                    Sequence seq2 = new Sequence();
                    seq2.Frames = new MFCCFrame[arr.Length];
                    for (int i = 0; i < arr.Length; i++)
                    {
                        seq2.Frames[i] = new MFCCFrame();
                        for (int o = 0; o < arr.Length; o++)
                        {
                            arr3 = arr[o].Split('@');
                        }
                        for (int j = 0; j < 13; j++)
                        {
                            seq2.Frames[i].Features[j] = double.Parse(arr3[j]);
                        }
                    }
                    time.Start();
                    res2 = PRUNINGDTW.DTW2fun(seq, seq2);
                    if (res2 < min2)
                    {
                        min2 = res2;
                        ans2 = _name;
                    }
                    Console.WriteLine("NEW DTW");
                    Console.WriteLine(ans2 + " " + min2);
                    time.Stop();
                    Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", time.Elapsed);
                }
                Console.WriteLine(ans2);
                Console.WriteLine(min2);
                s.Close();
            }
        }
コード例 #2
0
        private void btnIdentify_Click(object sender, EventArgs e)
        {
            /// <summary>
            /// updating status label
            /// </summary>
            ///
            metroLabel1.Visible    = true;
            pruningToggle1.Visible = true;
            labelStatus.Text       = "Status: Identifying speaker and running DTW algorithm...";


            List <User> test = new List <User>();
            string      cnt  = "";// To choose a testcase

            if (Testcase1_radioButton.Checked == true)
            {
                test = TestcaseLoader.LoadTestcase1Testing(@"C:\SpeakerID\Test Cases\Complete SpeakerID Dataset\TestingList.txt"); cnt = "1";
            }
            else if (Testcase2_radioButton.Checked == true)
            {
                test = TestcaseLoader.LoadTestcase2Testing(@"C:\SpeakerID\Test Cases\Complete SpeakerID Dataset\TestingList.txt"); cnt = "2";
            }
            else if (Testcase3_radioButton.Checked == true)
            {
                test = TestcaseLoader.LoadTestcase3Testing(@"C:\SpeakerID\Test Cases\Complete SpeakerID Dataset\TestingList.txt"); cnt = "3";
            }
            else if (caseMilestone1.Checked) //First testcase
            {
                AudioSignal signalTemp = AudioOperations.OpenAudioFile("C:\\SpeakerID\\Test Cases\\Sample Test\\Input sample\\ItIsPlausible_Rich_US_English.wav");
                signalTemp = AudioOperations.RemoveSilence(signalTemp); //don't analyze (template function)
                User userTemp = new User();
                userTemp.UserTemplates = new List <AudioSignal>();
                userTemp.UserName      = ("Rich");
                userTemp.UserTemplates.Add(signalTemp);
                test.Add(userTemp);
                cnt = "4";
            }
            else if (caseMilestone2.Checked)
            {
                AudioSignal signalTemp = AudioOperations.OpenAudioFile("C:\\SpeakerID\\Test Cases\\Pruning Test\\1 min\\[Input] Why Study Algorithms - (1 min).wav");
                signalTemp = AudioOperations.RemoveSilence(signalTemp);
                User userTemp = new User();
                userTemp.UserTemplates = new List <AudioSignal>();
                userTemp.UserName      = ("BigOh (1 min)");
                userTemp.UserTemplates.Add(signalTemp);
                test.Add(userTemp);
                cnt = "5";
            }
            else if (caseMilestone3.Checked)
            {
                AudioSignal signalTemp = AudioOperations.OpenAudioFile("C:\\SpeakerID\\Test Cases\\Pruning Test\\4 min\\[Input] Why Study Algorithms - (4 min).wav");
                signalTemp = AudioOperations.RemoveSilence(signalTemp);
                User userTemp = new User();
                userTemp.UserTemplates = new List <AudioSignal>();
                userTemp.UserName      = ("BigOh (4 min)");
                userTemp.UserTemplates.Add(signalTemp);
                test.Add(userTemp);
                cnt = "6";
            }
            for (int y = 0; y < test.Count; ++y)
            {
                Random      rnd = new Random(); //Generate random number to choose an audio sample to test it against the database
                AudioSignal sig = new AudioSignal();
                sig = test[y].UserTemplates[0]; //rnd.Next(0, test[y].UserTemplates.Count)];
                Sequence compareSequence_input = new Sequence();
                compareSequence_input = AudioOperations.ExtractFeatures(sig);
                FileStream   FS        = new FileStream("C:/SpeakerID/case" + cnt + "/Relations.txt", FileMode.Open);
                StreamReader SR        = new StreamReader(FS);
                string       relations = SR.ReadLine();
                SR.Close();
                /// <summary>
                ///  Split the string relations into an array of strings
                ///   Delimiter: #
                ///  Then split each string into name and path
                ///   Delimiter: %
                ///   Filling an array of "relationItem"s with the names and sequence paths of all sequences in the database, and leaving the
                ///   distance attribute in all the array items as they are "NULL", until calculated using the DTW algorithm
                /// </summary>
                ///
                string[]       relationsStrArr    = relations.Split('#');
                relationItem[] relationsStructArr = new relationItem[relationsStrArr.Length - 1];
                matchedPerson  person             = new matchedPerson();
                person.distance = -1;

                for (int i = 0; i < relationsStructArr.Length; i++)
                {
                    string[] stringArrTemp = relationsStrArr[i].Split('%');
                    relationsStructArr[i].nameStr      = stringArrTemp[0];
                    relationsStructArr[i].sequencePath = stringArrTemp[1];
                }
                Stopwatch sw;
                TimeSpan  TS = TimeSpan.Zero;
                for (int i = 0; i < relationsStructArr.Length; i++) //Loops on all sequences in DB
                {
                    /// Reset the "compareSequence_output" variable and prepare SR for reading the sequence
                    Sequence compareSequence_output = new Sequence();
                    FS = new FileStream(relationsStructArr[i].sequencePath, FileMode.Open);
                    SR = new StreamReader(FS);
                    /// Resetting the "file" variable
                    string file = "";
                    file += SR.ReadLine();
                    string[] strTempFrames = file.Split('#');                            //strTemp now contains all Frames in a sequence
                    compareSequence_output.Frames = new MFCCFrame[strTempFrames.Length]; //Setting number of frames in output sequence
                    for (int j = 0; j < strTempFrames.Length; j++)                       //Loops on all frames in a sequence
                    {
                        string[]  strTempFeatures = strTempFrames[j].Split('%');
                        MFCCFrame frame           = new MFCCFrame();
                        for (int k = 0; k < 13; k++)
                        {
                            frame.Features[k] = double.Parse(strTempFeatures[k]);                          //Loops on all 13 features in a frame and converts string to double
                        }
                        compareSequence_output.Frames[j] = new MFCCFrame();
                        for (int k = 0; k < 13; k++)
                        {
                            compareSequence_output.Frames[j].Features[k] = frame.Features[k];
                        }
                    }

                    /// Save the difference between compareSequence_output and compareSequence_input in relationsStructArr[i].distance
                    if (pruningToggle1.Checked == true)
                    {
                        sw = Stopwatch.StartNew();
                        relationsStructArr[i].distance = Pruning_DTW(compareSequence_input, compareSequence_output);
                        sw.Stop();
                        TS += sw.Elapsed;
                    }
                    else
                    {
                        sw = Stopwatch.StartNew();
                        relationsStructArr[i].distance = DTW_improved(compareSequence_input, compareSequence_output);
                        sw.Stop();
                        TS += sw.Elapsed;
                    }

                    // update person object
                    if (relationsStructArr[i].distance < person.distance || person.distance == -1)
                    {
                        person.distance = relationsStructArr[i].distance;
                        person.name     = relationsStructArr[i].nameStr;
                    }
                    /// Close the SR
                    SR.Close();
                    Console.WriteLine(relationsStructArr[i].nameStr);
                }

                /// <summary>
                ///  Updating status label and showing search results
                /// </summary>
                ///
                labelStatus.Text = "Status: Searching done.";
                Console.WriteLine(test[y].UserName);
                MessageBox.Show("Search completed\nThe closest match to this speaker is: " + person.name + "\nTime Elapsed for DTW only: " + TS.Hours + ':' + TS.Minutes + ':' + TS.Seconds + ':' + TS.Milliseconds + "\nTotal cost: " + person.distance, "Search Results");
                labelStatus.Text = "Status: Ready";
            }
        }