Esempio n. 1
0
        private OperationResult <AudioMetaData> MetaDataForFileFromATL(string fileName)
        {
            var sw = new Stopwatch();

            sw.Start();
            AudioMetaData result    = new AudioMetaData();
            var           isSuccess = false;

            try
            {
                result.Filename = fileName;
                var theTrack = new ATL.Track(fileName);
                result.Release         = theTrack.Album;
                result.Artist          = theTrack.AlbumArtist ?? theTrack.Artist;
                result.ArtistRaw       = theTrack.AlbumArtist ?? theTrack.Artist;
                result.Genres          = ID3TagsHelper.SplitGenre(theTrack.Genre);
                result.TrackArtist     = theTrack.OriginalArtist ?? theTrack.Artist ?? theTrack.AlbumArtist;
                result.TrackArtistRaw  = theTrack.OriginalArtist ?? theTrack.Artist ?? theTrack.AlbumArtist;
                result.AudioBitrate    = (int?)theTrack.Bitrate;
                result.AudioSampleRate = (int)theTrack.Bitrate;
                result.Disc            = theTrack.DiscNumber;
                if (theTrack.AdditionalFields.ContainsKey("TSST"))
                {
                    result.DiscSubTitle = theTrack.AdditionalFields["TSST"];
                }
                result.Images = theTrack.EmbeddedPictures?.Select(x => new AudioMetaDataImage
                {
                    Data        = x.PictureData,
                    Description = x.Description,
                    MimeType    = "image/jpg",
                    Type        = x.PicType == PictureInfo.PIC_TYPE.Front || x.PicType == PictureInfo.PIC_TYPE.Generic ? AudioMetaDataImageType.FrontCover : AudioMetaDataImageType.Other
                }).ToArray();
                result.Time        = theTrack.DurationMs > 0 ? ((decimal?)theTrack.DurationMs).ToTimeSpan() : null;
                result.Title       = theTrack.Title.ToTitleCase(false);
                result.TrackNumber = (short)theTrack.TrackNumber;
                result.Year        = theTrack.Year;
                isSuccess          = result.IsValid;
            }
            catch (Exception ex)
            {
                this.Logger.LogError(ex, "MetaDataForFileFromTagLib Filename [" + fileName + "] Error [" + ex.Serialize() + "]");
            }
            sw.Stop();
            return(new OperationResult <AudioMetaData>
            {
                IsSuccess = isSuccess,
                OperationTime = sw.ElapsedMilliseconds,
                Data = result
            });
        }
Esempio n. 2
0
        private OperationResult <AudioMetaData> MetaDataForFileFromIdSharp(string fileName)
        {
            var sw = new Stopwatch();

            sw.Start();
            AudioMetaData result    = new AudioMetaData();
            string        message   = null;
            var           isSuccess = false;

            try
            {
                result.Filename = fileName;
                IAudioFile audioFile = AudioFile.Create(fileName, true);
                if (ID3v2Tag.DoesTagExist(fileName))
                {
                    IID3v2Tag id3v2 = new ID3v2Tag(fileName);
                    result.Artist          = id3v2.AlbumArtist ?? id3v2.Artist;
                    result.ArtistRaw       = id3v2.AlbumArtist ?? id3v2.Artist;
                    result.AudioBitrate    = (int?)audioFile.Bitrate;
                    result.AudioChannels   = audioFile.Channels;
                    result.AudioSampleRate = (int)audioFile.Bitrate;
                    result.Comments        = id3v2.CommentsList != null?string.Join("|", id3v2.CommentsList?.Select(x => x.Value)) : null;

                    result.Disc           = ID3TagsHelper.ParseDiscNumber(id3v2.DiscNumber);
                    result.DiscSubTitle   = id3v2.SetSubtitle;
                    result.Genres         = ID3TagsHelper.SplitGenre(id3v2.Genre);
                    result.Release        = id3v2.Album;
                    result.TrackArtist    = id3v2.OriginalArtist ?? id3v2.Artist ?? id3v2.AlbumArtist;
                    result.TrackArtistRaw = id3v2.OriginalArtist ?? id3v2.Artist ?? id3v2.AlbumArtist;
                    result.Images         = id3v2.PictureList?.Select(x => new AudioMetaDataImage
                    {
                        Data        = x.PictureData,
                        Description = x.Description,
                        MimeType    = x.MimeType,
                        Type        = (AudioMetaDataImageType)x.PictureType
                    }).ToArray();
                    result.Time              = audioFile.TotalSeconds > 0 ? ((decimal?)audioFile.TotalSeconds).ToTimeSpan() : null;
                    result.Title             = id3v2.Title.ToTitleCase(false);
                    result.TrackNumber       = ID3TagsHelper.ParseTrackNumber(id3v2.TrackNumber);
                    result.TotalTrackNumbers = ID3TagsHelper.ParseTotalTrackNumber(id3v2.TrackNumber);
                    var year = id3v2.Year ?? id3v2.RecordingTimestamp ?? id3v2.ReleaseTimestamp ?? id3v2.OriginalReleaseTimestamp;
                    result.Year = ID3TagsHelper.ParseYear(year);
                    isSuccess   = result.IsValid;
                }

                if (!isSuccess)
                {
                    if (ID3v1Tag.DoesTagExist(fileName))
                    {
                        IID3v1Tag id3v1 = new ID3v1Tag(fileName);
                        result.Release         = id3v1.Album;
                        result.Artist          = id3v1.Artist;
                        result.ArtistRaw       = id3v1.Artist;
                        result.AudioBitrate    = (int?)audioFile.Bitrate;
                        result.AudioChannels   = audioFile.Channels;
                        result.AudioSampleRate = (int)audioFile.Bitrate;
                        result.Time            = audioFile.TotalSeconds > 0 ? ((decimal?)audioFile.TotalSeconds).ToTimeSpan() : null;
                        result.Title           = id3v1.Title.ToTitleCase(false);
                        result.TrackNumber     = SafeParser.ToNumber <short?>(id3v1.TrackNumber);
                        var date = SafeParser.ToDateTime(id3v1.Year);
                        result.Year = date?.Year ?? SafeParser.ToNumber <int?>(id3v1.Year);
                        isSuccess   = result.IsValid;
                    }
                }
            }
            catch (Exception ex)
            {
                message = ex.ToString();
                this.Logger.LogError(ex, "MetaDataForFileFromTagLib Filename [" + fileName + "] Error [" + ex.Serialize() + "]");
            }
            sw.Stop();
            return(new OperationResult <AudioMetaData>(message)
            {
                IsSuccess = isSuccess,
                OperationTime = sw.ElapsedMilliseconds,
                Data = result
            });
        }