예제 #1
0
 public PictureFrame(FrameHeader header, ID3Version version)
     : base(header)
 {
     if (version == ID3Version.ID3v1)
         throw new InvalidEnumArgumentException("version", (int)version, typeof(ID3Version));
     _version = version;
 }
예제 #2
0
        public Frame GetFrame(FrameHeader header, ID3Version version, Stream stream)
        {
            var frame = GetFrame(header.FrameID, version, header);

            frame.DecodeContent(ID3Utils.Read(stream, header.FrameSize));
            return(frame);
        }
예제 #3
0
        public ID3v2ExtendedHeader(Stream stream, ID3Version version)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (!stream.CanRead)
            {
                throw new ArgumentException("stream not readable");
            }

            Version = version;

            if (version == ID3Version.ID3v2_3)
            {
                Parse3(stream);
            }
            else if (version == ID3Version.ID3v2_4)
            {
                Parse4(stream);
            }
            else
            {
                throw new ID3Exception("Invalid version in extendedheader");
            }
        }
예제 #4
0
        public FrameHeader(Stream stream, ID3Version version)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (!stream.CanRead)
            {
                throw new ArgumentException("stream is not readable");
            }

            switch (version)
            {
            case ID3Version.ID3v2_2:
                Parse2(stream);
                break;

            case ID3Version.ID3v2_3:
                Parse3(stream);
                break;

            case ID3Version.ID3v2_4:
                Parse4(stream);
                break;

            default:
                throw new ID3Exception("Invalid ID3Version in Frameheader");
            }
        }
예제 #5
0
        internal static string GetID(FrameID id, ID3Version version)
        {
            var entry = Frames.Where((x) => x.ID == id);

            if (entry != null && entry.Count() > 0)
            {
                var    e   = entry.First();
                string sid = null;
                if (version == ID3Version.ID3v2_2)
                {
                    sid = e.ID3v2ID;
                }
                else if (version == ID3Version.ID3v2_3)
                {
                    sid = e.ID3v3ID;
                }
                else if (version == ID3Version.ID3v2_4)
                {
                    sid = e.ID3v4ID;
                }
                else
                {
                    throw new InvalidOperationException(String.Format("FrameID {0} is not supported on version {1}", id, version));
                }

                if (sid == null)
                {
                    throw new InvalidOperationException(String.Format("FrameID {0} is not supported on version {1}", id, version));
                }
                return(sid);
            }

            throw new ArgumentException("Invalid FrameID: " + id.ToString());
        }
예제 #6
0
 public PictureFrame(FrameHeader header, ID3Version version)
     : base(header)
 {
     if (version == ID3Version.ID3v1)
     {
         throw new InvalidEnumArgumentException("version", (int)version, typeof(ID3Version));
     }
     _version = version;
 }
예제 #7
0
 public PictureFrame(FrameHeader header, ID3Version version)
     : base(header)
 {
     if (version == ID3Version.ID3v1)
     {
         throw new NotSupportedException(string.Format("ID3Version.ID3v1 is not supported"));
     }
     _version = version;
 }
예제 #8
0
        public ID3v2ExtendedHeader(Stream stream, ID3Version version)
        {
            if (stream == null) throw new ArgumentNullException("stream");
            if (!stream.CanRead) throw new ArgumentException("stream not readable");

            Version = version;

            if (version == ID3Version.ID3v2_3)
                Parse3(stream);
            else if (version == ID3Version.ID3v2_4)
                Parse4(stream);
            else
                throw new ID3Exception("Invalid version in extendedheader");
        }
예제 #9
0
 public Frame TryGetFrame(FrameHeader header, ID3Version version, Stream stream, out bool result)
 {
     try
     {
         result = true;
         var frame = GetFrame(header, version, stream);
         return frame;
     }
     catch (Exception)
     {
         result = false;
         return null;
     }
 }
예제 #10
0
 public Frame TryGetFrame(FrameHeader header, ID3Version version, Stream stream, out bool result)
 {
     try
     {
         result = true;
         var frame = GetFrame(header, version, stream);
         return(frame);
     }
     catch (Exception)
     {
         result = false;
         return(null);
     }
 }
예제 #11
0
        public static ID3v2FrameEntry GetFrameEntry(string id, ID3Version version)
        {
            switch (version)
            {
                case ID3Version.ID3v1:
                    throw new ArgumentException("version");
                case ID3Version.ID3v2_2:
                    return Frames.Where((x) => !String.IsNullOrEmpty(x.ID3v2ID) && x.ID3v2ID.Equals(id, StringComparison.InvariantCultureIgnoreCase)).First();

                case ID3Version.ID3v2_3:
                    return Frames.Where((x) => !String.IsNullOrEmpty(x.ID3v3ID) && x.ID3v3ID.Equals(id, StringComparison.InvariantCultureIgnoreCase)).First();

                case ID3Version.ID3v2_4:
                    return Frames.Where((x) => !String.IsNullOrEmpty(x.ID3v4ID) && x.ID3v4ID.Equals(id, StringComparison.InvariantCultureIgnoreCase)).First();

                default:
                    throw new ArgumentException("Unknown version");
            }
        }
예제 #12
0
        public static ID3v2FrameEntry GetFrameEntry(string id, ID3Version version)
        {
            switch (version)
            {
                case ID3Version.ID3v1:
                    throw new ArgumentException("version");
                case ID3Version.ID3v2_2:
                    return Frames.Where((x) => !String.IsNullOrEmpty(x.ID3v2ID) && x.ID3v2ID.Equals(id, StringComparison.InvariantCultureIgnoreCase)).First();

                case ID3Version.ID3v2_3:
                    return Frames.Where((x) => !String.IsNullOrEmpty(x.ID3v3ID) && x.ID3v3ID.Equals(id, StringComparison.InvariantCultureIgnoreCase)).First();

                case ID3Version.ID3v2_4:
                    return Frames.Where((x) => !String.IsNullOrEmpty(x.ID3v4ID) && x.ID3v4ID.Equals(id, StringComparison.InvariantCultureIgnoreCase)).First();

                default:
                    throw new ArgumentException("Unknown version");
            }
        }
예제 #13
0
        public FrameHeader(Stream stream, ID3Version version)
        {
            if (stream == null) throw new ArgumentNullException("stream");
            if (!stream.CanRead) throw new ArgumentException("stream is not readable");

            switch (version)
            {
                case ID3Version.ID3v2_2:
                    Parse2(stream);
                    break;

                case ID3Version.ID3v2_3:
                    Parse3(stream);
                    break;

                case ID3Version.ID3v2_4:
                    Parse4(stream);
                    break;

                default:
                    throw new ID3Exception("Invalid ID3Version in Frameheader");
            }
        }
예제 #14
0
        public static string GetID(FrameID frameId, ID3Version version)
        {
            if (version == ID3Version.ID3v1)
                throw new ArgumentOutOfRangeException("ID3v1 does not support frames");

            string id = String.Empty;
            //http://id3.org/id3v2.3.0
            switch (frameId)
            {
                case FrameID.AudioEnctryption:
                    id = "AENC"; break;
                case FrameID.AttachedPicutre:
                    id = "APIC"; break;
                case FrameID.Comments:
                    id = "COMM"; break;
                case FrameID.CommercialFrame:
                    id = "COMR"; break;
                case FrameID.EncryptionMethodRegistration:
                    id = "ENCR"; break;
                case FrameID.Equalization:
                    id = "EQUA"; break;
                case FrameID.EventTimeingCodes:
                    id = "ETCO"; break;
                case FrameID.GeneralEncapsulatedObject:
                    id = "GEOB"; break;
                case FrameID.GroupIdentificationRegistration:
                    id = "GRID"; break;
                case FrameID.InvolvedPeopleList:
                    if (version == ID3Version.ID3v2_4)
                        id = "TIPL"; break;
                    id = "IPLS"; break;
                case FrameID.LinkedInformation:
                    id = "LINK"; break;
                case FrameID.MusicCDIdentifier:
                    id = "MCDI"; break;
                case FrameID.MPEGLocationLookupTable:
                    id = "MLLT"; break;
                case FrameID.OwnershipFrame:
                    id = "OWNE"; break;
                case FrameID.PrivateFrame:
                    id = "PRIV"; break;
                case FrameID.PlayCounter:
                    id = "PCNT"; break;
                case FrameID.Popularimeter:
                    id = "POPM"; break;
                case FrameID.PositionSynchronisationFrame:
                    id = "POSS"; break;
                case FrameID.RecommendedBufferSize:
                    id = "RBUF"; break;
                case FrameID.RelativeVolumeAdjustment:
                    id = "RVAD"; break;
                case FrameID.Reverb:
                    id = "RVRB"; break;
                case FrameID.SynchronizedLyrics:
                    id = "SYLT"; break;
                case FrameID.SynchronizedTempoCodes:
                    id = "SYTC"; break;
                case FrameID.Album:
                    id = "TALB"; break;
                case FrameID.BeatsPerMinute:
                    id = "TBPM"; break;
                case FrameID.Composer:
                    id = "TCOM"; break;
                case FrameID.ContentType:
                    id = "TCON"; break;
                case FrameID.CopyrightMessage:
                    id = "TCOP"; break;
                case FrameID.Date:
                    id = "TDAT"; break;
                case FrameID.PlaylistDelay:
                    id = "TDLY"; break;
                case FrameID.EncodedBy:
                    id = "TENC"; break;
                case FrameID.TextWriter:
                    id = "TEXT"; break;
                case FrameID.FileType:
                    id = "TFLT"; break;
                case FrameID.Time:
                    id = "TIME"; break;
                case FrameID.ContentGroupDescription:
                    id = "TIT1"; break;
                case FrameID.Title:
                    id = "TIT2"; break;
                case FrameID.Subtitle:
                    id = "TIT3"; break;
                case FrameID.InitialKey:
                    id = "TKEY"; break;
                case FrameID.Languages:
                    id = "TLAN"; break;
                case FrameID.Length:
                    id = "TLEN"; break;
                case FrameID.MediaType:
                    id = "TMED"; break;
                case FrameID.OriginalAlbum:
                    id = "TOAL"; break;
                case FrameID.OriginalFileName:
                    id = "TOFN"; break;
                case FrameID.OriginalTextWriter:
                    id = "TOLY"; break;
                case FrameID.OriginalArtist:
                    id = "TOPE"; break;
                case FrameID.OriginalReleaseYear:
                    id = "TORY"; break;
                case FrameID.FileOwner:
                    id = "TOWN"; break;
                case FrameID.LeadPerformers:
                    id = "TPE1"; break;
                case FrameID.Band:
                    id = "TPE2"; break;
                case FrameID.Conductor:
                    id = "TPE3"; break;
                case FrameID.Interpreted:
                    id = "TPE4"; break;
                case FrameID.PartOfASet:
                    id = "TPOS"; break;
                case FrameID.Publisher:
                    id = "TPUB"; break;
                case FrameID.TrackNumber:
                    id = "TRCK"; break;
                case FrameID.RecordingDates:
                    id = "TRDA"; break;
                case FrameID.InternetRadioStationName:
                    id = "TRSN"; break;
                case FrameID.InternetRadioStationOwner:
                    id = "TRSO"; break;
                case FrameID.Size:
                    id = "TSIZ"; break;
                case FrameID.ISRC:
                    id = "TSRC"; break;
                case FrameID.EncodingSettings:
                    id = "TSSE"; break;
                case FrameID.Year:
                    id = "TYER"; break;
                case FrameID.UserTextInformation:
                    id = "TXXX"; break;
                case FrameID.UniqueFileIdentifier:
                    id = "UFID"; break;
                case FrameID.TermsOfUse:
                    id = "USER"; break;
                case FrameID.UnsynchronizedLyris:
                    id = "USLT"; break;
                case FrameID.CommercialInformationURL:
                    id = "WCOM"; break;
                case FrameID.CopyrightURL:
                    id = "WCOP"; break;
                case FrameID.OfficialAudioFileWebpage:
                    id = "WOAF"; break;
                case FrameID.OfficialArtistWebpage:
                    id = "WOAR"; break;
                case FrameID.OfficialAudioSourceWebpage:
                    id = "WOAS"; break;
                case FrameID.InternetRadioStationWebpage:
                    id = "WORS"; break;
                case FrameID.PaymentURL:
                    id = "WPAY"; break;
                case FrameID.PublishersOfficialWebpage:
                    id = "WPUB"; break;
                case FrameID.UserURLLinkFrame:
                    id = "WXXX"; break;
                case FrameID.MusicicanCreditsList:
                    id = "TMCL"; break;
                case FrameID.Mood:
                    id = "TMOO"; break;
                case FrameID.ProducedNotice:
                    id = "TPRO"; break;
                case FrameID.AlbumSortOrder:
                    id = "TSOA"; break;
                case FrameID.PerformerSortOrder:
                    id = "TSOP"; break;
                case FrameID.TitleSortOrder:
                    id = "TSOT"; break;
                case FrameID.SetSubtitle:
                    id = "TSST"; break;
                default:
                    throw new ArgumentOutOfRangeException("frameid", "Invalid FrameID");
            }

            if (version == ID3Version.ID3v2_2)
            {
                id = ConvertVersion3IDToVersion2(id);
            }
            return id;
        }
예제 #15
0
        public static string GetID(FrameID frameId, ID3Version version)
        {
            if (version == ID3Version.ID3v1)
            {
                throw new ArgumentOutOfRangeException("ID3v1 does not support frames");
            }

            string id = String.Empty;

            //http://id3.org/id3v2.3.0
            switch (frameId)
            {
            case FrameID.AudioEnctryption:
                id = "AENC"; break;

            case FrameID.AttachedPicutre:
                id = "APIC"; break;

            case FrameID.Comments:
                id = "COMM"; break;

            case FrameID.CommercialFrame:
                id = "COMR"; break;

            case FrameID.EncryptionMethodRegistration:
                id = "ENCR"; break;

            case FrameID.Equalization:
                id = "EQUA"; break;

            case FrameID.EventTimeingCodes:
                id = "ETCO"; break;

            case FrameID.GeneralEncapsulatedObject:
                id = "GEOB"; break;

            case FrameID.GroupIdentificationRegistration:
                id = "GRID"; break;

            case FrameID.InvolvedPeopleList:
                if (version == ID3Version.ID3v2_4)
                {
                    id = "TIPL";
                }
                break;
                id = "IPLS"; break;

            case FrameID.LinkedInformation:
                id = "LINK"; break;

            case FrameID.MusicCDIdentifier:
                id = "MCDI"; break;

            case FrameID.MPEGLocationLookupTable:
                id = "MLLT"; break;

            case FrameID.OwnershipFrame:
                id = "OWNE"; break;

            case FrameID.PrivateFrame:
                id = "PRIV"; break;

            case FrameID.PlayCounter:
                id = "PCNT"; break;

            case FrameID.Popularimeter:
                id = "POPM"; break;

            case FrameID.PositionSynchronisationFrame:
                id = "POSS"; break;

            case FrameID.RecommendedBufferSize:
                id = "RBUF"; break;

            case FrameID.RelativeVolumeAdjustment:
                id = "RVAD"; break;

            case FrameID.Reverb:
                id = "RVRB"; break;

            case FrameID.SynchronizedLyrics:
                id = "SYLT"; break;

            case FrameID.SynchronizedTempoCodes:
                id = "SYTC"; break;

            case FrameID.Album:
                id = "TALB"; break;

            case FrameID.BeatsPerMinute:
                id = "TBPM"; break;

            case FrameID.Composer:
                id = "TCOM"; break;

            case FrameID.ContentType:
                id = "TCON"; break;

            case FrameID.CopyrightMessage:
                id = "TCOP"; break;

            case FrameID.Date:
                id = "TDAT"; break;

            case FrameID.PlaylistDelay:
                id = "TDLY"; break;

            case FrameID.EncodedBy:
                id = "TENC"; break;

            case FrameID.TextWriter:
                id = "TEXT"; break;

            case FrameID.FileType:
                id = "TFLT"; break;

            case FrameID.Time:
                id = "TIME"; break;

            case FrameID.ContentGroupDescription:
                id = "TIT1"; break;

            case FrameID.Title:
                id = "TIT2"; break;

            case FrameID.Subtitle:
                id = "TIT3"; break;

            case FrameID.InitialKey:
                id = "TKEY"; break;

            case FrameID.Languages:
                id = "TLAN"; break;

            case FrameID.Length:
                id = "TLEN"; break;

            case FrameID.MediaType:
                id = "TMED"; break;

            case FrameID.OriginalAlbum:
                id = "TOAL"; break;

            case FrameID.OriginalFileName:
                id = "TOFN"; break;

            case FrameID.OriginalTextWriter:
                id = "TOLY"; break;

            case FrameID.OriginalArtist:
                id = "TOPE"; break;

            case FrameID.OriginalReleaseYear:
                id = "TORY"; break;

            case FrameID.FileOwner:
                id = "TOWN"; break;

            case FrameID.LeadPerformers:
                id = "TPE1"; break;

            case FrameID.Band:
                id = "TPE2"; break;

            case FrameID.Conductor:
                id = "TPE3"; break;

            case FrameID.Interpreted:
                id = "TPE4"; break;

            case FrameID.PartOfASet:
                id = "TPOS"; break;

            case FrameID.Publisher:
                id = "TPUB"; break;

            case FrameID.TrackNumber:
                id = "TRCK"; break;

            case FrameID.RecordingDates:
                id = "TRDA"; break;

            case FrameID.InternetRadioStationName:
                id = "TRSN"; break;

            case FrameID.InternetRadioStationOwner:
                id = "TRSO"; break;

            case FrameID.Size:
                id = "TSIZ"; break;

            case FrameID.ISRC:
                id = "TSRC"; break;

            case FrameID.EncodingSettings:
                id = "TSSE"; break;

            case FrameID.Year:
                id = "TYER"; break;

            case FrameID.UserTextInformation:
                id = "TXXX"; break;

            case FrameID.UniqueFileIdentifier:
                id = "UFID"; break;

            case FrameID.TermsOfUse:
                id = "USER"; break;

            case FrameID.UnsynchronizedLyris:
                id = "USLT"; break;

            case FrameID.CommercialInformationURL:
                id = "WCOM"; break;

            case FrameID.CopyrightURL:
                id = "WCOP"; break;

            case FrameID.OfficialAudioFileWebpage:
                id = "WOAF"; break;

            case FrameID.OfficialArtistWebpage:
                id = "WOAR"; break;

            case FrameID.OfficialAudioSourceWebpage:
                id = "WOAS"; break;

            case FrameID.InternetRadioStationWebpage:
                id = "WORS"; break;

            case FrameID.PaymentURL:
                id = "WPAY"; break;

            case FrameID.PublishersOfficialWebpage:
                id = "WPUB"; break;

            case FrameID.UserURLLinkFrame:
                id = "WXXX"; break;

            case FrameID.MusicicanCreditsList:
                id = "TMCL"; break;

            case FrameID.Mood:
                id = "TMOO"; break;

            case FrameID.ProducedNotice:
                id = "TPRO"; break;

            case FrameID.AlbumSortOrder:
                id = "TSOA"; break;

            case FrameID.PerformerSortOrder:
                id = "TSOP"; break;

            case FrameID.TitleSortOrder:
                id = "TSOT"; break;

            case FrameID.SetSubtitle:
                id = "TSST"; break;

            default:
                throw new ArgumentOutOfRangeException("frameid", "Invalid FrameID");
            }

            if (version == ID3Version.ID3v2_2)
            {
                id = ConvertVersion3IDToVersion2(id);
            }
            return(id);
        }
예제 #16
0
        private Frame GetFrame(string id, ID3Version version, FrameHeader header)
        {
            FrameID frameID = FrameIDFactory.GetFrameEntry(id, version).ID;

            switch (frameID)
            {
            case FrameID.Length:
            case FrameID.EncodedBy:    //---
            case FrameID.Album:
            case FrameID.Composer:
            case FrameID.ContentType:
            case FrameID.CopyrightMessage:
            case FrameID.TextWriter:
            case FrameID.FileType:
            case FrameID.ContentGroupDescription:
            case FrameID.Title:
            case FrameID.Subtitle:
            case FrameID.InitialKey:
            case FrameID.Languages:
            case FrameID.MediaType:
            case FrameID.OriginalAlbum:
            case FrameID.OriginalFileName:
            case FrameID.OriginalTextWriter:
            case FrameID.OriginalArtist:
            case FrameID.FileOwner:
            case FrameID.LeadPerformers:     //--
            case FrameID.Band:
            case FrameID.Conductor:
            case FrameID.Interpreted:     //remixed
            case FrameID.PartOfASet:
            case FrameID.Publisher:
            case FrameID.TrackNumber:
            case FrameID.RecordingDates:
            case FrameID.InternetRadioStationName:
            case FrameID.InternetRadioStationOwner:
            case FrameID.ISRC:
            case FrameID.EncodingSettings:
            case FrameID.MusicicanCreditsList:
            case FrameID.InvolvedPeopleList:
            case FrameID.Mood:
            case FrameID.ProducedNotice:
            case FrameID.AlbumSortOrder:
            case FrameID.PerformerSortOrder:
            case FrameID.TitleSortOrder:
            case FrameID.SetSubtitle:
                return(new MultiStringTextFrame(header)); //multistringtextframe

            case FrameID.Size:                            //---
            case FrameID.BeatsPerMinute:
            case FrameID.Date:
            case FrameID.PlaylistDelay:
            case FrameID.Time:
            case FrameID.OriginalReleaseYear:
            case FrameID.Year:
                return(new NumericTextFrame(header));    //numerictextframe

            case FrameID.RecordingTime:
            case FrameID.OriginalReleaseTime:
            case FrameID.EncodingTime:
            case FrameID.ReleaseTime:
            case FrameID.TaggingTime:
                return(new TimestampTextFrame(header));    //Timestamptextframe

            case FrameID.CommercialInformationURL:
            case FrameID.CopyrightURL:
            case FrameID.OfficialAudioFileWebpage:
            case FrameID.OfficialArtistWebpage:
            case FrameID.OfficialAudioSourceWebpage:
            case FrameID.InternetRadioStationWebpage:
            case FrameID.PaymentURL:
            case FrameID.PublishersOfficialWebpage:
                return(new TextFrame(header));    //textframe

            case FrameID.PrivateFrame:
            case FrameID.UniqueFileIdentifier:
                return(new DataFrame(header));

            case FrameID.MusicCDIdentifier:
            case FrameID.RecommendedBufferSize:     //---
            case FrameID.EncryptedMetaData:
            case FrameID.AudioSeekPointIndex:
            case FrameID.MPEGLocationLookupTable:
            case FrameID.SynchronizedTempoCodes:
            case FrameID.RelativeVolumeAdjustment:
            case FrameID.RelativeVolumeAdjustmentOld:
            case FrameID.Equalization:
            case FrameID.EqualizationOld:
                return(new BinaryFrame(header));

            case FrameID.UserTextInformation:
            case FrameID.UserURLLinkFrame:
                return(new UserDefiniedTextFrame(header));

            case FrameID.AttachedPicutre:
                return(new PictureFrame(header, version));

            case FrameID.UnsynchronizedLyris:
            case FrameID.Comments:
                return(new CommentAndLyricsFrame(header));

            case FrameID.TermsOfUse:
                return(new TermsOfUseFrame(header));

            case FrameID.OwnershipFrame:
                return(new OwnershipFrame(header));

            case FrameID.CommercialFrame:
                return(new CommercialFrame(header));

            case FrameID.Popularimeter:
                return(new Popularimeter(header));
            }
            return(null);
        }
예제 #17
0
        public static FrameID GetFrameType(string frameID, ID3Version version)
        {
            if (version == ID3Version.ID3v1)
            {
                throw new ArgumentOutOfRangeException("ID3v1 does not support frames");
            }

            if (version == ID3Version.ID3v2_2)
            {
                frameID = ConvertVersion2IDToVersion3(frameID);
            }

            switch (frameID)
            {
            case "AENC":
                return(FrameID.AudioEnctryption);

            case "APIC":
                return(FrameID.AttachedPicutre);

            case "COMM":
                return(FrameID.Comments);

            case "COMR":
                return(FrameID.CommercialFrame);

            case "ENCR":
                return(FrameID.EncryptionMethodRegistration);

            case "EQUA":
                return(FrameID.Equalization);

            case "ETCO":
                return(FrameID.EventTimeingCodes);

            case "GEOB":
                return(FrameID.GeneralEncapsulatedObject);

            case "GRID":
                return(FrameID.GroupIdentificationRegistration);

            case "IPLS":
            case "TIPL":
                return(FrameID.InvolvedPeopleList);

            case "LINK":
                return(FrameID.LinkedInformation);

            case "MCDI":
                return(FrameID.MusicCDIdentifier);

            case "MLLT":
                return(FrameID.MPEGLocationLookupTable);

            case "OWNE":
                return(FrameID.OwnershipFrame);

            case "PRIV":
                return(FrameID.PrivateFrame);

            case "PCNT":
                return(FrameID.PlayCounter);

            case "POPM":
                return(FrameID.Popularimeter);

            case "POSS":
                return(FrameID.PositionSynchronisationFrame);

            case "RBUF":
                return(FrameID.RecommendedBufferSize);

            case "RVAD":
                return(FrameID.RelativeVolumeAdjustment);

            case "RVRB":
                return(FrameID.Reverb);

            case "SYLT":
                return(FrameID.SynchronizedLyrics);

            case "SYTC":
                return(FrameID.SynchronizedTempoCodes);

            case "TALB":
                return(FrameID.Album);

            case "TBPM":
                return(FrameID.BeatsPerMinute);

            case "TCOM":
                return(FrameID.Composer);

            case "TCON":
                return(FrameID.ContentType);

            case "TCOP":
                return(FrameID.CopyrightMessage);

            case "TDAT":
                return(FrameID.Date);

            case "TDLY":
                return(FrameID.PlaylistDelay);

            case "TENC":
                return(FrameID.EncodedBy);

            case "TEXT":
                return(FrameID.TextWriter);

            case "TFLT":
                return(FrameID.FileType);

            case "TIME":
                return(FrameID.Time);

            case "TIT1":
                return(FrameID.ContentGroupDescription);

            case "TIT2":
                return(FrameID.Title);

            case "TIT3":
                return(FrameID.Subtitle);

            case "TKEY":
                return(FrameID.InitialKey);

            case "TLAN":
                return(FrameID.Languages);

            case "TLEN":
                return(FrameID.Length);

            case "TMED":
                return(FrameID.MediaType);

            case "TOAL":
                return(FrameID.OriginalAlbum);

            case "TOFN":
                return(FrameID.OriginalFileName);

            case "TOLY":
                return(FrameID.OriginalTextWriter);

            case "TOPE":
                return(FrameID.OriginalArtist);

            case "TORY":
                return(FrameID.OriginalReleaseYear);

            case "TPE1":
                return(FrameID.LeadPerformers);

            case "TPE2":
                return(FrameID.Band);

            case "TPE3":
                return(FrameID.Conductor);

            case "TPE4":
                return(FrameID.Interpreted);

            case "TPOS":
                return(FrameID.PartOfASet);

            case "TPUB":
                return(FrameID.Publisher);

            case "TRCK":
                return(FrameID.TrackNumber);

            case "TRDA":
                return(FrameID.RecordingDates);

            case "TRSN":
                return(FrameID.InternetRadioStationName);

            case "TRSO":
                return(FrameID.InternetRadioStationOwner);

            case "TSIZ":
                return(FrameID.Size);

            case "TSRC":
                return(FrameID.ISRC);

            case "TSSE":
                return(FrameID.EncodingSettings);

            case "TYER":
                return(FrameID.Year);

            case "TXXX":
                return(FrameID.UserTextInformation);

            case "UFID":
                return(FrameID.UniqueFileIdentifier);

            case "USER":
                return(FrameID.TermsOfUse);

            case "USLT":
                return(FrameID.UnsynchronizedLyris);

            case "WCOM":
                return(FrameID.CommercialInformationURL);

            case "WCOP":
                return(FrameID.CopyrightURL);

            case "WOAF":
                return(FrameID.OfficialAudioFileWebpage);

            case "WOAR":
                return(FrameID.OfficialArtistWebpage);

            case "WOAS":
                return(FrameID.OfficialAudioSourceWebpage);

            case "WORS":
                return(FrameID.InternetRadioStationWebpage);

            case "WPAY":
                return(FrameID.PaymentURL);

            case "WPUB":
                return(FrameID.PublishersOfficialWebpage);

            case "WXXX":
                return(FrameID.UserURLLinkFrame);

            case "TMCL":
                return(FrameID.MusicicanCreditsList);

            case "TMOO":
                return(FrameID.Mood);

            case "TPRO":
                return(FrameID.ProducedNotice);

            case "TSOA":
                return(FrameID.AlbumSortOrder);

            case "TSOP":
                return(FrameID.PerformerSortOrder);

            case "TSOT":
                return(FrameID.TitleSortOrder);

            case "TSST":
                return(FrameID.SetSubtitle);

            default:
                throw new ArgumentOutOfRangeException("frameid", "Invalid FrameID");
            }
        }
예제 #18
0
        internal static string GetID(FrameID id, ID3Version version)
        {
            var entry = Frames.Where((x) => x.ID == id);
            if (entry != null && entry.Count() > 0)
            {
                var e = entry.First();
                string sid = null;
                if (version == ID3Version.ID3v2_2)
                    sid = e.ID3v2ID;
                else if (version == ID3Version.ID3v2_3)
                    sid = e.ID3v3ID;
                else if (version == ID3Version.ID3v2_4)
                    sid = e.ID3v4ID;
                else
                    throw new InvalidOperationException(String.Format("FrameID {0} is not supported on version {1}", id, version));

                if (sid == null)
                    throw new InvalidOperationException(String.Format("FrameID {0} is not supported on version {1}", id, version));
                return sid;
            }

            throw new ArgumentException("Invalid FrameID: " + id.ToString());
        }
예제 #19
0
        private Frame GetFrame(string id, ID3Version version, FrameHeader header)
        {
            FrameID frameID = FrameIDFactory2.GetFrameEntry(id, version).ID;
            switch (frameID)
            {
                case FrameID.Length:
                case FrameID.EncodedBy://---
                case FrameID.Album:
                case FrameID.Composer:
                case FrameID.ContentType:
                case FrameID.CopyrightMessage:
                case FrameID.TextWriter:
                case FrameID.FileType:
                case FrameID.ContentGroupDescription:
                case FrameID.Title:
                case FrameID.Subtitle:
                case FrameID.InitialKey:
                case FrameID.Languages:
                case FrameID.MediaType:
                case FrameID.OriginalAlbum:
                case FrameID.OriginalFileName:
                case FrameID.OriginalTextWriter:
                case FrameID.OriginalArtist:
                case FrameID.FileOwner:
                case FrameID.LeadPerformers: //--
                case FrameID.Band:
                case FrameID.Conductor:
                case FrameID.Interpreted: //remixed
                case FrameID.PartOfASet:
                case FrameID.Publisher:
                case FrameID.TrackNumber:
                case FrameID.RecordingDates:
                case FrameID.InternetRadioStationName:
                case FrameID.InternetRadioStationOwner:
                case FrameID.ISRC:
                case FrameID.EncodingSettings:
                case FrameID.MusicicanCreditsList:
                case FrameID.InvolvedPeopleList:
                case FrameID.Mood:
                case FrameID.ProducedNotice:
                case FrameID.AlbumSortOrder:
                case FrameID.PerformerSortOrder:
                case FrameID.TitleSortOrder:
                case FrameID.SetSubtitle:
                    return new MultiStringTextFrame(header); //multistringtextframe
                case FrameID.Size://---
                case FrameID.BeatsPerMinute:
                case FrameID.Date:
                case FrameID.PlaylistDelay:
                case FrameID.Time:
                case FrameID.OriginalReleaseYear:
                case FrameID.Year:
                    return new NumericTextFrame(header); //numerictextframe
                case FrameID.RecordingTime:
                case FrameID.OriginalReleaseTime:
                case FrameID.EncodingTime:
                case FrameID.ReleaseTime:
                case FrameID.TaggingTime:
                    return new TimestampTextFrame(header); //Timestamptextframe
                case FrameID.CommercialInformationURL:
                case FrameID.CopyrightURL:
                case FrameID.OfficialAudioFileWebpage:
                case FrameID.OfficialArtistWebpage:
                case FrameID.OfficialAudioSourceWebpage:
                case FrameID.InternetRadioStationWebpage:
                case FrameID.PaymentURL:
                case FrameID.PublishersOfficialWebpage:
                    return new TextFrame(header); //textframe
                case FrameID.PrivateFrame:
                case FrameID.UniqueFileIdentifier:
                    return new DataFrame(header);

                case FrameID.MusicCDIdentifier:
                case FrameID.RecommendedBufferSize: //---
                case FrameID.EncryptedMetaData:
                case FrameID.AudioSeekPointIndex:
                case FrameID.MPEGLocationLookupTable:
                case FrameID.SynchronizedTempoCodes:
                case FrameID.RelativeVolumeAdjustment:
                case FrameID.RelativeVolumeAdjustmentOld:
                case FrameID.Equalization:
                case FrameID.EqualizationOld:
                    return new BinaryFrame(header);

                case FrameID.UserTextInformation:
                case FrameID.UserURLLinkFrame:
                    return new UserDefiniedTextFrame(header);

                case FrameID.AttachedPicutre:
                    return new PictureFrame(header, version);

                case FrameID.UnsynchronizedLyris:
                case FrameID.Comments:
                    return new CommentAndLyricsFrame(header);

                case FrameID.TermsOfUse:
                    return new TermsOfUseFrame(header);

                case FrameID.OwnershipFrame:
                    return new OwnershipFrame(header);

                case FrameID.CommercialFrame:
                    return new CommercialFrame(header);

                case FrameID.Popularimeter:
                    return new Popularimeter(header);
            }
            return null;
        }
예제 #20
0
        public static FrameID GetFrameType(string frameID, ID3Version version)
        {
            if (version == ID3Version.ID3v1)
                throw new ArgumentOutOfRangeException("ID3v1 does not support frames");

            if (version == ID3Version.ID3v2_2)
                frameID = ConvertVersion2IDToVersion3(frameID);

            switch (frameID)
            {
                case "AENC":
                    return FrameID.AudioEnctryption;
                case "APIC":
                    return FrameID.AttachedPicutre;
                case "COMM":
                    return FrameID.Comments;
                case "COMR":
                    return FrameID.CommercialFrame;
                case "ENCR":
                    return FrameID.EncryptionMethodRegistration;
                case "EQUA":
                    return FrameID.Equalization;
                case "ETCO":
                    return FrameID.EventTimeingCodes;
                case "GEOB":
                    return FrameID.GeneralEncapsulatedObject;
                case "GRID":
                    return FrameID.GroupIdentificationRegistration;
                case "IPLS":
                case "TIPL":
                    return FrameID.InvolvedPeopleList;
                case "LINK":
                    return FrameID.LinkedInformation;
                case "MCDI":
                    return FrameID.MusicCDIdentifier;
                case "MLLT":
                    return FrameID.MPEGLocationLookupTable;
                case "OWNE":
                    return FrameID.OwnershipFrame;
                case "PRIV":
                    return FrameID.PrivateFrame;
                case "PCNT":
                    return FrameID.PlayCounter;
                case "POPM":
                    return FrameID.Popularimeter;
                case "POSS":
                    return FrameID.PositionSynchronisationFrame;
                case "RBUF":
                    return FrameID.RecommendedBufferSize;
                case "RVAD":
                    return FrameID.RelativeVolumeAdjustment;
                case "RVRB":
                    return FrameID.Reverb;
                case "SYLT":
                    return FrameID.SynchronizedLyrics;
                case "SYTC":
                    return FrameID.SynchronizedTempoCodes;
                case "TALB":
                    return FrameID.Album;
                case "TBPM":
                    return FrameID.BeatsPerMinute;
                case "TCOM":
                    return FrameID.Composer;
                case "TCON":
                    return FrameID.ContentType;
                case "TCOP":
                    return FrameID.CopyrightMessage;
                case "TDAT":
                    return FrameID.Date;
                case "TDLY":
                    return FrameID.PlaylistDelay;
                case "TENC":
                    return FrameID.EncodedBy;
                case "TEXT":
                    return FrameID.TextWriter;
                case "TFLT":
                    return FrameID.FileType;
                case "TIME":
                    return FrameID.Time;
                case "TIT1":
                    return FrameID.ContentGroupDescription;
                case "TIT2":
                    return FrameID.Title;
                case "TIT3":
                    return FrameID.Subtitle;
                case "TKEY":
                    return FrameID.InitialKey;
                case "TLAN":
                    return FrameID.Languages;
                case "TLEN":
                    return FrameID.Length;
                case "TMED":
                    return FrameID.MediaType;
                case "TOAL":
                    return FrameID.OriginalAlbum;
                case "TOFN":
                    return FrameID.OriginalFileName;
                case "TOLY":
                    return FrameID.OriginalTextWriter;
                case "TOPE":
                    return FrameID.OriginalArtist;
                case "TORY":
                    return FrameID.OriginalReleaseYear;
                case "TPE1":
                    return FrameID.LeadPerformers;
                case "TPE2":
                    return FrameID.Band;
                case "TPE3":
                    return FrameID.Conductor;
                case "TPE4":
                    return FrameID.Interpreted;
                case "TPOS":
                    return FrameID.PartOfASet;
                case "TPUB":
                    return FrameID.Publisher;
                case "TRCK":
                    return FrameID.TrackNumber;
                case "TRDA":
                    return FrameID.RecordingDates;
                case "TRSN":
                    return FrameID.InternetRadioStationName;
                case "TRSO":
                    return FrameID.InternetRadioStationOwner;
                case "TSIZ":
                    return FrameID.Size;
                case "TSRC":
                    return FrameID.ISRC;
                case "TSSE":
                    return FrameID.EncodingSettings;
                case "TYER":
                    return FrameID.Year;
                case "TXXX":
                    return FrameID.UserTextInformation;
                case "UFID":
                    return FrameID.UniqueFileIdentifier;
                case "USER":
                    return FrameID.TermsOfUse;
                case "USLT":
                    return FrameID.UnsynchronizedLyris;
                case "WCOM":
                    return FrameID.CommercialInformationURL;
                case "WCOP":
                    return FrameID.CopyrightURL;
                case "WOAF":
                    return FrameID.OfficialAudioFileWebpage;
                case "WOAR":
                    return FrameID.OfficialArtistWebpage;
                case "WOAS":
                    return FrameID.OfficialAudioSourceWebpage;
                case "WORS":
                    return FrameID.InternetRadioStationWebpage;
                case "WPAY":
                    return FrameID.PaymentURL;
                case "WPUB":
                    return FrameID.PublishersOfficialWebpage;
                case "WXXX":
                    return FrameID.UserURLLinkFrame;
                case "TMCL":
                    return FrameID.MusicicanCreditsList;
                case "TMOO":
                    return FrameID.Mood;
                case "TPRO":
                    return FrameID.ProducedNotice;
                case "TSOA":
                    return FrameID.AlbumSortOrder;
                case "TSOP":
                    return FrameID.PerformerSortOrder;
                case "TSOT":
                    return FrameID.TitleSortOrder;
                case "TSST":
                    return FrameID.SetSubtitle;
                default:
                    throw new ArgumentOutOfRangeException("frameid", "Invalid FrameID");
            }
        }
예제 #21
0
 public Frame GetFrame(FrameHeader header, ID3Version version, Stream stream)
 {
     var frame = GetFrame(header.FrameID, version, header);
     frame.DecodeContent(ID3Utils.Read(stream, header.FrameSize));
     return frame;
 }