예제 #1
0
        private void StartPlayAndRecord(string file)
        {
            UpdateStatus(file);
            Open(file);
            Play();

            recorder = new MicRecorder();
            recorder.Seconds = int.MaxValue;
            recorder.RequestStop = false;

            Thread newThread = new Thread(new ThreadStart(StartRecord));
            newThread.Start();
        }
예제 #2
0
        public static void SimpleTest(string indexFile, IHashMaker hashMaker, bool bQuiet)
        {
            bool bTextFile = IsTextFile(indexFile);
            DataBase dataBase = new DataBase(hashMaker);
            if (bTextFile)
                dataBase.Load(indexFile);
            else
                dataBase.LoadFromBinary(indexFile);
            dataBase.Quiet = bQuiet;
            int seconds = 10;

            while (true)
            {
                Console.WriteLine("Press any key to identify a new song, press ESC to exit.\n");
                ConsoleKeyInfo keyInfo = Console.ReadKey();
                if (keyInfo.Key == ConsoleKey.Escape)
                    break;

                byte[] audio = null;
                Console.WriteLine("Start recording audio from mic ...", seconds);
                MicRecorder recorder = new MicRecorder();
                recorder.Seconds = seconds;
                recorder.RequestStop = false;
                recorder.RecStart();

                audio = recorder.GetAudioData();
                dataBase.UseFFTW = false;
                Indexing(dataBase, audio);
                dataBase.UseFFTW = true;
                Indexing(dataBase, audio);
                dataBase.UseSort = true;
                Indexing(dataBase, audio);

                //dataBase.UseFilter = true;
                //timeInterval.Reset();
                //id = dataBase.GetBestHit(audio, 16);
                //intervalInSecond = timeInterval.GetDurationInSecond();

                //Console.WriteLine("--------------------");
                //Console.Write("Final Match ({0}s):\t", intervalInSecond);
                //if (id < 0)
                //    Console.WriteLine("No match!");
                //else
                //    Console.WriteLine(dataBase.GetNameByID(id));
                //Console.WriteLine("--------------------");
            }
        }
예제 #3
0
        public static void SimpleTest(string dataBaseFile)
        {
            DataBase dataBase = new DataBase(new LongHash());
            dataBase.Load(dataBaseFile);

            int seconds = 10;
            while (true)
            {
                Console.WriteLine("Press any key to identify a new song, press ESC to exit.\n");
                ConsoleKeyInfo keyInfo = Console.ReadKey();
                if (keyInfo.Key == ConsoleKey.Escape)
                    break;

                byte[] audio = null;

                Console.WriteLine("Start recording audio from mic ...", seconds);
                MicRecorder recorder = new MicRecorder();
                recorder.Seconds = seconds;
                recorder.RequestStop = false;
                recorder.RecStart();

                audio = recorder.GetAudioData();
                Console.WriteLine("Length of audio data is {0}.", audio.Length);

                int id = GetBestHit(audio, dataBase, 16);
                Console.WriteLine("[Normal] The name of this song is : {0}", dataBase.GetNameByID(id));

                int peakPercent = 95;
                double normPercent = 1.0;
                sbyte minPeak;
                sbyte maxPeak;
                sbyte peak;
                double ratio = 1.0;

                Normalize.getPeaks8(audio, out minPeak, out maxPeak);
                Console.WriteLine("Normal Peak : {0} {1}", minPeak, maxPeak);

                minPeak *= -1;
                peak = (minPeak > maxPeak) ? minPeak : maxPeak;

                ratio = 127.0 / peak * normPercent;
                Console.WriteLine("Ratio : {0}", ratio);
                byte[] newData = Normalize.Amplify(audio, ratio);

                id = GetBestHit(newData, dataBase, 16);
                Console.WriteLine("[Normal Peak] The name of this song is : {0}", dataBase.GetNameByID(id));

                if (!Normalize.getSmartPeaks8(audio, peakPercent, out minPeak, out maxPeak))
                    Console.WriteLine("Error in Normalize.getSmartPeaks8");
                else
                {
                    Console.WriteLine("Smart Peak : {0} {1}", minPeak, maxPeak);
                    minPeak *= -1;
                    peak = (minPeak > maxPeak) ? minPeak : maxPeak;

                    ratio = 127.0 / peak * normPercent;
                    Console.WriteLine("Ratio : {0}", ratio);
                    newData = Normalize.Amplify(audio, ratio);

                    Normalize.getPeaks8(newData, out minPeak, out maxPeak);
                    Console.WriteLine("Normal Peak After Amplify : {0} {1}", minPeak, maxPeak);

                    id = GetBestHit(newData, dataBase, 16);
                    Console.WriteLine("[Smart Peak] The name of this song is : {0}", dataBase.GetNameByID(id));
                }

            }
        }