// Play song from persistentSongID public void playSong(Song song) { currentSong = song; if (song.streamingURL == null) { MusicQuery musicQuery = new MusicQuery(); MPMediaItem mediaItem = musicQuery.queryForSongWithId(song.songID); if (mediaItem != null) { NSUrl Url = mediaItem.AssetURL; item = AVPlayerItem.FromUrl(Url); if (item != null) { this.avPlayer.ReplaceCurrentItemWithPlayerItem(item); } MPNowPlayingInfo np = new MPNowPlayingInfo(); SetNowPlayingInfo(song, np); this.play(); } } else { NSUrl nsUrl = NSUrl.FromString(song.streamingURL); MyMusicPlayer.myMusicPlayer?.streamingItem?.RemoveObserver(MyMusicPlayer.myMusicPlayer, "status"); streamingItem = AVPlayerItem.FromUrl(nsUrl); streamingItem.AddObserver(this, new NSString("status"), NSKeyValueObservingOptions.New, avPlayer.Handle); avPlayer.ReplaceCurrentItemWithPlayerItem(streamingItem); streamingItemPaused = false; //NSNotificationCenter.DefaultCenter.AddObserver(this, new Selector("playerItemDidReachEnd:"), AVPlayerItem.DidPlayToEndTimeNotification, streamingItem); } }
internal static Genre ToGenre(this MPMediaItem mediaItem) { return(new Genre { Id = mediaItem.GenrePersistentID, Name = mediaItem.Genre, }); }
internal static Artist ToArtist(this MPMediaItem mediaItem) { return(new Artist { Id = mediaItem.ArtistPersistentID, Name = mediaItem.Artist }); }
internal static Album ToAlbum(this MPMediaItem mediaItem) { return(new Album { Id = mediaItem.PersistentID, Title = mediaItem.AlbumTitle, Artist = mediaItem.AlbumArtist, NumberOfSongs = mediaItem.AlbumTrackCount }); }
internal Song(Album album, Artist artist, Genre genre, string title, TimeSpan duration, MPMediaItem mediaItem, NSUrl assetUrl) { this.album = album; this.artist = artist; this.genre = genre; this.title = title; this.duration = duration; this.mediaItem = mediaItem; this.assetUrl = assetUrl; }
internal Song(Album album, Artist artist, Genre genre, string title, TimeSpan duration, MPMediaItem mediaItem, NSUrl assetUrl) { this.album = album; this.artist = artist; this.genre = genre; this.title = title; this.duration = duration; this.mediaItem = mediaItem; this.assetUrl = assetUrl; }
internal static Playlist ToPlaylist(this MPMediaItem mediaItem) { return(new Playlist { Id = mediaItem.PersistentID, Name = mediaItem.Title, CreationDate = (DateTime)mediaItem.DateAdded, MemberIds = GetMemberIds(mediaItem.PersistentID) }); }
internal Song(Album album, Artist artist, Genre genre, string title, TimeSpan duration, object mediaItem, NSUrl assetUrl) #endif { this.album = album; this.artist = artist; this.genre = genre; this.title = title; this.duration = duration; #if !TVOS this.mediaItem = mediaItem; #endif this.assetUrl = assetUrl; }
/// <summary> /// Exports the audio of a media item to storage. /// </summary> /// <returns><c>true</c> if audio started exporting, <c>false</c> if it is exporting another audio or the media item has DRM.</returns> /// <param name="mediaItem">Media item.</param> /// <param name="outputFolder">Absolute output folder or specify null to use Documents folder.</param> /// <param name="outputFile">Output file name or specify null to use <c>[artist] - [title].[extension]</c>.</param> /// <param name="overwrite">Whether to overwrite the output file.</param> public static bool ExportAudio(MPMediaItem mediaItem, string outputFolder = null, string outputFile = null, bool overwrite = false) { if (_exporter != null) { return(false); } if (mediaItem == null) { return(false); } if (outputFolder == null) { outputFolder = Application.persistentDataPath; } NSURL assetURL = mediaItem.Value(MPMediaItem.PropertyAssetURL) as NSURL; if (assetURL == null) { return(false); } if (outputFile == null) { string artist = mediaItem.Value(MPMediaItem.PropertyArtist) as string; string title = mediaItem.Value(MPMediaItem.PropertyTitle) as string; string extension = Path.GetExtension(assetURL.AbsoluteString().Split('?')[0]); outputFile = artist + " - " + title + extension; } _outputPath = outputFolder + "/" + outputFile; if (!overwrite && File.Exists(_outputPath)) { return(false); } _avAsset = AVURLAsset.Asset(assetURL); _exporter = new AVAssetExportSession(_avAsset, AVAssetExportSession.AVAssetExportPresetPassthrough); _exporter.outputFileType = "com.apple.quicktime-movie"; _exporter.shouldOptimizeForNetworkUse = true; string tmpExt = UTType.CopyPreferredTag(_exporter.outputFileType, UTType.kUTTagClassFilenameExtension); _tmpPath = Application.persistentDataPath + "/" + UUID.Generate() + "." + tmpExt; _exporter.outputURL = new NSURL(_tmpPath, false); _exporter.ExportAsynchronously(_OnExportDone); return(true); }
public override void MediaItemsPicked(MPMediaPickerController sender, MPMediaItemCollection mediaItemCollection) { _viewController._musicPlayer.SetQueue(mediaItemCollection); _viewController.DismissModalViewControllerAnimated(true); MPMediaItem mediaItem = mediaItemCollection.Items[0]; //see MPMediaItem.h for various string property names (search for MPMediaItem.h in Mac Spotlight) string artist = mediaItem.ValueForProperty("artist").ToString(); string title = mediaItem.ValueForProperty("title").ToString(); _viewController.artistLabel.Text = artist; _viewController.titleLabel.Text = title; }
internal static Song ToSong(this MPMediaItem mediaItem) { return(new Song { Id = mediaItem.PersistentID, Title = mediaItem.Title, DisplayName = mediaItem.Title, ArtistId = mediaItem.AlbumArtistPersistentID, AlbumId = mediaItem.AlbumPersistentID, Composer = mediaItem.Composer, Duration = (ulong)mediaItem.PlaybackDuration, Uri = mediaItem.AssetURL.AbsoluteString, Track = $"{mediaItem.AlbumTrackNumber}/{mediaItem.AlbumTrackCount}", }); }
public override void ViewDidLoad() { base.ViewDidLoad(); //get currently playing item MPMediaItem Now = MyPlayer.NowPlayingItem; //get item's properties UIImage MyArtwork = Now.Artwork.ImageWithSize(new CGSize(100, 100)); Track.Text = Now.Title; Artist.Text = Now.Artist; Album.Text = Now.AlbumTitle; Lyrics.Text = Now.Lyrics; Artwork.Image = MyArtwork; }
private bool MediaItemContainsString(MPMediaItem item, string searchText) { var b1 = false; var title = item.Title; if (title != null) { b1 = title.ToString().ToLower().Contains(searchText.ToLower()); } var b2 = false; var artist = item.Artist; if (artist != null) { b2 = artist.ToString().ToLower().Contains(searchText.ToLower()); } return(b1 || b2); }
void ExportFirstSong() { MPMediaQuery query = MPMediaQuery.SongsQuery(); if (query.items.Length == 0) { Log("No songs in Music Library."); return; } // get first song MPMediaItem mediaItem = query.items[0] as MPMediaItem; Log("Exporting song: " + mediaItem.Value(MPMediaItem.PropertyTitle)); // use null for outputFolder and outputFile to name it [artist] - [title] if (!MediaExporter.ExportAudio(mediaItem, null, null, true)) { Log("Export error or song has DRM."); } }
/// <summary> /// Exports the audio of a media item to storage. /// </summary> /// <returns><c>true</c> if audio started exporting, <c>false</c> if it is exporting another audio or the media item has DRM.</returns> /// <param name="mediaItem">Media item.</param> /// <param name="outputFolder">Absolute output folder or specify null to use Documents folder.</param> /// <param name="outputFile">Output file name or specify null to use <c>[artist] - [title].[extension]</c>.</param> /// <param name="overwrite">Whether to overwrite the output file.</param> public static bool ExportAudio(MPMediaItem mediaItem, string outputFolder = null, string outputFile = null, bool overwrite = false) { if (_exporter != null) return false; if (mediaItem == null) return false; if (outputFolder == null) outputFolder = Application.persistentDataPath; NSURL assetURL = mediaItem.Value(MPMediaItem.PropertyAssetURL) as NSURL; if (assetURL == null) return false; if (outputFile == null) { string artist = mediaItem.Value(MPMediaItem.PropertyArtist) as string; string title = mediaItem.Value(MPMediaItem.PropertyTitle) as string; string extension = Path.GetExtension(assetURL.AbsoluteString().Split('?')[0]); outputFile = artist + " - " + title + extension; } _outputPath = outputFolder + "/" + outputFile; if (!overwrite && File.Exists(_outputPath)) return false; _avAsset = AVURLAsset.Asset(assetURL); _exporter = new AVAssetExportSession(_avAsset, AVAssetExportSession.AVAssetExportPresetPassthrough); _exporter.outputFileType = "com.apple.quicktime-movie"; _exporter.shouldOptimizeForNetworkUse = true; string tmpExt = UTType.CopyPreferredTag(_exporter.outputFileType, UTType.kUTTagClassFilenameExtension); _tmpPath = Application.persistentDataPath + "/" + UUID.Generate() + "." + tmpExt; _exporter.outputURL = new NSURL(_tmpPath, false); _exporter.ExportAsynchronously(_OnExportDone); return true; }
public static MusicTrack ToTrack(this MPMediaItem item) { if (item == null) { return(null); } var track = new MusicTrack { Id = item.PersistentID, Filename = item.AssetURL != null ? item.AssetURL.AbsoluteString : string.Empty, Name = item.Title, Artist = item.Artist, Album = item.AlbumTitle, Seconds = item.PlaybackDuration }; var ts = TimeSpan.FromSeconds(track.Seconds); track.Length = string.Format("{0}:{1} min", ts.Minutes.ToString("D2"), ts.Seconds.ToString("D2")); return(track); }
public static MusicTrack ToTrack(this MPMediaItem item) { var track = new MusicTrack { Id = item.PersistentID, Filename = item.AssetURL != null ? item.AssetURL.AbsoluteString : string.Empty, Name = item.Title, Artist = item.Artist, Album = item.AlbumTitle, Seconds = item.PlaybackDuration }; var ts = TimeSpan.FromSeconds(track.Seconds); track.Length = string.Format("{0}:{1} min", ts.Minutes.ToString("D2"), ts.Seconds.ToString("D2")); if (item.Artwork != null) { var thumb = item.Artwork.ImageWithSize(new SizeF(60, 60)); track.Image = thumb.AsPNG().ToArray(); } return(track); }
internal Song(Album album, Artist artist, Genre genre, string title, TimeSpan duration, MPMediaItem mediaItem, NSUrl assetUrl)
internal Song(Album album, Artist artist, Genre genre, string title, TimeSpan duration, MPMediaItem mediaItem, NSUrl assetUrl)
private void SetMediaItem(ref MediaItem song, MPMediaItem songItem) { song.Title = songItem.Title; song.Album = songItem.AlbumTitle; song.Artist = songItem.Artist; song.SongID = songItem.PersistentID; song.Artwork = songItem.Artwork != null ? ImageSource.FromStream(() => songItem.Artwork.ImageWithSize(new CGSize(115.0f, 115.0f)).AsPNG().AsStream()) : null; song.Duration = songItem.PlaybackDuration; song.SongURL = songItem.AssetURL; song.AlbumArtist = songItem.AlbumArtist; song.AlbumArtistPersistentID = songItem.AlbumArtistPersistentID; song.AlbumPersistentID = songItem.AlbumPersistentID; song.AlbumTrackCount = songItem.AlbumTrackCount; song.AlbumTrackNumber = songItem.AlbumTrackNumber; song.ArtistPersistentID = songItem.ArtistPersistentID; song.AssetURL = songItem.AssetURL; song.BeatsPerMinute = songItem.BeatsPerMinute; song.BookmarkTime = songItem.BookmarkTime; song.Comments = songItem.Comments; song.Composer = songItem.Composer; song.ComposerPersistentID = songItem.ComposerPersistentID; song.DateAdded = songItem.DateAdded != null ? songItem.DateAdded.ToDateTime() : new DateTime(1900, 1, 1); song.DiscCount = songItem.DiscCount; song.DiscNumber = songItem.DiscNumber; song.Genre = songItem.Genre; song.GenrePersistentID = songItem.GenrePersistentID; song.HasProtectedAsset = songItem.HasProtectedAsset; song.IsCloudItem = songItem.IsCloudItem; song.IsCompilation = songItem.IsCompilation; song.IsExplicitItem = songItem.IsExplicitItem; song.LastPlayedDate = songItem.LastPlayedDate != null ? songItem.LastPlayedDate.ToDateTime() : new DateTime(1900, 1, 1); song.Lyrics = songItem.Lyrics; song.MediaType = songItem.MediaType.ToString(); song.PlayCount = songItem.PlayCount; song.PlaybackStoreID = songItem.PlaybackStoreID; song.PodcastPersistentID = songItem.PodcastPersistentID; song.PodcastTitle = songItem.PodcastTitle; song.Rating = songItem.Rating; song.ReleaseDate = songItem.ReleaseDate != null ? songItem.ReleaseDate.ToDateTime() : new DateTime(1900, 1, 1); song.SkipCount = songItem.SkipCount; song.UserGrouping = songItem.UserGrouping; }