示例#1
0
        public List <ITrack> GetTracksForPlaylist()
        {
            var musicLibrary    = LibraryPackage.GetInstance <IMusicLibrary>();
            var tracks          = Enumerable.Empty <ITrack>();
            var nonLibraryFiles = new List <string>();

            foreach (var file in Files)
            {
                var foundTracks = musicLibrary.GetTracksByAttributeValue(SearchAreas.Filename, file);

                if (foundTracks.Count > 0)
                {
                    tracks = tracks.Concat(foundTracks);
                }
                else
                {
                    nonLibraryFiles.Add(file);
                }
            }

            tracks = tracks.Concat(nonLibraryFiles.Select(file =>
            {
                try
                {
                    return(Track.BuildTrackInstance(file));
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format("Error while loading track from file '{0}' for playlist {1}", file, ToString()), ex);
                }
            }));

            return(tracks.ToList());
        }
示例#2
0
        public static IAudioFileMetadata BuildAudioFileMetaData(CdMetadata cdMetadata, int trackNumber)
        {
            var AudioFileMetadata = LibraryPackage.GetInstance <IAudioFileMetadata>() as AudioFileMetadata;

            AudioFileMetadata.Title  = cdMetadata.Tracks[trackNumber];
            AudioFileMetadata.Artist = cdMetadata.Artist;
            AudioFileMetadata.Album  = cdMetadata.Album;

            return(AudioFileMetadata as IAudioFileMetadata);
        }
示例#3
0
        public override string ToString()
        {
            var musicLibrary  = LibraryPackage.GetInstance <IMusicLibrary>();
            var displayTitle  = Title == string.Empty ? "Unknown Title" : Title;
            var displayArtist = "Unknown Artist";

            if (ArtistId != null && ArtistId != -1)
            {
                displayArtist = musicLibrary.GetArtistById((long)ArtistId).ToString();
            }

            return(string.Format("{0} - {1}", displayArtist, displayTitle));
        }
示例#4
0
        public static ITrack BuildTrackInstance(Song song)
        {
            if (song == null)
            {
                throw new ArgumentException("Cannot build track instance with a null song instance");
            }

            var track = LibraryPackage.GetInstance <ITrack>() as Track;

            track._album = song.Album ?? new Album {
                Id = -1
            };
            track._artist = song.Artist ?? new Artist {
                Id = -1
            };
            track.Song = song;

            return(track as ITrack);
        }
示例#5
0
        public static IAudioFileMetadata BuildAudioFileMetaData(string fileName, long albumId = -1)
        {
            var audioFileMetadata = LibraryPackage.GetInstance <IAudioFileMetadata>() as AudioFileMetadata;

            audioFileMetadata.AudioFilePath = fileName;
            audioFileMetadata._dbAlbumId    = albumId;

            try
            {
                var fileInfo = new FileInfo(audioFileMetadata.AudioFilePath);

                if (string.Equals(fileInfo.Extension, ".cda", StringComparison.OrdinalIgnoreCase))
                {
                    audioFileMetadata.LoadDetailsFromCddbServer();
                    audioFileMetadata.LoadMissingTrackDetailsFromFileName();

                    audioFileMetadata.HasFutherMetadataTag = false;

                    return(audioFileMetadata as IAudioFileMetadata);
                }

                using (var fileStream = new FileStream(audioFileMetadata.AudioFilePath, FileMode.Open))
                {
                    var tagFile = TagLib.File.Create(new StreamFileAbstraction(fileName, fileStream, fileStream));
                    var tag     = tagFile.Tag;

                    if (tag == null)
                    {
                        throw new Exception("Audio file does not contain a valid tag");
                    }

                    audioFileMetadata.Title  = tag.Title;
                    audioFileMetadata.Artist = tag.FirstPerformer;
                    audioFileMetadata.Album  = tag.Album;

                    audioFileMetadata._trackLength = (int)tagFile.Length;

                    try
                    {
                        var artwork = tag.Pictures;
                        audioFileMetadata._hasAlbumArt = artwork?[0] != null;
                    }
                    catch (Exception ex)
                    {
                        logger.Warn(string.Format("Failed to extract album art info from the tag in audio file '{0}'", fileName), ex);
                        audioFileMetadata._hasAlbumArt = false;
                    }
                }

                audioFileMetadata.LoadMissingTrackDetailsFromFileName();
                audioFileMetadata.HasFutherMetadataTag = true;
            }
            catch (Exception ex)
            {
                logger.Warn(string.Format("Error occured while parsing metadata from audio file '{0}'", audioFileMetadata.AudioFilePath), ex);

                audioFileMetadata.HasFutherMetadataTag = false;
                audioFileMetadata.LoadMissingTrackDetailsFromFileName();
            }

            return(audioFileMetadata as IAudioFileMetadata);
        }