/// <summary>
        /// Create an album from a bunch of songs
        /// </summary>
        /// <param name="songs"></param>
        /// <returns></returns>
        public static AlbumMetadata Factory(IEnumerable <SongMetadata> songs = null)
        {
            // If no songs, create an empty album

            if (songs == null)
            {
                return(new AlbumMetadata());
            }

            // Compute the number of tracks in the album:

            int?trackCount = (from song in songs
                              where song.TrackCount.HasValue
                              select song.TrackCount).Max();
            int?trackMax = songs.Max(song => song.TrackNumber);

            trackCount = trackCount ?? trackMax ?? songs.Count();
            int?discCount = (from song in songs
                             where song.DiscCount.HasValue
                             select song.DiscCount).Max();
            int?discMax = songs.Max(song => song.DiscNumber);

            discCount = discCount ?? discMax;

            string albumArtist = (from song in songs
                                  where !string.IsNullOrWhiteSpace(song.AlbumArtist)
                                  select song.AlbumArtist).FirstOrDefault();

            var ret = new AlbumMetadata
            {
                ArtistName = albumArtist,
                DiscCount  = discCount,
            };

            ret.ClearChanges();
            return(ret);
        }