示例#1
0
        public void TransferBaseValuesToFrames()
        {
            foreach (var name in BaseCollumnNames)
                {
                    var frameName = FrameNamesDictionary[name];
                    if (FrameByName.ContainsKey(frameName))
                    {
                        switch (name)
                        {
                            case "Title": FrameByName[frameName].Value = Title; break;
                            case "Album": FrameByName[frameName].Value = Album; break;
                            case "Artist": FrameByName[frameName].Value = Artist; break;
                            case "Comment": FrameByName[frameName].Value = Comment; break;
                        }
                    } else
                    {
                        // frame does not exist
                        var newFrame = new TAG2Frame();
                        newFrame.Name = frameName;
                        switch (name)
                        {
                            case "Title": newFrame.Value = Title; break;
                            case "Album": newFrame.Value =  Album; break;
                            case "Artist": newFrame.Value = Artist; break;
                            case "Comment": newFrame.Value = Comment; break;
                        }

                        AddFrame(newFrame);
                    }
                }

            //  track number
            var trackFrameName = FrameNamesDictionary["Track"];
            if (!FrameByName.ContainsKey(trackFrameName))
            {
                    AddFrame(trackFrameName,"");
            }
            FrameByName[trackFrameName].Value = TrackNumber.ToString();

            // year
            var yearFrameName = FrameNamesDictionary["Year"];
            if (!FrameByName.ContainsKey(yearFrameName))
            {
                AddFrame(yearFrameName,"");
            }
            FrameByName[yearFrameName].Value = Year.ToString();

            // genre
            var genreFrameName = FrameNamesDictionary["Genre"];
            if (!FrameByName.ContainsKey(genreFrameName))
            {
                AddFrame(genreFrameName,"");
            }
            FrameByName[genreFrameName].Value = GenreText + "("+Genre+")";
        }
示例#2
0
        public override bool ReadFromStream(FileStream fStream, bool throwExceptions)
        {
            /*

             +-----------------------------+
             |      Header (10 bytes)      |
             +-----------------------------+
             |       Extended Header       |
             | (variable length, OPTIONAL) |
             +-----------------------------+
             |   Frames (variable length)  |
             +-----------------------------+
             |           Padding           |
             | (variable length, OPTIONAL) |
             +-----------------------------+
             | Footer (10 bytes, OPTIONAL) |
             +-----------------------------+

                ID3v2/file identifier      "ID3"
                     ID3v2 version              $04 00
                     ID3v2 flags                %abcd0000
                     ID3v2 size             4 * %0xxxxxxx

             */

            try
            {
                Clear();

                Loaded = false;
                Active = false;
                Changed = false;

                Logger.Logger.WriteToLog(String.Format("Reading TAG v2 ..."));

                if (fStream.Length<HeaderByteLength)
                {
                    throw new Exception(String.Format("File length < {0}",HeaderByteLength));
                }

                OriginalHeader = new byte[HeaderByteLength];

                fStream.Seek(0,0);
                fStream.Read(OriginalHeader,0,HeaderByteLength);

                byte[] id3tag2Indication = new byte[] {OriginalHeader[0],OriginalHeader[1],OriginalHeader[2]};

                VersionMajor = OriginalHeader[3];
                VersionRevision = OriginalHeader[4];

                var totalTagSize = new byte[] {0,0,0,0};
                for (var i=0;i<4;i++) totalTagSize[i] = OriginalHeader[6+i];

                if (!IsValid)
                {
                    Logger.Logger.WriteToLog("TAG v2 not found (or invalid header)");
                    return false;
                }

                TotalByteLength =  Convert.ToInt32(TAG2Frame.MakeID3v2Size(totalTagSize,7));

                if (FlagUnsynchronisation)
                {
                    throw new Exception("TAG v2 Unsynchronisation not supported yet");
                }

                if (FlagExtendedHeader)
                {
                    throw new Exception("Extended header not supported yet");
                }

                if (FlagFooter)
                {
                    throw new Exception("Usage of footer - not supported yet");
                }

                    long actSize = 0;
                    while(actSize<TotalByteLength-HeaderByteLength)
                    {
                        var frame = new TAG2Frame();
                        var ok = frame.ReadFromOpenedStream(fStream,VersionMajor,false);
                        if (!ok)
                        {
                            //if (throwExceptions) throw new Exception("Error reading frame");
                            if (Frames.Count == 0) Logger.Logger.WriteToLog("First Invalid frame found");
                            break;
                        }

                        actSize+=TAG2Frame.HeaderByteLength+frame.Size;

                        /*
                        Logger.Logger.WriteToLog(String.Format("Adding frame {0}",frame.Name));
                        Logger.Logger.WriteToLog("Name:"+frame.Name);
                        Logger.Logger.WriteToLog("Size:"+frame.Size);
                        Logger.Logger.WriteToLog("Value:"+frame.Value);
                        if (frame.Name != "APIC")
                        Logger.Logger.WriteToLog("Data:"+TAG2Frame.ByteArrayToDecimalStrings(frame.OriginalData));
                        Logger.Logger.WriteToLog("-------------");
                        */

                        AddFrame(frame);
                    }

                ParseBaseValues();

                Logger.Logger.WriteToLog(String.Format("TAG found: (Title:{0}, Artist:{1}, ...)",Title,Artist));

                Active = true;
                Loaded = true;
                Changed = false;

                return true;

            } catch (Exception ex)
            {
                Logger.Logger.WriteToLog(String.Format("Error while reading TAG v2"),ex);
                if (throwExceptions) throw;
                return false;
            }
        }
示例#3
0
        public void AddFrame(string name,string value)
        {
            var newFrame = new TAG2Frame();
            newFrame.Name = name;
            newFrame.Value = value;

            AddFrame(newFrame);
        }
示例#4
0
        public TAG2Frame GetOrCreateImageFrame(ImageType imgType)
        {
            var imageFrame = GetFrameByImageType(imgType);
                if (imageFrame== null)
                {
                    // no frame found, creating new

                    imageFrame = new TAG2Frame();
                    imageFrame.Name = "APIC";
                    imageFrame.FrameImage.ImgType = imgType;
                    imageFrame.FrameImage.ImgDescription = "";
                    imageFrame.FrameImage.ImgMime = "";

                    AddFrame(imageFrame);
                }

            return imageFrame;
        }
示例#5
0
 public void AddFrame(TAG2Frame frame)
 {
     Frames.Add(frame);
     if (!FrameByName.ContainsKey(frame.Name)) FrameByName.Add(frame.Name,frame);
 }