/// <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; } } }
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 }); }
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("======================================================================"); } }
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; } } }