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