private static bool ReadID3v2(IntPtr p, TAG_INFO tags) { if ((p == IntPtr.Zero) || (tags == null)) { return(false); } try { ID3v2Reader reader = new ID3v2Reader(p); while (reader.Read()) { string key = reader.GetKey(); object obj2 = reader.GetValue(); if (obj2 is string) { tags.EvalTagEntry(string.Format("{0}={1}", key, obj2)); } else if ((key == "APIC") && (obj2 is byte[])) { TagPicture tagPicture = reader.GetPicture(obj2 as byte[], tags.PictureCount); if (tagPicture != null) { tags.AddPicture(tagPicture); } } } reader.Close(); } catch { return(false); } return(true); }
public static bool BASS_TAG_GetFromURL(int stream, TAG_INFO tags) { if ((stream == 0) || (tags == null)) { return(false); } bool flag = false; IntPtr ptr = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ICY); if (ptr == IntPtr.Zero) { ptr = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_HTTP); } if (ptr != IntPtr.Zero) { flag = tags.UpdateFromMETA(ptr.ToInt32(), false); } ptr = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_META); if (ptr == IntPtr.Zero) { ptr = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_OGG); } if (ptr == IntPtr.Zero) { ptr = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_APE); } if (ptr == IntPtr.Zero) { ptr = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_WMA); } if (ptr != IntPtr.Zero) { flag = tags.UpdateFromMETA(ptr.ToInt32(), false); } return(flag); }
private static bool ReadID3v1(IntPtr p, TAG_INFO tags) { if ((p == IntPtr.Zero) || (tags == null)) { return(false); } if (Marshal.PtrToStringAnsi(p, 3) != "TAG") { return(false); } p = new IntPtr(p.ToInt32() + 3); tags.title = Marshal.PtrToStringAuto(p).TrimEnd(new char[1]); int index = tags.title.IndexOf('\0'); if (index > 0) { tags.title = tags.title.Substring(0, index); } p = new IntPtr(p.ToInt32() + 30); tags.artist = Marshal.PtrToStringAnsi(p, 30).TrimEnd(new char[1]); index = tags.artist.IndexOf('\0'); if (index > 0) { tags.artist = tags.artist.Substring(0, index); } p = new IntPtr(p.ToInt32() + 30); tags.album = Marshal.PtrToStringAnsi(p, 30).TrimEnd(new char[1]); index = tags.album.IndexOf('\0'); if (index > 0) { tags.album = tags.album.Substring(0, index); } p = new IntPtr(p.ToInt32() + 30); tags.year = Marshal.PtrToStringAnsi(p, 4).TrimEnd(new char[1]); index = tags.year.IndexOf('\0'); if (index > 0) { tags.year = tags.year.Substring(0, index); } p = new IntPtr(p.ToInt32() + 4); tags.comment = Marshal.PtrToStringAnsi(p, 30).TrimEnd(new char[1]); index = tags.comment.IndexOf('\0'); if (index > 0) { tags.comment = tags.comment.Substring(0, index); } p = new IntPtr(p.ToInt32() + 30); int num2 = Marshal.ReadByte(p); try { tags.genre = Enum.GetName(typeof(ID3v1Genre), num2); } catch { tags.genre = ID3v1Genre.Unknown.ToString(); } return(true); }
public static bool BASS_TAG_GetFromFile(int stream, TAG_INFO tags) { if ((stream == 0) || (tags == null)) { return(false); } bool flag = false; tags.channelInfo = new BASS_CHANNELINFO(); if (BASS_ChannelGetInfo(stream, tags.channelInfo)) { BASSTag tagType = BASSTag.BASS_TAG_UNKNOWN; IntPtr p = BASS_TAG_GetIntPtr(stream, tags.channelInfo, out tagType); if (p != IntPtr.Zero) { switch (tagType) { case BASSTag.BASS_TAG_ID3: return(ReadID3v1(p, tags)); case BASSTag.BASS_TAG_ID3V2: return(ReadID3v2(p, tags)); case BASSTag.BASS_TAG_OGG: return(tags.UpdateFromMETA(p.ToInt32(), true)); case BASSTag.BASS_TAG_HTTP: case BASSTag.BASS_TAG_ICY: case BASSTag.BASS_TAG_META: return(flag); case BASSTag.BASS_TAG_APE: return(tags.UpdateFromMETA(p.ToInt32(), false)); case BASSTag.BASS_TAG_MP4: return(tags.UpdateFromMETA(p.ToInt32(), false)); case BASSTag.BASS_TAG_WMA: flag = tags.UpdateFromMETA(p.ToInt32(), true); try { IntPtr pUnk = BASS_WMA_GetWMObject(stream); if (!(pUnk != IntPtr.Zero)) { return(flag); } IWMHeaderInfo3 objectForIUnknown = (IWMHeaderInfo3)Marshal.GetObjectForIUnknown(pUnk); ArrayList allPictures = new WMFMetadataEditor(objectForIUnknown).GetAllPictures(); if (allPictures != null) { foreach (TagPicture picture in allPictures) { tags.AddPicture(picture); } } objectForIUnknown = null; GC.Collect(); } catch { } return(flag); case BASSTag.BASS_TAG_RIFF_INFO: return(tags.UpdateFromMETA(p.ToInt32(), false)); case BASSTag.BASS_TAG_MUSIC_NAME: tags.title = BASS_ChannelGetMusicName(stream); tags.artist = BASS_ChannelGetMusicMessage(stream); return(true); } } } return(flag); }