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;
 }