internal Song(Album album, Artist artist, Genre genre, MusicProperties musicProperties) { this.album = album; this.artist = artist; this.genre = genre; this.musicProperties = musicProperties; }
private void PlatformLoad(Action<int> progressCallback) { var songList = new List<Song>(); var albumList = new List<Album>(); foreach (var collection in MPMediaQuery.AlbumsQuery.Collections) { var nsAlbumArtist = collection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumArtistProperty); var nsAlbumName = collection.RepresentativeItem.ValueForProperty(MPMediaItem.AlbumTitleProperty); var nsAlbumGenre = collection.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 = collection.RepresentativeItem.ValueForProperty(MPMediaItem.ArtworkProperty) as MPMediaItemArtwork; var albumSongs = new List<Song>((int)collection.Count); var album = new Album(new SongCollection(albumSongs), albumName, new Artist(albumArtist), new Genre(albumGenre), thumbnail); albumList.Add(album); foreach (var item in collection.Items) { var nsArtist = item.ValueForProperty(MPMediaItem.ArtistProperty); var nsTitle = item.ValueForProperty(MPMediaItem.TitleProperty); var nsGenre = item.ValueForProperty(MPMediaItem.GenreProperty); var assetUrl = item.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)item.ValueForProperty(MPMediaItem.PlaybackDurationProperty)).FloatValue); var song = new Song(album, new Artist(artist), new Genre(genre), title, duration, item, 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 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, 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; }
private void songsOfAlbum_Loaded(object sender, RoutedEventArgs e) { string _albumName = NavigationContext.QueryString["albumName"]; MediaLibrary medialib = new MediaLibrary(); AlbumCollection albumCollection = medialib.Albums; Microsoft.Xna.Framework.Media.Album album = albumCollection.Single(al => al.Name == _albumName); songCollection = album.Songs; songs.Clear(); foreach (Song so in album.Songs) { songs.Add(so); } loadList.Begin(); }
protected override void OnNavigatedTo(NavigationEventArgs e) { try { string _albumName = NavigationContext.QueryString["albumName"]; MediaLibrary medialib = new MediaLibrary(); AlbumCollection albumCollection = medialib.Albums; Microsoft.Xna.Framework.Media.Album album = albumCollection.Single(al => al.Name == _albumName); songCollection = album.Songs; if (album.HasArt) { BitmapImage bmpImage = new BitmapImage(); bmpImage.SetSource(album.GetAlbumArt()); albumArt.Source = bmpImage; } albumName.Text = album.Name; AlbumArtist.Text = album.Artist.Name; if (album.Duration.Days > 0) { albumDuration.Text = string.Format("Duration: {0:D1}:{1:D2}:{2:D2}:{3:D2}", album.Duration.Days , album.Duration.Hours, album.Duration.Minutes, album.Duration.Minutes); } else { albumDuration.Text = string.Format("Duration: {0:D2}:{1:D2}:{2:D2}", album.Duration.Hours, album.Duration.Minutes, album.Duration.Minutes); } songsNumbers.Text = "Songs numbers: " + album.Songs.Count; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { ml = new MediaLibrary(); String album_name = null; if (NavigationContext.QueryString.TryGetValue("Album", out album_name)) { AlbumName.Text = album_name; foreach (Album a in ml.Albums) { if (a.Name == album_name) { CurrentAlbum = a; SongsList.ItemsSource = a.Songs; } } } String song_name = null; if (NavigationContext.QueryString.TryGetValue("Song", out song_name)) { foreach(Song s in CurrentAlbum.Songs) { if (s.Name == song_name) currentSong = s; changePlayButtonStatus(); changeSongName(); changeProgressBar(); } } //MediaPlayer.MediaStateChanged += MediaPlayer_MediaStateChanged; }
internal Song(Album album, Artist artist, Genre genre, MusicProperties musicProperties) : this(album, artist, genre) { this.musicProperties = musicProperties; }
private void PlatformSetAlbum(Album album) { this.album = album; }
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>((int)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 Song(Album album, Artist artist, Genre genre) { this.album = album; this.artist = artist; this.genre = genre; }
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)
internal Song(Album album, Artist artist, Genre genre) { this.album = album; this.artist = artist; this.genre = genre; }
private Song(Album album, Artist artist, Genre genre) { this.album = album; this.artist = artist; this.genre = genre; }
/// <summary> /// Plays the album. /// </summary> /// <param name="album">The album.</param> public void PlayAlbum(Album album) { MediaPlayer.Play(album.Songs); }
private void PlatformLoad(Action<int> progressCallback) { #if !WINDOWS_UAP Task.Run(async () => { if (musicFolder == null) { try { musicFolder = KnownFolders.MusicLibrary; } catch (Exception e) { Debug.WriteLine("Failed to access Music Library: " + e.Message); albumCollection = new AlbumCollection(new List<Album>()); songCollection = new SongCollection(new List<Song>()); return; } } var files = new List<StorageFile>(); await this.GetAllFiles(musicFolder, files); var songList = new List<Song>(); var albumList = new List<Album>(); var artists = new Dictionary<string, Artist>(); var albums = new Dictionary<string, Album>(); var genres = new Dictionary<string, Genre>(); var cache = new Dictionary<string, MusicProperties>(); // Read cache var cacheFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(CacheFile, CreationCollisionOption.OpenIfExists); using (var stream = new BinaryReader(await cacheFile.OpenStreamForReadAsync())) try { for (; stream.BaseStream.Position < stream.BaseStream.Length; ) { var entry = MusicProperties.Deserialize(stream); cache.Add(entry.Path, entry); } } catch { } // Write cache cacheFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(CacheFile, CreationCollisionOption.ReplaceExisting); using (var stream = new BinaryWriter(await cacheFile.OpenStreamForWriteAsync())) { int prevProgress = 0; for (int i = 0; i < files.Count; i++) { var file = files[i]; try { MusicProperties properties; if (!(cache.TryGetValue(file.Path, out properties) && properties.TryMatch(file))) properties = new MusicProperties(file); properties.Serialize(stream); if (string.IsNullOrWhiteSpace(properties.Title)) continue; Artist artist; if (!artists.TryGetValue(properties.Artist, out artist)) { artist = new Artist(properties.Artist); artists.Add(artist.Name, artist); } Artist albumArtist; if (!artists.TryGetValue(properties.AlbumArtist, out albumArtist)) { albumArtist = new Artist(properties.AlbumArtist); artists.Add(albumArtist.Name, albumArtist); } Genre genre; if (!genres.TryGetValue(properties.Genre, out genre)) { genre = new Genre(properties.Genre); genres.Add(genre.Name, genre); } Album album; if (!albums.TryGetValue(properties.Album, out album)) { var thumbnail = Task.Run(async () => await properties.File.GetThumbnailAsync(ThumbnailMode.MusicView, 300, ThumbnailOptions.ResizeThumbnail)).Result; album = new Album(new SongCollection(), properties.Album, albumArtist, genre, thumbnail.Type == ThumbnailType.Image ? thumbnail : null); albums.Add(album.Name, album); albumList.Add(album); } var song = new Song(album, artist, genre, properties); song.Album.Songs.Add(song); songList.Add(song); } catch (Exception e) { Debug.WriteLine("MediaLibrary exception: " + e.Message); } int progress = 100 * i / files.Count; if (progress > prevProgress) { prevProgress = progress; if (progressCallback != null) progressCallback.Invoke(progress); } } } if (progressCallback != null) progressCallback.Invoke(100); albumCollection = new AlbumCollection(albumList); songCollection = new SongCollection(songList); }).Wait(); #endif }
private void PlatformSetAlbum(Album album) { this.album = album; }
internal Song(Album album, Artist artist, Genre genre, MusicProperties musicProperties) : this(album, artist, genre) { this.musicProperties = musicProperties; }
private Song(Album album, Artist artist, Genre genre) { this.album = album; this.artist = artist; this.genre = genre; }
public void Add(Album album) { foreach (Song s in album.Songs) Add(s); }
private AlbumInfo createAlbumInfoFromAlbum(Album album) { return new AlbumInfo(album.Artist.Name, album.Name); }
public void Insert(Album album, int index) { foreach (Song s in album.Songs) Insert(s, index++); }
public albumInfo(Album album) { this.name = album.Name; }
private void PlatformLoad(Action<int> progressCallback) { List<Song> songList = new List<Song>(); List<Album> albumList = new List<Album>(); using (var musicCursor = Context.ContentResolver.Query(MediaStore.Audio.Media.ExternalContentUri, null, null, null, null)) { if (musicCursor != null) { Dictionary<string, Artist> artists = new Dictionary<string, Artist>(); Dictionary<string, Album> albums = new Dictionary<string, Album>(); Dictionary<string, Genre> genres = new Dictionary<string, Genre>(); // Note: Grabbing album art using MediaStore.Audio.AlbumColumns.AlbumArt and // MediaStore.Audio.AudioColumns.AlbumArt is broken // See: https://code.google.com/p/android/issues/detail?id=1630 // Workaround: http://stackoverflow.com/questions/1954434/cover-art-on-android int albumNameColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AlbumColumns.Album); int albumArtistColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AlbumColumns.Artist); int albumIdColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AlbumColumns.AlbumId); int genreColumn = musicCursor.GetColumnIndex(MediaStore.Audio.GenresColumns.Name); // Also broken :( int artistColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Artist); int titleColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Title); int durationColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Duration); int assetIdColumn = musicCursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Id); if (titleColumn == -1 || durationColumn == -1 || assetIdColumn == -1) { Debug.WriteLine("Missing essential properties from music library. Returning empty library."); albumCollection = new AlbumCollection(albumList); songCollection = new SongCollection(songList); return; } for (musicCursor.MoveToFirst(); !musicCursor.IsAfterLast; musicCursor.MoveToNext()) try { long durationProperty = musicCursor.GetLong(durationColumn); TimeSpan duration = TimeSpan.FromMilliseconds(durationProperty); // Exclude sound effects if (duration < MinimumSongDuration) continue; string albumNameProperty = (albumNameColumn > -1 ? musicCursor.GetString(albumNameColumn) : null) ?? "Unknown Album"; string albumArtistProperty = (albumArtistColumn > -1 ? musicCursor.GetString(albumArtistColumn) : null) ?? "Unknown Artist"; string genreProperty = (genreColumn > -1 ? musicCursor.GetString(genreColumn) : null) ?? "Unknown Genre"; string artistProperty = (artistColumn > -1 ? musicCursor.GetString(artistColumn) : null) ?? "Unknown Artist"; string titleProperty = musicCursor.GetString(titleColumn); long assetId = musicCursor.GetLong(assetIdColumn); var assetUri = ContentUris.WithAppendedId(MediaStore.Audio.Media.ExternalContentUri, assetId); long albumId = albumIdColumn > -1 ? musicCursor.GetInt(albumIdColumn) : -1; var albumArtUri = albumId > -1 ? ContentUris.WithAppendedId(Uri.Parse("content://media/external/audio/albumart"), albumId) : null; Artist artist; if (!artists.TryGetValue(artistProperty, out artist)) { artist = new Artist(artistProperty); artists.Add(artist.Name, artist); } Artist albumArtist; if (!artists.TryGetValue(albumArtistProperty, out albumArtist)) { albumArtist = new Artist(albumArtistProperty); artists.Add(albumArtist.Name, albumArtist); } Genre genre; if (!genres.TryGetValue(genreProperty, out genre)) { genre = new Genre(genreProperty); genres.Add(genre.Name, genre); } Album album; if (!albums.TryGetValue(albumNameProperty, out album)) { album = new Album(new SongCollection(), albumNameProperty, albumArtist, genre, albumArtUri); albums.Add(album.Name, album); albumList.Add(album); } var song = new Song(album, artist, genre, titleProperty, duration, assetUri); song.Album.Songs.Add(song); songList.Add(song); } catch (Exception e) { Debug.WriteLine("MediaLibrary exception: " + e.Message); } } musicCursor.Close(); } albumCollection = new AlbumCollection(albumList); songCollection = new SongCollection(songList); }
private void PlatformLoad(Action <int> progressCallback) { Task.Run(async() => { if (musicFolder == null) { musicFolder = KnownFolders.MusicLibrary; } var files = new List <StorageFile>(); await this.GetAllFiles(musicFolder, files); var songList = new List <Song>(); var albumList = new List <Album>(); var artists = new Dictionary <string, Artist>(); var albums = new Dictionary <string, Album>(); var genres = new Dictionary <string, Genre>(); var cache = new Dictionary <string, MusicProperties>(); // Read cache var cacheFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(CacheFile, CreationCollisionOption.OpenIfExists); using (var stream = new BinaryReader(await cacheFile.OpenStreamForReadAsync())) try { for (; stream.BaseStream.Position < stream.BaseStream.Length;) { var entry = MusicProperties.Deserialize(stream); cache.Add(entry.Path, entry); } } catch { } // Write cache cacheFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(CacheFile, CreationCollisionOption.ReplaceExisting); using (var stream = new BinaryWriter(await cacheFile.OpenStreamForWriteAsync())) { int prevProgress = 0; for (int i = 0; i < files.Count; i++) { var file = files[i]; try { MusicProperties properties; if (!(cache.TryGetValue(file.Path, out properties) && properties.TryMatch(file))) { properties = new MusicProperties(file); } properties.Serialize(stream); if (string.IsNullOrWhiteSpace(properties.Title)) { continue; } Artist artist; if (!artists.TryGetValue(properties.Artist, out artist)) { artist = new Artist(properties.Artist); artists.Add(artist.Name, artist); } Artist albumArtist; if (!artists.TryGetValue(properties.AlbumArtist, out albumArtist)) { albumArtist = new Artist(properties.AlbumArtist); artists.Add(albumArtist.Name, albumArtist); } Genre genre; if (!genres.TryGetValue(properties.Genre, out genre)) { genre = new Genre(properties.Genre); genres.Add(genre.Name, genre); } Album album; if (!albums.TryGetValue(properties.Album, out album)) { var thumbnail = Task.Run(async() => await properties.File.GetThumbnailAsync(ThumbnailMode.MusicView, 300, ThumbnailOptions.ResizeThumbnail)).Result; album = new Album(new SongCollection(), properties.Album, albumArtist, genre, thumbnail.Type == ThumbnailType.Image ? thumbnail : null); albums.Add(album.Name, album); albumList.Add(album); } var song = new Song(album, artist, genre, properties); song.Album.Songs.Add(song); songList.Add(song); } catch (Exception e) { Debug.WriteLine("MediaLibrary exception: " + e.Message); } int progress = 100 * i / files.Count; if (progress > prevProgress) { prevProgress = progress; if (progressCallback != null) { progressCallback.Invoke(progress); } } } } if (progressCallback != null) { progressCallback.Invoke(100); } albumCollection = new AlbumCollection(albumList); songCollection = new SongCollection(songList); }).Wait(); }