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+")"; }
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; } }
public void AddFrame(string name,string value) { var newFrame = new TAG2Frame(); newFrame.Name = name; newFrame.Value = value; AddFrame(newFrame); }
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; }
public void AddFrame(TAG2Frame frame) { Frames.Add(frame); if (!FrameByName.ContainsKey(frame.Name)) FrameByName.Add(frame.Name,frame); }