//Но пока скорей всего лучшей картинкой... public Audio ReplaceWithBetterQuality(Audio audioToCompare) { var lengthDifference = 5; //Разница в 5 сек не существенна, скорей всего та же песня //var enoughQuality = 315; //315 из 320 kbps вполне для mp3 var findSongCount = 10; //10 первые найденных песен хватит для анализа, и не сильно долго calsAudioKbps(audioToCompare); /*if (audioToCompare.Kbps >= enoughQuality) //Ушам хватит { return audioToCompare; }*/ //Перед сравнением берём за основу текущую песню, потом заменяем её той, у которой лучше качество Audio replacedAudio = audioToCompare; var finded = _vkApi.AudioSearch(audioToCompare.GetArtistDashTitle(), findSongCount); finded = deleteAnotherNameAudios(audioToCompare, finded); if (finded.Count == 0) return audioToCompare; calsManyAudiosKbps(finded); //Считаем kbps найденных песен foreach (var audioFinded in finded) { //Сравнение длин песен if (Math.Abs(audioToCompare.Duration - audioFinded.Duration) > lengthDifference) continue; /* if (audioFinded.Kbps >= enoughQuality) { return audioToCompare; }*/ //Если у заменяемой песни хуже качество, то заменяем найденной if (replacedAudio.Kbps < audioFinded.Kbps) { audioToCompare = audioFinded; } } return audioToCompare; }
/// <summary> /// Оставить в листе песни, только у которых совпадает название. /// </summary> /// <param name="audio">Искомая песня</param> /// <param name="findedAudios">Сравниваемые песени</param> /// <returns></returns> private List<Audio> deleteAnotherNameAudios(Audio audio, List<Audio> findedAudios) { string nameLowerCase = audio.GetArtistDashTitle().ToLowerInvariant(); var songsAfterDelete = new List<Audio>(); foreach (var findedAudio in findedAudios) { if (nameLowerCase == findedAudio.GetArtistDashTitle().ToLowerInvariant()) songsAfterDelete.Add(findedAudio); } return songsAfterDelete; }