public int readFrame(MemoryStream ms) //rewritten { int frameContentsLength = 0; ID3v2frame currentFrame = newFrameStruct(); if (Convert.ToByte(ms.ReadByte()) == 0x0) { return(0); } else { ms.Seek(-1, SeekOrigin.Current); } ms.Read(currentFrame.type, 0, frameTypeAndSizeLength); ms.Read(currentFrame.size, 0, frameTypeAndSizeLength); for (int i = frameTypeAndSizeLength - 1, shift = 0; i >= 0; i--, shift += 8) { frameContentsLength = frameContentsLength | ((int)currentFrame.size[i] << shift); } currentFrame.flags = null; if (version > 2) { ms.Read(currentFrame.flags, 0, 2); } Console.WriteLine(System.Text.Encoding.ASCII.GetString(currentFrame.type)); Console.WriteLine(frameContentsLength); Array.Resize <byte>(ref currentFrame.contents, frameContentsLength); ms.Read(currentFrame.contents, 0, frameContentsLength); frames.Add(currentFrame); return(frameHeaderLength + frameContentsLength); }
ID3v2frame newFrameStruct() { ID3v2frame myFrame = new ID3v2frame(); myFrame.type = new byte[frameTypeAndSizeLength]; myFrame.size = new byte[frameTypeAndSizeLength]; if (version > 2) { myFrame.flags = new byte[2]; } else { myFrame.flags = null; } myFrame.contents = new byte[2048]; return(myFrame); }