Ejemplo n.º 1
0
        /// <summary>
        /// Called when metadata request returns (or simulated in SongInfoRetrieve
        /// to skip metadata request)
        /// </summary>
        private void REST_ResultMetaDataMuziekweb(object sender, bool success, ResultSongs resultSongs, object userState = null)
        {
            try
            {
                ResultFingerprintRecognition resultRecognitions = userState as ResultFingerprintRecognition;

                Console.WriteLine("Detected: " + resultRecognitions.FingerTracks[0].FingerTrackReference.ToString() + " Q=" + (resultRecognitions.TimeStatistics.TotalQueryTime.TotalMilliseconds / 1000).ToString("#0.000"));
                if (resultSongs != null && resultSongs.Songs.Count > 0)
                {
                    Console.WriteLine("MetaData: " + SongInfo(resultSongs.Songs[0]));
                }
                Console.Write("  P=" + resultRecognitions.FingerTracks[0].SearchStrategy.SearchName + " (I=" + resultRecognitions.FingerTracks[0].SearchStrategy.SearchIteration.ToString() + ")");
                Console.Write(" | BER=" + resultRecognitions.FingerTracks[0].BER.ToString());
                Console.Write(" | Index=" + resultRecognitions.FingerTracks[0].SearchStrategy.IndexNumberInMatchList.ToString() + " | HitCount=" + resultRecognitions.FingerTracks[0].SearchStrategy.SubFingerCountHitInFingerprint.ToString());
                Console.WriteLine();
            }
            finally
            {
                // Release detecttask so new one can be initiated
                lock (lockObject)
                {
                    detectTask = null;
                }
            }
        }
Ejemplo n.º 2
0
        private void DetectAudio(float[] inputAudioSample, int inputSampleRate, int inputChannels)
        {
            TimeSpan wait = (DateTime.Now - waitUntil);

            if (wait.TotalDays < 0 && wait.TotalSeconds < 0)
            {
                return;
            }

            // Run separeted task, ignore when one is allready running
            lock (lockObject)
            {
                // if detection task is runnign don't run a new one (otherwhise als er al een detectie draait dan niet verder gaan
                if (detectTask != null)
                {
                    return;
                }

                detectTask = new WSRecognize();
            } //lock


            Task task = Task.Factory.StartNew(() =>
            {
                using (AudioEngine ae = new AudioEngine())
                {
                    AudioSamples audio = new AudioSamples();
                    audio.Channels     = inputChannels;
                    audio.SampleRate   = inputSampleRate;
                    audio.Samples      = inputAudioSample;
                    audio.Origin       = "MEMORY";

                    if (doTimeStretching)
                    {
                        Console.WriteLine("Timestretching with " + timeStretchRateFactor.ToString("#0.00") + "f");
                        audio = ae.TimeStretch(audio.Samples, audio.SampleRate, audio.Channels, timeStretchRateFactor);
                    }
                    audio = ae.Resample(audio.Samples, audio.SampleRate, audio.Channels, 5512);
                    FingerprintSignature fsQuery = ae.CreateFingerprint(audio, SpectrogramConfig.Default);
                    switch (webServiceCall)
                    {
                    case "SLOW":
                        detectTask.DetectAudioFragmentSlow(fsQuery, null, REST_ResultFingerDetect);
                        break;

                    default:
                        detectTask.DetectAudioFragmentFast(fsQuery, null, REST_ResultFingerDetect);
                        break;
                    }
                    //detectTask.DetectAudioFragment(fsQuery, null, REST_ResultFingerDetect);
                } //using
            });
        }
Ejemplo n.º 3
0
        private void PrintAnswer(Resultset result)
        {
            if (result != null)
            {
                Console.WriteLine("======================================================================");
                Console.WriteLine("Algorithm: " + result.Algorithm.ToString());
                Console.Write("Stats: ");
                Console.Write("Total=" + (result.QueryTime.TotalMilliseconds / 1000).ToString("#0.000") + "s");
                Console.Write(" | FingerQry=" + (result.FingerQueryTime.TotalMilliseconds / 1000).ToString("#0.000") + "s");
                Console.Write(" | FingerLD=" + (result.FingerLoadTime.TotalMilliseconds / 1000).ToString("#0.000") + "s");
                Console.Write(" | Match=" + (result.MatchTime.TotalMilliseconds / 1000).ToString("#0.000") + "s");
                Console.WriteLine();
                Console.WriteLine();

                foreach (ResultEntry item in result.ResultEntries)
                {
                    Song song = new Song();
                    if (RetrieveMetadataFromMuziekweb(item.Reference.ToString()))
                    {
                        signalEvent.Reset();
                        WSRecognize detectTask = new WSRecognize();
                        string      reference  = item.Reference.ToString();
                        if (!retrieveMetadataFromMuziekweb && MapCRC32ToMuziekwebReference(reference).Length > 0)
                        {
                            reference = MapCRC32ToMuziekwebReference(reference);
                        }
                        detectTask.RetrieveMetaDataMuziekweb(reference, song, REST_ResultMetaDataMuziekweb);
                        // wait until metadata is retrieved
                        signalEvent.WaitOne();
                    }

                    Console.WriteLine("SearchPlan  : " + item.SearchStrategy.ToString());
                    Console.WriteLine("Reference   : " + item.Reference.ToString());
                    // AcoustID is for complete track so position in track is pointless
                    if (item.TimeIndex >= 0)
                    {
                        Console.WriteLine("Position    : " + (item.Time.TotalMilliseconds / 1000).ToString("#0.000") + " sec");
                    }
                    else
                    {
                        Console.WriteLine("Position    : Match on complete track");
                    }
                    if (result.Algorithm == FingerprintAlgorithm.AcoustIDFingerprint)
                    {
                        Console.WriteLine(string.Format("Match perc. : {0}%", item.Similarity));
                    }
                    else
                    {
                        Console.WriteLine("BER         : " + item.Similarity.ToString());
                    }
                    if (!string.IsNullOrEmpty(song.AlbumTrackID))
                    {
                        Console.WriteLine(string.Format("Album : {0} / {1}", song.Album.AlbumTitle, PerformerList(song.Album.Performers)));
                        Console.WriteLine(string.Format("Song  : {0} / {1}", song.SongTitle, PerformerList(song.Performers)));
                    }

                    Console.WriteLine();
                } //foreach
                Console.WriteLine("======================================================================");
            }
        }
Ejemplo n.º 4
0
        private void REST_ResultFingerDetect(object sender, bool success, ResultFingerprintRecognition resultRecognitions, object userState = null)
        {
            if (success && resultRecognitions != null && resultRecognitions.FingerTracks.Count > 0)
            {
                SongInfoRetrieve(resultRecognitions);
                // Leave detectTask intact, because we need to do a second call to get the metadata
                return;
            }

            try
            {
                if (resultRecognitions != null)
                {
                    string line = string.Empty;
                    switch (resultRecognitions.RecognizeCode)
                    {
                    case RecognizeCode.EXCEPTION:
                        line = "Error: " + resultRecognitions.RecognizeResult;
                        break;

                    case RecognizeCode.TIMEOUT:
                        line      = "Timeout. Waiting 30 seconds before submitting detect query again.";
                        waitUntil = DateTime.Now.AddSeconds(30);
                        break;

                    case RecognizeCode.SERVERNOTFOUND:
                        line      = "Server not found. Waiting 30 seconds before submitting detect query again.";
                        waitUntil = DateTime.Now.AddSeconds(30);
                        break;

                    case RecognizeCode.OK:
                        if (resultRecognitions.FingerTracks.Count == 0)
                        {
                            line = "Unknown song. Q=" + (resultRecognitions.TimeStatistics.TotalQueryTime.TotalMilliseconds / 1000).ToString("#0.000");
                        }
                        break;

                    default:
                        line = "Unknown error (" + resultRecognitions.RecognizeResult + ").";
                        break;
                    } //switch
                    if (line.Length > 0)
                    {
                        Console.WriteLine(line);
                    }

#if TIMEQUERYINFO
                    Console.Write("  QTotal=" + (resultRecognitions.TimeStatistics.TotalQueryTime.TotalMilliseconds / 1000).ToString("#0.000"));
                    Console.Write(" QSubF=" + (resultRecognitions.TimeStatistics.SubFingerQueryTime.TotalMilliseconds / 1000).ToString("#0.000"));
                    Console.Write(" QFinger=" + (resultRecognitions.TimeStatistics.FingerLoadTime.TotalMilliseconds / 1000).ToString("#0.000"));
                    Console.Write(" QMatch=" + (resultRecognitions.TimeStatistics.MatchTime.TotalMilliseconds / 1000).ToString("#0.000"));
                    Console.WriteLine();
#endif
                    Console.WriteLine();
                }

                CleanUpDict(false);
            }
            finally
            {
                // Release detetctask so new one can be initiated
                lock (lockObject)
                {
                    detectTask = null;
                }
            }
        }