// 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,
     });
 }
예제 #3
0
 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
     });
 }
예제 #5
0
 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;
 }
예제 #6
0
 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)
     });
 }
예제 #8
0
 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;
 }
예제 #9
0
        /// <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);
        }
예제 #10
0
            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}",
     });
 }
예제 #12
0
        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);
        }
예제 #14
0
    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.");
        }
    }
예제 #15
0
        /// <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;
        }
예제 #16
0
        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);
        }
예제 #17
0
        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);
        }
예제 #18
0
 internal Song(Album album, Artist artist, Genre genre, string title, TimeSpan duration, MPMediaItem mediaItem, NSUrl assetUrl)
예제 #19
0
파일: Song.IOS.cs 프로젝트: Zodge/MonoGame
 internal Song(Album album, Artist artist, Genre genre, string title, TimeSpan duration, MPMediaItem mediaItem, NSUrl assetUrl)
예제 #20
0
        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;
        }