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