private void calsAudioKbps(Audio audio) { if (audio.Kbps != 0) return; WebRequest request = HttpWebRequest.Create(audio.Url); request.Method = "HEAD"; //Запрашиваем заголовок файла using (WebResponse response = request.GetResponse()) { long contentLength; //Берём из заголовка mp3 параметр размера файла if (long.TryParse(response.Headers.Get("Content-Length"), out contentLength)) { //Определиние kbps и качества картинки методом деления размера файла на длину песни audio.Kbps = (int)((contentLength * 8 / 1024) / audio.Duration); //TODO сделать считывание первых байт заголовка мп3 } } }
//Но пока скорей всего лучшей картинкой... public Audio ReplaceWithBetterQuality(Audio audioToCompare) { var lengthDifference = 5; //Разница в 5 сек не существенна, скорей всего та же песня //var enoughQuality = 315; //315 из 320 kbps вполне для mp3 var findSongCount = 10; //10 первые найденных песен хватит для анализа, и не сильно долго int replacedCount = 0; //Высчитываем текущий kbps песен, не быстрое занятие 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; }
public SendSongToPlay(Audio audio) { Song = audio; }
private void SongToPlayReceive(SendSongToPlay message) { var song = message.Song; _mediaPlayer.Open(song.Url); _curSong = song; MediaPlayerPlay(); TbTitleBar = song.GetArtistDashTitle(); //TbPlayerSong.ToolTip = TbPlayerSong.Text; //Песня ещё не загрузилась, поэтому длительность лучше взять из объекта Audio т.е. то что сервер говорит. ProgressBarMaximum = song.Duration; var time = new TimeSpan(0, 0, (int)song.Duration); String emptyZero = ""; if (time.Seconds < 10) emptyZero = "0"; TbPlayerTime = "-" + time.Minutes + ":" + emptyZero + time.Seconds; }
public TestAudios() { RussianSong = new Audio() { Artist = "Yanix", Title = "Банька-Парилка" }; EnglishSong = new Audio() { Artist = "Pendelum", Title = "Watercolour" }; }
/// <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; }
public PlaySongRequest(Audio audio, bool nextSong) { PlayedSong = audio; NextSong = nextSong; }
/// <summary> /// Проверка песню на текущий язык. /// </summary> /// <returns>True - неверный язык</returns> private bool IsWrongLang(Audio track) { if (RuLang == true) { if (!Utilities.IsStringRussian(track.Artist + track.Title)) // if (!Regex.IsMatch((track.Artist + track.Title), "[А-Яа-я]")) Don't work, WTF?? return true; } else { if (Utilities.IsStringRussian(track.Artist + track.Title)) //if (Regex.IsMatch((track.Artist + track.Title), "[А-Яа-я]")) return true; } return false; }