private MPMediaItemArtwork GetImageFromUrl(string imagePath) { MPMediaItemArtwork result = null; try { using (var nsUrl = new NSUrl(imagePath)) { using (var data = NSData.FromUrl(nsUrl)) { var image = UIImage.LoadFromData(data); result = new MPMediaItemArtwork(image); } } } catch { UIImage image = UIImage.FromBundle(imagePath); if (image != null) { result = new MPMediaItemArtwork(image); } } return(result); }
public void UpdateSong(Song song) { currentSong = song; if (song == null) { return; } try { nowPlayingInfo = new MPNowPlayingInfo { Title = song?.Name ?? "", Artist = song?.Artist ?? "", AlbumTitle = song?.Album ?? "", Genre = song?.Genre ?? "", Artwork = CreateDefaultArtwork(), }; SetAdditionInfo(song, nowPlayingInfo); artwork = null; FetchArtwork(song); OnSongChanged(song); App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo); } catch (Exception ex) { Console.WriteLine(ex); } }
public void UpdateSong(Song song) { if (song == null) { return; } try { nowPlayingInfo = new MPNowPlayingInfo { Title = song?.Name ?? "", Artist = song?.Artist ?? "", AlbumTitle = song?.Album ?? "", Genre = song?.Genre ?? "", Artwork = (new MPMediaItemArtwork(Images.GetDefaultAlbumArt(Images.AlbumArtScreenSize))), }; artwork = null; FetchArtwork(song); App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo); } catch (Exception ex) { Console.WriteLine(ex); } }
async void FetchArtwork(Song song) { try { var art = await song.GetLocalImage(Images.MaxScreenSize); if (art == null) { var url = await ArtworkManager.Shared.GetArtwork(song); if (string.IsNullOrWhiteSpace(url)) { return; } if (art == null || song.Id != Settings.CurrentSong) { return; } } artwork = new MPMediaItemArtwork(new CGSize(9999, 9999), (arg) => { var img = GetImage(song, arg.Width).Result; return(img); }); if (nowPlayingInfo == null) { return; } nowPlayingInfo.Artwork = artwork; App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo); } catch (Exception ex) { LogManager.Shared.Report(ex); } }
async void FetchArtwork(Song song) { try { var art = await song.GetLocalImage(Images.MaxScreenSize); if (art == null) { var url = await ArtworkManager.Shared.GetArtwork(song); if (string.IsNullOrWhiteSpace(url)) { return; } var tcs = new TaskCompletionSource <UIImage>(); var imageManager = SDWebImageManager.SharedManager.ImageDownloader.DownloadImage(new NSUrl(url), SDWebImageDownloaderOptions.HighPriority, (receivedSize, expectedSize, u) => { }, (image, data, error, finished) => { if (error != null) { tcs.TrySetException(new Exception(error.ToString())); } else { tcs.TrySetResult(image); } }); art = await tcs.Task; if (art == null || song.Id != Settings.CurrentSong) { return; } } if (Device.IsIos10) { artwork = new MPMediaItemArtwork(new CGSize(Images.MaxScreenSize, Images.MaxScreenSize), (arg) => { var isMainThread = App.IsMainThread; var img = GetImage(song, arg.Width).Result; return(img); }); } else { artwork = new MPMediaItemArtwork(art); } if (nowPlayingInfo == null) { return; } nowPlayingInfo.Artwork = artwork; App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo); } catch (Exception ex) { LogManager.Shared.Report(ex); } }
public void ImageWithSize() { // trying to reproduce issue from bug #23619 - but turned out to be an iOS8 bug string file = Path.Combine(NSBundle.MainBundle.ResourcePath, "basn3p08.png"); using (var img = UIImage.FromFile(file)) using (var mia = new MPMediaItemArtwork(img)) { Assert.That(img.Size.ToString(), Is.EqualTo("{Width=32, Height=32}"), "original"); var upscale = mia.ImageWithSize(new CGSize(100, 100)); Assert.That(upscale.Size.ToString(), Is.EqualTo("{Width=32, Height=32}"), "upscale"); var downscale = mia.ImageWithSize(new CGSize(16, 16)); Assert.That(downscale.Size.ToString(), Is.EqualTo("{Width=32, Height=32}"), "downscale"); } }
private void UpdateNowPlaying(StorySong item) { var newInfo = CreateInfo(item); UpdateInfo(newInfo); if (artworkUrl != item.ImageUri.OriginalString) { artworkUrl = item.ImageUri.OriginalString; artwork = null; ImageService.Instance.LoadUrl(item.ImageUri.OriginalString).AsUIImageAsync().ContinueWith((task) => { artwork = new MPMediaItemArtwork(task.Result); newInfo.Artwork = artwork; UpdateInfo(newInfo); }); } }
public MemoryStream GetTrackImageStream(MPMediaItemArtwork artWork) { MemoryStream ms = null; var imageBytes = new byte[0]; if (artWork != null) { if (artWork != null) { var thumb = artWork.ImageWithSize(new CGSize(100, 100)); if (thumb != null) { ms = new MemoryStream(thumb.AsPNG().ToArray()); } } } return(ms); }
async void FetchArtwork(Song song) { try { var art = await song.GetLocalImage(Images.MaxScreenSize); if (art == null) { var url = await ArtworkManager.Shared.GetArtwork(song); if (string.IsNullOrWhiteSpace(url)) { return; } TaskCompletionSource <UIImage> tcs = new TaskCompletionSource <UIImage>(); var fether = new HNKNetworkFetcher(new NSUrl(url)); fether.FetchImage((image) => { tcs.TrySetResult(image); }, (error) => { tcs.TrySetException(new Exception(error.ToString())); }); art = await tcs.Task; if (art == null || song.Id != Settings.CurrentSong) { return; } } artwork = new MPMediaItemArtwork(art); if (nowPlayingInfo == null) { return; } nowPlayingInfo.Artwork = artwork; App.RunOnMainThread(() => MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = nowPlayingInfo); } catch (Exception ex) { LogManager.Shared.Report(ex); } }
private void PlatformLoad(Action <int> progressCallback) { MPMediaQuery mediaQuery = new MPMediaQuery(); var value = NSObject.FromObject(MPMediaType.Music); var type = MPMediaItem.MediaTypeProperty; var predicate = MPMediaPropertyPredicate.PredicateWithValue(value, type); mediaQuery.AddFilterPredicate(predicate); mediaQuery.GroupingType = MPMediaGrouping.Album; List <Song> songList = new List <Song>(); List <Album> albumList = new List <Album>(); for (int i = 0; i < mediaQuery.Collections.Length; i++) { MPMediaItemCollection itemCollection = mediaQuery.Collections[i]; List <Song> albumSongs = new List <Song>(itemCollection.Count); var nsAlbumArtist = itemCollection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumArtistProperty); var nsAlbumName = itemCollection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumTitleProperty); var nsAlbumGenre = itemCollection.RepresentativeItem.ValueForProperty(MPMediaItem.GenreProperty); string albumArtist = nsAlbumArtist == null ? "Unknown Artist" : nsAlbumArtist.ToString(); string albumName = nsAlbumName == null ? "Unknown Album" : nsAlbumName.ToString(); string albumGenre = nsAlbumGenre == null ? "Unknown Genre" : nsAlbumGenre.ToString(); MPMediaItemArtwork thumbnail = itemCollection.RepresentativeItem.ValueForProperty(MPMediaItem.ArtworkProperty) as MPMediaItemArtwork; var album = new Album(new SongCollection(albumSongs), albumName, new Artist(albumArtist), new Genre(albumGenre), thumbnail); albumList.Add(album); for (int j = 0; j < itemCollection.Count; j++) { var nsArtist = itemCollection.Items[j].ValueForProperty(MPMediaItem.ArtistProperty); var nsTitle = itemCollection.Items[j].ValueForProperty(MPMediaItem.TitleProperty); var nsGenre = itemCollection.Items[j].ValueForProperty(MPMediaItem.GenreProperty); var assetUrl = itemCollection.Items[j].ValueForProperty(MPMediaItem.AssetURLProperty) as NSUrl; if (nsTitle == null || assetUrl == null) // The Asset URL check will exclude iTunes match items from the Media Library that are not downloaded, but show up in the music app { continue; } string artist = nsArtist == null ? "Unknown Artist" : nsArtist.ToString(); string title = nsTitle.ToString(); string genre = nsGenre == null ? "Unknown Genre" : nsGenre.ToString(); TimeSpan duration = TimeSpan.FromSeconds(((NSNumber)itemCollection.Items[j].ValueForProperty(MPMediaItem.PlaybackDurationProperty)).FloatValue); var song = new Song(album, new Artist(artist), new Genre(genre), title, duration, itemCollection.Items[j], assetUrl); albumSongs.Add(song); songList.Add(song); } } albumCollection = new AlbumCollection(albumList); songCollection = new SongCollection(songList); /*_playLists = new PlaylistCollection(); * * MPMediaQuery playlists = new MPMediaQuery(); * playlists.GroupingType = MPMediaGrouping.Playlist; * for (int i = 0; i < playlists.Collections.Length; i++) * { * MPMediaItemCollection item = playlists.Collections[i]; * Playlist list = new Playlist(); * list.Name = playlists.Items[i].ValueForProperty(MPMediaPlaylistPropertyName).ToString(); * for (int k = 0; k < item.Items.Length; k++) * { * TimeSpan time = TimeSpan.Parse(item.Items[k].ValueForProperty(MPMediaItem.PlaybackDurationProperty).ToString()); * list.Duration += time; * } * _playLists.Add(list); * }*/ }
internal Album(SongCollection songCollection, string name, Artist artist, Genre genre, MPMediaItemArtwork thumbnail) : this(songCollection, name, artist, genre) { this.thumbnail = thumbnail; }
public Album(UInt64 persistentID, MPMediaItemArtwork coverImage) { PersistentID = persistentID; CoverImage = coverImage; }