protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            TrackObject o = (TrackObject)e.Parameter;

            if (o == null)
            {
                o = MainPage.currentSong;
                this.songArtist.Text          = o.trackArtistName;
                this.songTitle.Text           = o.trackTitle;
                this.songArtwork.Source       = o.albumCoverImage;
                this.songAlbumArtistName.Text = o.album.artist.name;
                this.songAlbumName.Text       = o.album.name;

                await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    Uri webLink                      = new Uri(o.trackStreamURL);
                    MediaPlaybackItem song           = new MediaPlaybackItem(MediaSource.CreateFromUri(webLink));
                    MediaItemDisplayProperties props = song.GetDisplayProperties();
                    props.Type = MediaPlaybackType.Music;
                    props.MusicProperties.Title  = o.trackTitle;
                    props.MusicProperties.Artist = o.trackArtistName;
                    props.MusicProperties.Genres.Add(o.track.genreprimary);
                    props.MusicProperties.Genres.Add(o.track.genresecondary);
                    props.Thumbnail = RandomAccessStreamReference.CreateFromUri(new Uri(o.albumCoverURL));
                    song.ApplyDisplayProperties(props);
                    mediaPlayer.Source       = song;
                    MainPage.nowPlaying.Text = "Now Playing: \"" + o.trackArtistName + " ~ " + o.trackTitle + "\"";
                });
            }
            else
            {
                this.songArtist.Text          = o.trackArtistName;
                this.songTitle.Text           = o.trackTitle;
                this.songArtwork.Source       = o.albumCoverImage;
                this.songAlbumArtistName.Text = o.album.artist.name;
                this.songAlbumName.Text       = o.album.name;

                await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                {
                    if (MainPage.currentSong != o)
                    {
                        MainPage.currentSong             = o;
                        Uri webLink                      = new Uri(o.trackStreamURL);
                        MediaPlaybackItem song           = new MediaPlaybackItem(MediaSource.CreateFromUri(webLink));
                        MediaItemDisplayProperties props = song.GetDisplayProperties();
                        props.Type = MediaPlaybackType.Music;
                        props.MusicProperties.Title  = o.trackTitle;
                        props.MusicProperties.Artist = o.trackArtistName;
                        props.MusicProperties.Genres.Add(o.track.genreprimary);
                        props.MusicProperties.Genres.Add(o.track.genresecondary);
                        props.Thumbnail = RandomAccessStreamReference.CreateFromUri(new Uri(o.albumCoverURL));
                        song.ApplyDisplayProperties(props);
                        mediaPlayer.Source       = song;
                        MainPage.nowPlaying.Text = "Now Playing: \"" + o.trackArtistName + " ~ " + o.trackTitle + "\"";
                    }
                });
            }
        }
示例#2
0
        public void LoadPlayingFile(HyPlayItem mpi)
        {
            if (mpi == null)
            {
                return;
            }

            MediaItemDisplayProperties dp = mpi.MediaItem.GetDisplayProperties();
            AudioInfo ai = mpi.AudioInfo;

            Invoke((() =>
            {
                TbSingerName.Text = ai.Artist;
                TbSongName.Text = ai.SongName;
                AlbumImage.Source = mpi.ItemType == HyPlayItemType.Local ? ai.BitmapImage : new BitmapImage(new Uri(ai.Picture));
                SliderAudioRate.Value = HyPlayList.Player.Volume * 100;
                SliderProgress.Minimum = 0;
                SliderProgress.Maximum = ai.LengthInMilliseconds;
                if (mpi.isOnline)
                {
                    BtnLike.IsChecked = Common.LikedSongs.Contains(mpi.NcPlayItem.sid);
                }

                ListBoxPlayList.SelectedIndex = HyPlayList.NowPlaying;
            }));
        }
示例#3
0
        private async Task UpdateSystemMediaTransportControlsAndThumbnail(LibraryItem libraryItemToPlay, MediaPlaybackItem mediaPlaybackItem,
                                                                          StorageFile fileWithThumbnail = null)
        {
            MediaItemDisplayProperties props = mediaPlaybackItem.GetDisplayProperties();

            props.Type = Windows.Media.MediaPlaybackType.Music;
            props.MusicProperties.Title = libraryItemToPlay.Name;

            if (libraryItemToPlay.Artist != null)
            {
                props.MusicProperties.Artist = libraryItemToPlay.Artist;
            }

            if (libraryItemToPlay.Album != null)
            {
                props.MusicProperties.AlbumTitle = libraryItemToPlay.Album;
            }

            if (fileWithThumbnail != null)
            {
                StorageItemThumbnail thumbnail = await GetAndSetThumbnail(fileWithThumbnail);

                if (thumbnail != null)
                {
                    props.Thumbnail = RandomAccessStreamReference.CreateFromStream(thumbnail);
                }
            }

            mediaPlaybackItem.ApplyDisplayProperties(props);
        }
 public static void CreateMediaPlaybackList(List <string> musicList, int fromVol, int selectedMusic, List <string> titleList)
 {
     mpl.Items.Clear();
     PlayPage.fromVol = fromVol;
     PlayPage.musicList.Clear();
     for (int i = 0; i < musicList.Count; i++)
     {
         PlayPage.musicList.Add(musicList[i]);
         PlayPage.titleList.Add(titleList[i]);
     }
     PlayPage.selectedMusic = selectedMusic;
     for (int i = 0; i < musicList.Count; i++)
     {
         mpl.Items.Add(new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri("http://mp3-cdn.luoo.net/low/luoo/radio" + fromVol + "/" + musicList[i] + ".mp3"))));
     }
     for (int i = 0; i < mpl.Items.Count; i++)
     {
         MediaItemDisplayProperties props = mpl.Items[i].GetDisplayProperties();
         props.Type = Windows.Media.MediaPlaybackType.Music;
         props.MusicProperties.Title = titleList[i];
         mpl.Items[i].ApplyDisplayProperties(props);
     }
     mpl.StartingItem      = mpl.Items[selectedMusic];
     mpl.AutoRepeatEnabled = true;
     mp.AudioCategory      = MediaPlayerAudioCategory.Media;
     mp.Source             = mpl;
     mpl.ItemFailed       += Mpl_ItemFailed;
     timer.Start();
 }
示例#5
0
        private async void SingerHotSongList_CurrentItemChanged(MediaPlaybackList sender, CurrentMediaPlaybackItemChangedEventArgs args)
        {
            uint CurrentIndex = sender.CurrentItemIndex;

            if (CurrentIndex == 4294967295)
            {
                return;
            }
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
            {
                if (MediaControl.MediaPlayer.Source == MediaPlayList.SingerHotSongList && MediaPlayList.HotSongBackup.Count > 0)
                {
                    SearchSingleMusic music = MediaPlayList.HotSongBackup[Convert.ToInt32(CurrentIndex)];
                    var SongSearchResult    = await NeteaseMusicAPI.GetInstance().SearchAsync <SingleMusicSearchResult>(music.MusicName, 5, 0, NeteaseMusicAPI.SearchType.Song);

                    foreach (var Song in SongSearchResult.Result.Songs.Where(Song => Song.Name == music.MusicName && Song.Al.Name == music.Album).Select(Song => Song))
                    {
                        var bitmap            = new BitmapImage();
                        PicturePlaying.Source = bitmap;
                        bitmap.UriSource      = new Uri(Song.Al.PicUrl);
                        break;
                    }

                    MediaItemDisplayProperties Props = args.NewItem.GetDisplayProperties();
                    Props.Type = Windows.Media.MediaPlaybackType.Music;
                    Props.MusicProperties.Title  = music.MusicName;
                    Props.MusicProperties.Artist = music.Album;
                    args.NewItem.ApplyDisplayProperties(Props);
                }
            });
        }
示例#6
0
        private async Task <bool> PreparePlayback(string text, bool easter)
        {
            bool done = false;

            SpeechSynthesisStream synthStream = await synth.SynthesizeTextToStreamAsync(text);

            MediaSource       mediaSource  = MediaSource.CreateFromStream(synthStream, "audio");
            MediaPlaybackItem playbackItem = new MediaPlaybackItem(mediaSource);

            MediaItemDisplayProperties mediaProps = playbackItem.GetDisplayProperties();

            mediaProps.Type = MediaPlaybackType.Music;
            mediaProps.MusicProperties.Artist = "Talkinator"; // TODO Get name of selected Voice and paste it as Talkinator 'Bob'
            mediaProps.MusicProperties.Title  = "Spoken text";
            //mediaProps.MusicProperties.Genres.Add("Speech");
            playbackItem.ApplyDisplayProperties(mediaProps);

            _player.SystemMediaTransportControls.IsEnabled = true;

            _player.Source = playbackItem;

            if (easter == false)
            {
                if (_loopEnabled == true)
                {
                    _player.IsLoopingEnabled = true;
                }
            }

            _player.AutoPlay    = true;
            _player.MediaEnded += _player_MediaEnded;

            done = true;
            return(done);
        }
示例#7
0
        private static void LoadSystemPlayBar(int index)
        {
            if (index >= List.Count)
            {
                return;
            }

            HyPlayItem hpi = List[index];
            AudioInfo  ai  = hpi.AudioInfo;
            //然后设置播放相关属性
            MediaItemDisplayProperties properties = PlaybackList.Items[index].GetDisplayProperties();

            properties.Type = MediaPlaybackType.Music;
            properties.MusicProperties.AlbumTitle = ai.Album;
            properties.MusicProperties.Artist     = ai.Artist;
            properties.MusicProperties.Title      = ai.SongName;

            try
            {
                if (hpi.isOnline)
                {
                    properties.Thumbnail = RandomAccessStreamReference.CreateFromUri(new Uri(hpi.NcPlayItem.Album.cover + "?param=" + StaticSource.PICSIZE_AUDIO_PLAYER_COVER));
                }
                else
                {
                    properties.Thumbnail = ai.Thumbnail;
                }
            }
            catch { }

            hpi.MediaItem.ApplyDisplayProperties(properties);
        }
示例#8
0
        private async void PlayMediaPlaybackItem()
        {
            //Create a new picker
            FileOpenPicker filePicker = new FileOpenPicker();

            //make a collection of all video types you want to support (for testing we are adding just 3).
            string[] fileTypes = new string[] { ".wmv", ".mp4", ".mkv" };

            //Add your fileTypes to the FileTypeFilter list of filePicker.
            foreach (string fileType in fileTypes)
            {
                filePicker.FileTypeFilter.Add(fileType);
            }

            //Set picker start location to the video library
            filePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;

            //Retrieve file from picker
            StorageFile file = await filePicker.PickSingleFileAsync();

            if (!(file is null))
            {
                // <SnippetPlayMediaPlaybackItem>
                _mediaSource       = MediaSource.CreateFromStorageFile(file);
                _mediaPlaybackItem = new MediaPlaybackItem(_mediaSource);

                _mediaPlaybackItem.AudioTracksChanged         += PlaybackItem_AudioTracksChanged;
                _mediaPlaybackItem.VideoTracksChanged         += MediaPlaybackItem_VideoTracksChanged;
                _mediaPlaybackItem.TimedMetadataTracksChanged += MediaPlaybackItem_TimedMetadataTracksChanged;

                _mediaPlayer        = new MediaPlayer();
                _mediaPlayer.Source = _mediaPlaybackItem;
                mediaPlayerElement.SetMediaPlayer(_mediaPlayer);
                // </SnippetPlayMediaPlaybackItem>
            }

            if (!(_mediaPlaybackItem is null))
            {
                var mediaPlaybackItem = _mediaPlaybackItem;
                // <SnippetSetVideoProperties>
                MediaItemDisplayProperties props = mediaPlaybackItem.GetDisplayProperties();
                props.Type = Windows.Media.MediaPlaybackType.Video;
                props.VideoProperties.Title    = "Video title";
                props.VideoProperties.Subtitle = "Video subtitle";
                props.VideoProperties.Genres.Add("Documentary");
                mediaPlaybackItem.ApplyDisplayProperties(props);
                // </SnippetSetVideoProperties>

                // <SnippetSetMusicProperties>
                props      = mediaPlaybackItem.GetDisplayProperties();
                props.Type = Windows.Media.MediaPlaybackType.Music;
                props.MusicProperties.Title  = "Song title";
                props.MusicProperties.Artist = "Song artist";
                props.MusicProperties.Genres.Add("Polka");
                mediaPlaybackItem.ApplyDisplayProperties(props);
                // </SnippetSetMusicProperties>
            }
        }
示例#9
0
        private async void FontIcon_PointerPressed(object sender, PointerRoutedEventArgs e)
        {
            FontIcon FI = sender as FontIcon;

            SingleMusicControl.SelectedItem = ((FontIcon)sender).DataContext;
            SearchSingleMusic SSM = SingleMusicList[SingleMusicControl.SelectedIndex];

            if (((SolidColorBrush)FI.Foreground).Color == Colors.White)
            {
                string MusicURL = (await NetEaseMusic.GetSongsUrlAsync(SingleMusicList[SingleMusicControl.SelectedIndex].SongID)).Data[0].Url;
                if (MusicURL == null)
                {
                    ContentDialog dialog = new ContentDialog
                    {
                        Title           = "抱歉",
                        Content         = "当前歌曲暂时无法播放",
                        CloseButtonText = "确定",
                        Background      = Application.Current.Resources["DialogAcrylicBrush"] as Brush
                    };
                    await dialog.ShowAsync();

                    return;
                }
                FI.Glyph      = "\uEB52";
                FI.Foreground = new SolidColorBrush(Colors.Red);
                MusicList.ThisPage.FavouriteMusicCollection.Add(new PlayList(SSM.MusicName, SSM.Artist, SSM.Album, SSM.Duration, SSM.ImageUrl, SSM.SongID[0], SSM.MVid));
                MediaPlaybackItem Item = new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri(MusicURL)));

                MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                Props.Type = Windows.Media.MediaPlaybackType.Music;
                Props.MusicProperties.Title  = SSM.MusicName;
                Props.MusicProperties.Artist = SSM.Artist;
                Item.ApplyDisplayProperties(Props);
                MediaPlayList.FavouriteSongList.Items.Add(Item);

                await SQLite.GetInstance().SetMusicDataAsync(SSM.MusicName, SSM.Artist, SSM.Album, SSM.Duration, SSM.ImageUrl, SSM.SongID[0], SSM.MVid);
            }
            else
            {
                FI.Glyph      = "\uEB51";
                FI.Foreground = new SolidColorBrush(Colors.White);
                for (int i = 0; i < MusicList.ThisPage.FavouriteMusicCollection.Count; i++)
                {
                    if (MusicList.ThisPage.FavouriteMusicCollection[i].SongID == SSM.SongID[0])
                    {
                        await SQLite.GetInstance().DeleteMusicAsync(MusicList.ThisPage.FavouriteMusicCollection[i]);

                        MusicList.ThisPage.FavouriteMusicCollection.RemoveAt(i);
                        MediaPlayList.FavouriteSongList.Items.RemoveAt(i);
                        break;
                    }
                }
            }
        }
示例#10
0
        private async void PlayAll_Click(object sender, RoutedEventArgs e)
        {
            bool ExistCannotPlay = false;

            if (MediaPlayList.AlbumSongList.Items.Count != 0)
            {
                MediaPlayList.AlbumSongBackup.Clear();
                MediaPlayList.AlbumSongList.Items.Clear();
            }

            MusicPage.ThisPage.MediaControl.AutoPlay           = true;
            MusicPage.ThisPage.MediaControl.MediaPlayer.Source = MediaPlayList.AlbumSongList;

            foreach (SearchSingleMusic item in AlbumCollection)
            {
                MediaPlayList.AlbumSongBackup.Add(new SearchSingleMusic(item.MusicName, item.Artist, item.Album, item.Duration, item.SongID[0], item.ImageUrl, item.MVid));

                string uri = (await NeteaseMusicAPI.GetInstance().GetSongsUrlAsync(item.SongID)).Data[0].Url;
                if (uri == null)
                {
                    ExistCannotPlay = true;
                    continue;
                }

                //采用延迟加载技术,仅当该歌曲处于即将播放状态时才调用Binder_Binding加载资源
                MediaBinder binder = new MediaBinder
                {
                    Token = uri
                };
                binder.Binding += Binder_Binding;
                MediaPlaybackItem Item = new MediaPlaybackItem(MediaSource.CreateFromMediaBinder(binder));

                //与系统的SMTC集成
                MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                Props.Type = Windows.Media.MediaPlaybackType.Music;
                Props.MusicProperties.Title  = item.MusicName;
                Props.MusicProperties.Artist = item.Album;
                Item.ApplyDisplayProperties(Props);

                MediaPlayList.AlbumSongList.Items.Add(Item);
            }
            if (ExistCannotPlay)
            {
                ExistCannotPlay = false;
                ContentDialog dialog = new ContentDialog
                {
                    Title           = "抱歉",
                    Content         = "部分歌曲暂时无法播放,已自动忽略",
                    CloseButtonText = "确定",
                    Background      = Application.Current.Resources["DialogAcrylicBrush"] as Brush
                };
                await dialog.ShowAsync();
            }
        }
示例#11
0
        private async Task Initialize()
        {
            using (IRandomAccessStream Stream = await MediaFile.GetRandomAccessStreamFromFileAsync(FileAccessMode.Read).ConfigureAwait(true))
            {
                Source = MediaSource.CreateFromStream(Stream, MIMEDictionary[MediaFile.Type.ToLower()]);
                MediaPlaybackItem Item = new MediaPlaybackItem(Source);

                switch (MediaFile.Type.ToLower())
                {
                case ".mp3":
                case ".flac":
                case ".wma":
                case ".m4a":
                {
                    MusicCover.Visibility = Visibility.Visible;

                    MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                    Props.Type = Windows.Media.MediaPlaybackType.Music;
                    Props.MusicProperties.Title       = MediaFile.DisplayName;
                    Props.MusicProperties.AlbumArtist = GetArtist();

                    Item.ApplyDisplayProperties(Props);

                    if (await GetMusicCoverAsync().ConfigureAwait(true) is BitmapImage Thumbnail)
                    {
                        Cover.Source     = Thumbnail;
                        Cover.Visibility = Visibility.Visible;
                    }
                    else
                    {
                        Cover.Visibility = Visibility.Collapsed;
                    }

                    Display.Text     = $"{Globalization.GetString("Media_Tip_Text")} {MediaFile.DisplayName}";
                    MVControl.Source = Item;
                    break;
                }

                default:
                {
                    MusicCover.Visibility = Visibility.Collapsed;

                    MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                    Props.Type = Windows.Media.MediaPlaybackType.Video;
                    Props.VideoProperties.Title = MediaFile.DisplayName;
                    Item.ApplyDisplayProperties(Props);

                    MVControl.Source = Item;
                    break;
                }
                }
            }
        }
示例#12
0
        private async void BtnPlay_ClickAsync(object sender, RoutedEventArgs e)
        {
            if (!User.IsLogIn())
            {
                await new ContentDialog
                {
                    Title             = "Информация",
                    Content           = "Авторизуйтесь в системе для получения возможности прослушивания песен",
                    PrimaryButtonText = "ОК"
                }.ShowAsync();
                return;
            }
            _mediaElement.MediaPlayer.Pause();
            IRandomAccessStream src = null;
            await Task.Run(() =>
            {
                App app = Application.Current as App;
                try
                {
                    using (SqlConnection connection = new SqlConnection(app.GetConnectionString()))
                    {
                        connection.Open();
                        SqlCommand cmd  = connection.CreateCommand();
                        cmd.CommandText = string.Format(DBQueryCollection.QUERY_FOR_MUSIC_SRC, _track.SrcId.ToString());
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            reader.Read();
                            src = WindowsRuntimeStreamExtensions.AsRandomAccessStream(reader.GetStream(0));
                        }
                    }
                }
                catch (Exception)
                {
                    ShowErrorDialog();
                    return;
                }
            });

            MediaSource                mediaSource       = MediaSource.CreateFromStream(src, "MPEG");
            MediaPlaybackItem          mediaPlaybackItem = new MediaPlaybackItem(mediaSource);
            MediaItemDisplayProperties props             = mediaPlaybackItem.GetDisplayProperties();

            props.Type = Windows.Media.MediaPlaybackType.Music;
            props.MusicProperties.Artist     = _track.Artist.Name;
            props.MusicProperties.AlbumTitle = _track.Album.Name;
            props.MusicProperties.Title      = _track.Name;
            mediaPlaybackItem.ApplyDisplayProperties(props);
            _mediaElement.MediaPlayer.Source = mediaPlaybackItem;
            _mediaElement.MediaPlayer.Play();
        }
示例#13
0
        public static async Task <MediaPlaybackItem> CreateMediaPlaybackItemAsync(StorageFile song)
        {
            MediaPlaybackItem item = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(song));

            MediaItemDisplayProperties properties      = item.GetDisplayProperties();
            MusicProperties            musicProperties = await song.Properties.GetMusicPropertiesAsync();

            properties.Type = Windows.Media.MediaPlaybackType.Music;
            properties.MusicProperties.Artist = musicProperties.Artist;
            properties.MusicProperties.Title  = musicProperties.Title;

            item.ApplyDisplayProperties(properties);
            return(item);
        }
示例#14
0
        private async void PlayMediaPlaybackItem()
        {
            //Create a new picker
            FileOpenPicker filePicker = new FileOpenPicker();

            //Add filetype filters.  In this case wmv and mp4.
            filePicker.FileTypeFilter.Add(".wmv");
            filePicker.FileTypeFilter.Add(".mp4");
            filePicker.FileTypeFilter.Add(".mkv");

            //Set picker start location to the video library
            filePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;

            //Retrieve file from picker
            StorageFile file = await filePicker.PickSingleFileAsync();

            //<SnippetPlayMediaPlaybackItem>
            _mediaSource       = MediaSource.CreateFromStorageFile(file);
            _mediaPlaybackItem = new MediaPlaybackItem(_mediaSource);

            _mediaPlaybackItem.AudioTracksChanged         += PlaybackItem_AudioTracksChanged;
            _mediaPlaybackItem.VideoTracksChanged         += MediaPlaybackItem_VideoTracksChanged;
            _mediaPlaybackItem.TimedMetadataTracksChanged += MediaPlaybackItem_TimedMetadataTracksChanged;

            _mediaPlayer        = new MediaPlayer();
            _mediaPlayer.Source = _mediaPlaybackItem;
            mediaPlayerElement.SetMediaPlayer(_mediaPlayer);
            //</SnippetPlayMediaPlaybackItem>


            var mediaPlaybackItem = _mediaPlaybackItem;
            //<SnippetSetVideoProperties>
            MediaItemDisplayProperties props = mediaPlaybackItem.GetDisplayProperties();

            props.Type = Windows.Media.MediaPlaybackType.Video;
            props.VideoProperties.Title    = "Video title";
            props.VideoProperties.Subtitle = "Video subtitle";
            props.VideoProperties.Genres.Add("Documentary");
            mediaPlaybackItem.ApplyDisplayProperties(props);
            //</SnippetSetVideoProperties>

            //<SnippetSetMusicProperties>
            props      = mediaPlaybackItem.GetDisplayProperties();
            props.Type = Windows.Media.MediaPlaybackType.Music;
            props.MusicProperties.Title  = "Song title";
            props.MusicProperties.Artist = "Song artist";
            props.MusicProperties.Genres.Add("Polka");
            mediaPlaybackItem.ApplyDisplayProperties(props);
            //</SnippetSetMusicProperties>
        }
示例#15
0
        public async Task <MediaPlaybackItem> ToPlaybackItem()
        {
            // Create the media source from the Uri
            var source = MediaSource.CreateFromUri(MediaUri);

            // Create a configurable playback item backed by the media source
            var playbackItem = new MediaPlaybackItem(source);

            MediaItemDisplayProperties displayProperties = playbackItem.GetDisplayProperties();

            displayProperties.Type = MediaPlaybackType.Music;
            displayProperties.MusicProperties.Title = this.Title;
            playbackItem.ApplyDisplayProperties(displayProperties);

            return(playbackItem);
        }
示例#16
0
        private void BuildMediaPlaybackList()
        {
            // 建立 MediaPlaybackList,並設定 MusicProperties,讓 SMTC 更新 UI
            for (int i = 1; i < 5; i++)
            {
                MediaSource                source          = MediaSource.CreateFromUri(new Uri($"{Package.Current.InstalledLocation.Path}/WPFAndUWPSample/Assets/mp3/0{i}.mp3", UriKind.RelativeOrAbsolute));
                MediaPlaybackItem          item            = new MediaPlaybackItem(source);
                MediaItemDisplayProperties displayProperty = item.GetDisplayProperties();
                displayProperty.Type = MediaPlaybackType.Music;
                displayProperty.MusicProperties.Title       = $"0{i}.mp3";
                displayProperty.MusicProperties.AlbumArtist = "JJ";
                displayProperty.Thumbnail = RandomAccessStreamReference.CreateFromUri(new Uri($"{Package.Current.InstalledLocation.Path}/WPFAndUWPSample/Assets/mp3/0{i}.jpg"));;
                item.ApplyDisplayProperties(displayProperty);

                MediaPlaybackList.Items.Add(item);
            }
        }
示例#17
0
        /// <summary>
        /// Updates the UI with the information of the currently playing track
        /// </summary>
        public async Task UpdateUI()
        {
            if (Settings.repeatEnabled)
            {
                Repeat.Visibility        = Visibility.Collapsed;
                RepeatEnabled.Visibility = Visibility.Visible;
            }
            if (Settings.shuffleEnabled)
            {
                Shuffle.Visibility        = Visibility.Collapsed;
                ShuffleEnabled.Visibility = Visibility.Visible;
            }
            if (App.playbackService.currentlyPlayingItem != null)
            {
                MediaItemDisplayProperties displayProperties = App.playbackService.currentlyPlayingItem.GetDisplayProperties();
                TrackName.Text   = displayProperties.MusicProperties.Title;
                TrackArtist.Text = displayProperties.MusicProperties.AlbumTitle;
                if (displayProperties.Thumbnail != null)
                {
                    IRandomAccessStreamWithContentType thumbnail = await displayProperties.Thumbnail.OpenReadAsync();

                    BitmapImage bitmapImage = new BitmapImage();
                    bitmapImage.SetSource(thumbnail);
                    AlbumArt.Source = bitmapImage;
                }
                if (App.playbackService.Player.PlaybackSession.PlaybackState == MediaPlaybackState.Playing)
                {
                    Play.Visibility = Visibility.Collapsed;
                    uiUpdateTimer.Start();
                }
                else
                {
                    Pause.Visibility = Visibility.Collapsed;
                }
                UpdateProgressUI();
                LoadingTrack.IsActive = false;
            }
            else if (loading)
            {
                SetLoadingActive(true);
            }
            else
            {
                LoadingTrack.IsActive = false;
            }
        }
 private static void Mpl_ItemFailed(MediaPlaybackList sender, MediaPlaybackItemFailedEventArgs args)
 {
     mp.Pause();
     mpl.Items.Clear();
     for (int i = 0; i < musicList.Count; i++)
     {
         mpl.Items.Add(new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri("http://mp3-cdn.luoo.net/low/luoo/radio" + fromVol + "/" + Int32.Parse(musicList[i]).ToString("0") + ".mp3"))));
     }
     for (int i = 0; i < mpl.Items.Count; i++)
     {
         MediaItemDisplayProperties props = mpl.Items[i].GetDisplayProperties();
         props.Type = Windows.Media.MediaPlaybackType.Music;
         props.MusicProperties.Title = titleList[i];
         mpl.Items[i].ApplyDisplayProperties(props);
     }
     mp.Play();
     //throw new NotImplementedException();
 }
示例#19
0
        private async Task <bool> PreparePlayback()
        {
            IsPreparing = true;

            // Create an audio stream of the text
            SpeechSynthesisStream synthStream;

            // Check if any text has been entered, otherwise play a secret message
            if (Text == "")
            {
                // Randomize Text
                SetSecretText();
                synthStream = await _speechSynthesizer.SynthesizeTextToStreamAsync(SecretText);
            }
            else
            {
                synthStream = await _speechSynthesizer.SynthesizeTextToStreamAsync(Text);
            }
            MediaSource mediaSource = MediaSource.CreateFromStream(synthStream, "audio");
            // Now make a PlaybackItem from this stream
            MediaPlaybackItem playbackItem = new MediaPlaybackItem(mediaSource);

            // Now set the properties of this PlaybackItem
            MediaItemDisplayProperties mediaProperties = playbackItem.GetDisplayProperties();

            mediaProperties.Type = MediaPlaybackType.Music;
            mediaProperties.MusicProperties.Artist = ("Talkinator " + ResourceExtensions.GetLocalized("VoicedBy") + " " + SelectedVoice.VoiceName);
            mediaProperties.MusicProperties.Title  = ResourceExtensions.GetLocalized("SpokenText");

            playbackItem.ApplyDisplayProperties(mediaProperties);

            // Set this to enabled to make sure the info entered above will be shown in the System UI
            _mediaPlayer.SystemMediaTransportControls.IsEnabled = true;

            // Set the created item as a Source into the MediaPlayer
            _mediaPlayer.Source = playbackItem;

            // #TODO: Implement AutoPlay as well? Need to test their importance first
            _mediaPlayer.MediaEnded += _mediaPlayer_MediaEnded;

            // #TODO: Reimplement easter eggs
            IsPreparing = false;
            return(true);
        }
示例#20
0
        private void BuildMediaPlaybackList()
        {
            for (int i = 1; i < 5; i++)
            {
                string file = $"ms-appx:///Assets/mp3/0{i}.mp3";

                MediaSource                source          = MediaSource.CreateFromUri(new Uri(file, UriKind.RelativeOrAbsolute));
                MediaPlaybackItem          item            = new MediaPlaybackItem(source);
                MediaItemDisplayProperties displayProperty = item.GetDisplayProperties();
                displayProperty.Type = MediaPlaybackType.Music;
                displayProperty.MusicProperties.Title       = $"0{i}.mp3";
                displayProperty.MusicProperties.AlbumArtist = "JJ";
                displayProperty.Thumbnail = RandomAccessStreamReference.CreateFromUri(new Uri($"ms-appx:///Assets/mp3/0{i}.jpg", UriKind.RelativeOrAbsolute));
                item.ApplyDisplayProperties(displayProperty);

                PlaybackList.Add(new MediaPlaybackItemDataWrapper(item));
                MediaPlaybackList.Items.Add(item);
            }
        }
示例#21
0
        private async void USBMediaPlayer_Loaded(object sender, RoutedEventArgs e)
        {
            if (MediaFile.FileType == ".mp3" || MediaFile.FileType == ".flac" || MediaFile.FileType == ".wma" || MediaFile.FileType == ".m4a" || MediaFile.FileType == ".alac")
            {
                MusicCover.Visibility = Visibility.Visible;

                var Artist = GetMusicCoverAsync();

                MediaPlaybackItem          Item  = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(MediaFile));
                MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                //若为音乐此处必须设定为Music
                Props.Type = Windows.Media.MediaPlaybackType.Music;
                Props.MusicProperties.Title = MediaFile.DisplayName;

                try
                {
                    Props.MusicProperties.AlbumArtist = await Artist;
                }
                catch (Exception)
                {
                    Cover.Visibility = Visibility.Collapsed;
                }
                Item.ApplyDisplayProperties(Props);

                Display.Text     = "请欣赏:" + MediaFile.DisplayName;
                MVControl.Source = Item;
            }
            else
            {
                MusicCover.Visibility = Visibility.Collapsed;

                MediaPlaybackItem          Item  = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(MediaFile));
                MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                //若为视频此处必须设定为Video
                Props.Type = Windows.Media.MediaPlaybackType.Video;
                Props.VideoProperties.Title = MediaFile.DisplayName;
                Item.ApplyDisplayProperties(Props);

                MVControl.Source = Item;
            }
        }
示例#22
0
        public async Task <List <MediaPlaybackItem> > GetPlayableItems(Album album)
        {
            List <MediaPlaybackItem> res = new List <MediaPlaybackItem>();

            try
            {
                RandomAccessStreamReference thumbnail = null;
                if (album.HasCover)
                {
                    StorageFile thumnailFile = await StorageFile.GetFileFromPathAsync(album.CoverPath);

                    thumbnail = RandomAccessStreamReference.CreateFromFile(thumnailFile);
                }

                foreach (Track track in album.Tracks)
                {
                    StorageFile file = await StorageFile.GetFileFromPathAsync(Path.Combine(Root.Path, track.FilePath));

                    MediaPlaybackItem item = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(file));

                    MediaItemDisplayProperties props = item.GetDisplayProperties();
                    props.Type = Windows.Media.MediaPlaybackType.Music;
                    props.MusicProperties.Title       = $"{album.Title} - {track.Title}";
                    props.MusicProperties.Artist      = album.Composer;
                    props.MusicProperties.TrackNumber = (uint)track.Number;
                    props.Thumbnail = thumbnail;
                    item.ApplyDisplayProperties(props);
                    res.Add(item);

                    item.Source.CustomProperties.Add("track", track);
                    item.Source.CustomProperties.Add("album", album);
                }
            }
            catch (Exception)
            {
                return(null);
            }

            return(res);
        }
示例#23
0
        private async void PlayingService_OnPlayingSongChanged()
        {
            ChangeImage();
            ChangePlayBar(PlayingService.PlayingSong, PlayingService.PlayingAlbumBitmapImage, PlayingService.PlayingSong.Name, PlayingService.PlayingSong.ar.First().name, PlayingService.PlayingSong.al.name, PlayingService.PlayingSong.dt / 1000);
            if ((Application.Current as App).playingPage != null)
            {
                (Application.Current as App).playingPage.LoadLayout();
            }
            if ((Application.Current as App).compactOverlayPage != null)
            {
                (Application.Current as App).compactOverlayPage.UpdateLayout();
            }
            if (PlayingService.PlayingSongUrlRoot.data.First().url == null)
            {
                NotifyPopup notifyPopup = new NotifyPopup("播放地址错误");
                notifyPopup.Show();
                //跳过当前到下一首
                PlayingService.PlayNextSongs();
                return;
            }
            _mediaSource = await Task.Run(() => MediaSource.CreateFromUri(new Uri(PlayingService.PlayingSongUrlRoot.data.First().url)));

            _mediaSource.OpenOperationCompleted += _mediaSource_OpenOperationCompleted;
            _mediaPlaybackItem  = new MediaPlaybackItem(_mediaSource);
            _mediaPlayer.Source = _mediaPlaybackItem;
            _mediaTimelineController.Start();
            //SetLastPlayedSong();

            //修改SMTC 显示的元数据

            MediaItemDisplayProperties props = _mediaPlaybackItem.GetDisplayProperties();

            props.Type = Windows.Media.MediaPlaybackType.Music;
            props.MusicProperties.Title  = PlayingService.PlayingSong.Name;
            props.MusicProperties.Artist = PlayingService.PlayingSong.ar.First().name;
            props.Thumbnail = RandomAccessStreamReference.CreateFromFile(await ApplicationData.Current.LocalFolder.TryGetItemAsync(ConfigService.ImageFilename) as StorageFile);
            _mediaPlaybackItem.ApplyDisplayProperties(props);
        }
示例#24
0
        private async Task Initialize()
        {
            if (MediaFile.FileType == ".mp3" || MediaFile.FileType == ".flac" || MediaFile.FileType == ".wma" || MediaFile.FileType == ".m4a" || MediaFile.FileType == ".alac")
            {
                MusicCover.Visibility = Visibility.Visible;

                MediaPlaybackItem Item = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(MediaFile));

                MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                Props.Type = Windows.Media.MediaPlaybackType.Music;
                Props.MusicProperties.Title = MediaFile.DisplayName;

                try
                {
                    Props.MusicProperties.AlbumArtist = await GetMusicCoverAsync().ConfigureAwait(true);
                }
                catch (Exception)
                {
                    Cover.Visibility = Visibility.Collapsed;
                }
                Item.ApplyDisplayProperties(Props);

                Display.Text     = $"{Globalization.GetString("Media_Tip_Text")} {MediaFile.DisplayName}";
                MVControl.Source = Item;
            }
            else
            {
                MusicCover.Visibility = Visibility.Collapsed;

                MediaPlaybackItem          Item  = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(MediaFile));
                MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                Props.Type = Windows.Media.MediaPlaybackType.Video;
                Props.VideoProperties.Title = MediaFile.DisplayName;
                Item.ApplyDisplayProperties(Props);

                MVControl.Source = Item;
            }
        }
示例#25
0
        private async Task <MediaPlaybackItem> GetPlayableItem(Track track)
        {
            try
            {
                Album album = track.Album;

                RandomAccessStreamReference thumbnail = null;
                if (album.HasCover)
                {
                    StorageFile thumnailFile = await StorageFile.GetFileFromPathAsync(album.CoverPath);

                    thumbnail = RandomAccessStreamReference.CreateFromFile(thumnailFile);
                }

                StorageFile file = await StorageFile.GetFileFromPathAsync(Path.Combine(libraryService.CurrentLibrary.Root.Path, track.FilePath));

                MediaPlaybackItem item = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(file));

                MediaItemDisplayProperties props = item.GetDisplayProperties();
                props.Type = Windows.Media.MediaPlaybackType.Music;
                props.MusicProperties.Title       = $"{album.Title} - {track.Title}";
                props.MusicProperties.Artist      = album.Composer;
                props.MusicProperties.TrackNumber = (uint)track.Number;
                props.Thumbnail = thumbnail;

                item.Source.CustomProperties["track"] = track;

                item.ApplyDisplayProperties(props);

                return(item);
            }
            catch (Exception)
            {
                return(null);
            }
        }
示例#26
0
        public static async void SyncPlayList()
        {
            if (nowsid != RequestId && !Syncing)
            {
                Syncing = true;
                nowsid  = RequestId;
                if (List.Count == 0)
                {
                    PlaybackList.Items.Clear();
                    MPIToIndex.Clear();
                    Syncing = false;
                    return;
                }
                if (PlaybackList.Items.Count > List.Count)
                {
                    MPIToIndex.Clear();
                    for (int i = List.Count - 1; i < PlaybackList.Items.Count; i++)
                    {
                        PlaybackList.Items.RemoveAt(i);
                    }
                }
                for (int i = 0; i < List.Count; i++)
                {
                    if (PlaybackList.Items.Count <= i || List[i].MediaItem == null || List[i].MediaItem.Source.State == MediaSourceState.Failed || PlaybackList.Items[i] != List[i].MediaItem)
                    {
                        MediaPlaybackItem           mediaPlaybackItem;
                        RandomAccessStreamReference rasr;
                        if (List[i].ItemType == HyPlayItemType.Netease)
                        {
                            try
                            {
                                StorageFile item =
                                    await Windows.Storage.ApplicationData.Current.LocalCacheFolder.GetFileAsync(
                                        "SongCache\\" + List[i].NcPlayItem.sid +
                                        "." + List[i].NcPlayItem.subext.ToLower());

                                if (List[i].NcPlayItem.size == (await item.GetBasicPropertiesAsync()).Size.ToString())
                                {
                                    mediaPlaybackItem = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(item));
                                }
                                else
                                {
                                    throw new Exception("文件大小不一致");
                                }
                            }
                            catch (Exception)
                            {
                                mediaPlaybackItem = new MediaPlaybackItem(MediaSource.CreateFromUri(new Uri(List[i].NcPlayItem.url)));
                            }
                            rasr = RandomAccessStreamReference.CreateFromUri(new Uri(List[i].NcPlayItem.Album.cover + "?param=" + StaticSource.PICSIZE_AUDIO_PLAYER_COVER));
                            List[i].MediaItem = mediaPlaybackItem;
                        }
                        else
                        {
                            mediaPlaybackItem = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(List[i].AudioInfo.LocalSongFile));
                            rasr = List[i].AudioInfo.Thumbnail;
                        }

                        MediaItemDisplayProperties properties = mediaPlaybackItem.GetDisplayProperties();
                        properties.Type = MediaPlaybackType.Music;
                        properties.MusicProperties.AlbumTitle = List[i].AudioInfo.Album;
                        properties.MusicProperties.Artist     = List[i].AudioInfo.Artist;
                        properties.MusicProperties.Title      = List[i].AudioInfo.SongName;
                        properties.Thumbnail = rasr;
                        List[i].MediaItem    = mediaPlaybackItem;

                        List[i].MediaItem.ApplyDisplayProperties(properties);
                        MPIToIndex[List[i].MediaItem] = i;
                        PlaybackList.Items.Add(List[i].MediaItem);
                        Invoke(() =>
                        {
                            if (i >= 0 && List.Count > i)
                            {
                                OnPlayListAdd?.Invoke(List[i]);
                            }
                        });
                    }

                    if (i >= 0 && List.Count > i && List[i].MediaItem != PlaybackList.Items[i])
                    {
                        if (PlaybackList.Items.Contains(List[i].MediaItem))
                        {//已经有这个了
                            PlaybackList.Items.Remove(List[i].MediaItem);
                        }
                        PlaybackList.Items[i] = List[i].MediaItem;
                    }
                    MPIToIndex[List[i].MediaItem] = i;
                }
                Syncing = false;
            }
        }
示例#27
0
        private async Task <PlayingSong> AddSongInternal(Song song)
        {
            Task                       getCover;
            MediaSource                media;
            List <PlayingSong>         list;
            MediaItemDisplayProperties oldProperties = null;

            if (this.mediaItemLookup.ContainsKey(song))
            {
                list = this.mediaItemLookup[song];
                var oldMedia = list.FirstOrDefault()?.MediaPlaybackItem;
                media = oldMedia?.Source;
                if (media is null) // Async could add list before mediasource is added.
                {
                    media = await LibraryRegistry <MediaSource, Uri> .Get(song.LibraryProvider).GetMediaSource(song.MediaId, default);
                }
                else
                {
                    oldProperties = oldMedia.GetDisplayProperties();
                }
            }
            else
            {
                list = new List <PlayingSong>();
                this.mediaItemLookup.Add(song, list);
                media = await LibraryRegistry <MediaSource, Uri> .Get(song.LibraryProvider).GetMediaSource(song.MediaId, default);
            }
            if (media is null)
            {
                return(null);
            }
            var mediaItem = new MediaPlaybackItem(media);


            var viewModel = new PlayingSong(mediaItem, song);

            this.playbackItemLookup.Add(mediaItem, viewModel);
            list.Add(viewModel);

            if (oldProperties is null)
            {
                var displayProperties = mediaItem.GetDisplayProperties();
                displayProperties.Type = Windows.Media.MediaPlaybackType.Music;
                displayProperties.MusicProperties.AlbumTitle  = song.AlbumName;
                displayProperties.MusicProperties.TrackNumber = (uint)song.Track;
                displayProperties.MusicProperties.Title       = song.Title;

                displayProperties.MusicProperties.Genres.Clear();
                foreach (var genre in song.Genres)
                {
                    displayProperties.MusicProperties.Genres.Add(genre);
                }

                displayProperties.MusicProperties.Artist = string.Join(", ", song.Interpreters);

                mediaItem.ApplyDisplayProperties(displayProperties);

                var coverTask = song.GetCover(300, default);
                getCover = coverTask.ContinueWith(t =>
                {
                    var coverStreamReferance    = t.Result;
                    displayProperties.Thumbnail = coverStreamReferance;
                    mediaItem.ApplyDisplayProperties(displayProperties);
                });
            }
            else
            {
                getCover = null;
            }

            this.mediaPlaybackList.Items.Add(mediaItem);

            int indexAdded;

            if (this.mediaPlaybackList.ShuffleEnabled)
            {
                indexAdded = this.mediaPlaybackList.ShuffledItems.Select((value, index) => (value, index)).First(x => x.value == mediaItem).index;
            }
            else
            {
                indexAdded = this.mediaPlaybackList.Items.Count - 1;
            }

            this.currentPlaylist.Insert(indexAdded, viewModel);

            if (getCover != null)
            {
                await getCover;
            }
            return(viewModel);
        }
示例#28
0
        /// <summary>
        /// Load the range of tracks from the remote playlist
        /// </summary>
        /// <param name="start">The first track to load from remote</param>
        /// <param name="end">The last track to load from remote</param>
        /// <param name="lockOverride">Whether or not to ignore if the lock is set (Used when recursing into itself)</param>
        /// <returns>True a total of end - start tracks are downloaded, false otherwise</returns>
        public async Task <bool> LoadTracks(int start, int end, bool lockOverride)
        {
            long loadingKey = DateTime.Now.Ticks;

            MainPage.AddLoadingLock(loadingKey);
            if (loadLock && !lockOverride)
            {
                return(false);
            }
            loadLock = true;
            int successes = 0;
            int limit;

            if (shuffling)
            {
                if (shufflePositionsAvailable.Count == 0)
                {
                    ReFillShufflePositionsAvailable();
                }
                if (shufflePositionsAvailable.Count < end - start)
                {
                    limit = shufflePositionsAvailable.Count;
                }
                else
                {
                    limit = end - start;
                }
            }
            else
            {
                if (totalTracks > 0 && end >= totalTracks)
                {
                    end = totalTracks - 1;
                }
                nextRemoteAttempts.Insert(0, end);
                if (start == 0)
                {
                    prevRemoteAttempts.Add(start + TRACKS_PER_REQUEST);
                }
                else
                {
                    prevRemoteAttempts.Add(start);
                }

                limit = end - start + 1;
            }

            App.mainPage.SetLoadingProgress(source, 0, limit, localLock, loadingKey);

            if (localLock != App.playbackService.GlobalLock)
            {
                return(false);
            }

            List <Track> tracks = new List <Track>();

            if (shuffling)
            {
                tracks = await GetTracksRandom(limit);
            }
            else
            {
                tracks = await GetTracksInRange(start, limit);
            }

            if (tracks.Count == totalTracks)
            {
                limit = totalTracks;
                App.mainPage.SetLoadingProgress(source, 0, limit, localLock, loadingKey);
            }

            if (tracks.Count != limit)
            {
                UpdateFailuresCount(limit - tracks.Count, loadingKey);
            }

            List <KeyValuePair <MediaSource, Track> > sources = new List <KeyValuePair <MediaSource, Track> >();

            if (source == PlaybackSource.Spotify)
            {
                for (int i = 0; i < tracks.Count; i++)
                {
                    Track track = tracks[i];
                    if (localLock == App.playbackService.GlobalLock)
                    {
                        if (track.previewUrl != "")
                        {
                            sources.Add(new KeyValuePair <MediaSource, Track>(MediaSource.CreateFromUri(new Uri(track.previewUrl)), track));
                        }
                        else
                        {
                            UpdateFailuresCount(1, loadingKey);
                        }
                    }
                    App.mainPage.SetLoadingProgress(source, i + 1 + limit - tracks.Count, limit, localLock, loadingKey);
                }
            }
            else if (source == PlaybackSource.YouTube && localLock == App.playbackService.GlobalLock)
            {
                for (int i = 0; i < tracks.Count; i++)
                {
                    Track track = tracks[i];

                    string videoId = "";
                    if (localLock == App.playbackService.GlobalLock)
                    {
                        videoId = await SearchForVideoId(track);
                    }

                    if (localLock == App.playbackService.GlobalLock)
                    {
                        if (videoId == "")
                        {
                            UpdateFailuresCount(1, loadingKey);
                        }
                        else
                        {
                            try
                            {
                                sources.Add(new KeyValuePair <MediaSource, Track>(await GetAudioAsync(videoId, track.name), track));
                            }
                            catch (Exception)
                            {
                                UpdateFailuresCount(1, loadingKey);
                            }
                        }
                    }
                    App.mainPage.SetLoadingProgress(PlaybackSource.YouTube, i + 1 + limit - tracks.Count, limit, localLock, loadingKey);
                }
            }

            bool firstPlay = false;

            for (int i = 0; i < sources.Count; i++)
            {
                KeyValuePair <MediaSource, Track> pair = sources[i];
                if (localLock == App.playbackService.GlobalLock)
                {
                    MediaPlaybackItem          playbackItem      = new MediaPlaybackItem(pair.Key);
                    MediaItemDisplayProperties displayProperties = playbackItem.GetDisplayProperties();
                    displayProperties.Type = MediaPlaybackType.Music;
                    displayProperties.MusicProperties.Title      = pair.Value.name;
                    displayProperties.MusicProperties.AlbumTitle = pair.Value.album.name;
                    displayProperties.MusicProperties.Artist     = pair.Value.GetMainArtistName();
                    if (pair.Value.album.imageUrl != "")
                    {
                        displayProperties.Thumbnail = RandomAccessStreamReference.CreateFromUri(new Uri(pair.Value.album.imageUrl));
                    }
                    playbackItem.ApplyDisplayProperties(displayProperties);
                    pair.Key.CustomProperties["mediaItemId"] = pair.Value.id;

                    string id = GetMediaItemId(playbackItem);
                    if (!playlistMediaIds.Contains(id))
                    {
                        App.playbackService.AddToQueue(playbackItem, localLock);
                        playlistMediaIds.Add(id);
                        successes++;
                    }

                    if (currentlyPlaying == "")
                    {
                        firstPlay        = true;
                        currentlyPlaying = GetMediaItemId(playbackItem);
                    }
                }
            }

            if (firstPlay)
            {
                App.playbackService.PlayFromBeginning(localLock);
            }

            MainPage.RemoveLoadingLock(loadingKey);

            if (shuffling)
            {
                if (successes != limit && shufflePositionsAvailable.Count > 0)
                {
                    return(await LoadTracks(0, limit - successes, true));
                }
            }
            else
            {
                if (successes != limit && end < totalTracks - 1)
                {
                    return(await LoadTracks(start + limit, start + limit + (limit - tracks.Count), true));
                }
            }

            loadLock = false;
            return(tracks.Count == limit);
        }
示例#29
0
        /// <summary>
        /// Load the range of tracks from the remote playlist in reverse order
        /// </summary>
        /// <param name="start">The start position on remote to download to local, the last position added to the queue</param>
        /// <param name="end">The end position on remote to download to local, the first position added to the queue</param>
        /// <param name="lockOverride">Whether or not to ignore if the lock is set (Used when recursing into itself)</param>
        /// <returns>True a total of end - start tracks are downloaded, false otherwise</returns>
        public async Task <bool> LoadTracksReverse(int start, int end, bool lockOverride)
        {
            long loadingKey = DateTime.Now.Ticks;

            MainPage.AddLoadingLock(loadingKey);
            if (loadLock && !lockOverride)
            {
                return(false);
            }
            loadLock = true;
            int successes = 0;

            if (start < 0)
            {
                start = 0;
            }
            nextRemoteAttempts.Add(end);
            prevRemoteAttempts.Insert(0, start);

            int limit = end - start + 1;

            App.mainPage.SetLoadingProgress(source, 0, limit, localLock, loadingKey);

            if (localLock != App.playbackService.GlobalLock)
            {
                return(false);
            }

            List <Track> tracks = await GetTracksInRange(start, limit);

            if (tracks.Count != limit)
            {
                UpdateFailuresCount(limit - tracks.Count, loadingKey);
            }
            else
            {
                List <KeyValuePair <MediaSource, Track> > sources = new List <KeyValuePair <MediaSource, Track> >();

                if (this.source == PlaybackSource.Spotify)
                {
                    for (int i = 0; i < tracks.Count; i++)
                    {
                        Track track = tracks[i];
                        if (localLock == App.playbackService.GlobalLock)
                        {
                            if (track.previewUrl != "")
                            {
                                sources.Add(new KeyValuePair <MediaSource, Track>(MediaSource.CreateFromUri(new Uri(track.previewUrl)), track));
                            }
                            else
                            {
                                UpdateFailuresCount(1, loadingKey);
                            }
                        }
                        App.mainPage.SetLoadingProgress(source, i + 1 + limit - tracks.Count, limit, localLock, loadingKey);
                    }
                }
                else if (this.source == PlaybackSource.YouTube && localLock == App.playbackService.GlobalLock)
                {
                    for (int i = 0; i < tracks.Count; i++)
                    {
                        Track track = tracks[i];

                        string videoId = "";
                        if (localLock == App.playbackService.GlobalLock)
                        {
                            videoId = await SearchForVideoId(track);
                        }

                        if (localLock == App.playbackService.GlobalLock)
                        {
                            if (videoId == "")
                            {
                                UpdateFailuresCount(1, loadingKey);
                            }
                            else
                            {
                                try
                                {
                                    sources.Add(new KeyValuePair <MediaSource, Track>(await GetAudioAsync(videoId, track.name), track));
                                }
                                catch (Exception)
                                {
                                    UpdateFailuresCount(1, loadingKey);
                                }
                            }
                        }
                        App.mainPage.SetLoadingProgress(PlaybackSource.YouTube, i + 1 + limit - tracks.Count, limit, localLock, loadingKey);
                    }
                }

                for (int i = sources.Count - 1; i >= 0; i--)
                {
                    KeyValuePair <MediaSource, Track> pair = sources[i];
                    if (localLock == App.playbackService.GlobalLock)
                    {
                        MediaPlaybackItem          playbackItem      = new MediaPlaybackItem(pair.Key);
                        MediaItemDisplayProperties displayProperties = playbackItem.GetDisplayProperties();
                        displayProperties.Type = MediaPlaybackType.Music;
                        displayProperties.MusicProperties.Title      = pair.Value.name;
                        displayProperties.MusicProperties.AlbumTitle = pair.Value.album.name;
                        displayProperties.MusicProperties.Artist     = pair.Value.GetMainArtistName();
                        if (pair.Value.album.imageUrl != "")
                        {
                            displayProperties.Thumbnail = RandomAccessStreamReference.CreateFromUri(new Uri(pair.Value.album.imageUrl));
                        }
                        playbackItem.ApplyDisplayProperties(displayProperties);
                        pair.Key.CustomProperties["mediaItemId"] = pair.Value.id;

                        string id = GetMediaItemId(playbackItem);
                        if (!playlistMediaIds.Contains(id))
                        {
                            App.playbackService.AddToBeginningOfQueue(playbackItem, localLock);
                            playlistMediaIds.Insert(0, id);
                            successes++;
                        }
                    }
                }
            }

            MainPage.RemoveLoadingLock(loadingKey);

            if (successes != limit && start > 0)
            {
                return(await LoadTracks(start - limit - (limit - tracks.Count), start + limit, true));
            }
            loadLock = false;
            return(tracks.Count == limit);
        }
        private async Task InitializeAsync()
        {
            try
            {
                using (IRandomAccessStream Stream = await MediaFile.GetRandomAccessStreamFromFileAsync(FileAccessMode.Read))
                {
                    Source = MediaSource.CreateFromStream(Stream, MIMEDictionary[MediaFile.Type.ToLower()]);
                    MediaPlaybackItem Item = new MediaPlaybackItem(Source);

                    switch (MediaFile.Type.ToLower())
                    {
                    case ".mp3":
                    case ".flac":
                    case ".wma":
                    case ".m4a":
                    {
                        MusicCover.Visibility = Visibility.Visible;

                        MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                        Props.Type = Windows.Media.MediaPlaybackType.Music;
                        Props.MusicProperties.Title       = MediaFile.DisplayName;
                        Props.MusicProperties.AlbumArtist = await GetArtistAsync();

                        Item.ApplyDisplayProperties(Props);

                        if (await GetMusicCoverAsync() is BitmapImage Thumbnail)
                        {
                            Cover.Source     = Thumbnail;
                            Cover.Visibility = Visibility.Visible;
                        }
                        else
                        {
                            Cover.Visibility = Visibility.Collapsed;
                        }

                        Display.Text     = $"{Globalization.GetString("Media_Tip_Text")} {MediaFile.DisplayName}";
                        MVControl.Source = Item;
                        break;
                    }

                    default:
                    {
                        MusicCover.Visibility = Visibility.Collapsed;

                        MediaItemDisplayProperties Props = Item.GetDisplayProperties();
                        Props.Type = Windows.Media.MediaPlaybackType.Video;
                        Props.VideoProperties.Title = MediaFile.DisplayName;
                        Item.ApplyDisplayProperties(Props);

                        MVControl.Source = Item;
                        break;
                    }
                    }
                }
            }
            catch (Exception ex)
            {
                LogTracer.Log(ex, "Could not load media because an exception was threw");

                QueueContentDialog Dialog = new QueueContentDialog
                {
                    Title           = Globalization.GetString("Common_Dialog_ErrorTitle"),
                    Content         = Globalization.GetString("QueueDialog_CouldNotLoadMedia_Content"),
                    CloseButtonText = Globalization.GetString("Common_Dialog_CloseButton")
                };

                await Dialog.ShowAsync();

                Frame.GoBack();
            }
        }