public static Tags GetID3v1Tags(ITagsProvider ITA) { var tmp = (ID3v1Tag)Marshal.PtrToStructure(Bass.ChannelGetTags(ITA.Handle, TagType.ID3), typeof(ID3v1Tag)); Tags tags = new Tags(); if (tmp.comment[28] == (char)0) { // if 29 byte of comment is null ('\0') then 30 byte of comment string is track nomber tags.TrackNo = tmp.comment[29]; tmp.comment[29] = (char)0; } tags.Album = new string(tmp.album).Replace("\0", "").Trim(); tags.Artist = new string(tmp.artist).Replace("\0", "").Trim(); tags.Comment = new string(tmp.comment).Replace("\0", "").Trim(); if (tmp.genre > 147) { tags.Genre = Genres[147]; } else { tags.Genre = Genres[tmp.genre]; } tags.Title = new string(tmp.title).Replace("\0", "").Trim(); tags.Year = new string(tmp.year).Replace("\0", "").Trim(); return(tags); }
/// <summary> /// Reads <see cref="TagType.OGG"/> tags from a <paramref name="Channel"/>. /// </summary> public bool ReadOgg(int Channel) { var ptr = Bass.ChannelGetTags(Channel, TagType.OGG); if (ptr == IntPtr.Zero) { return(false); } foreach (var otherTag in ReadUsingLookupTable(Extensions.ExtractMultiStringUtf8(ptr), LookupTables.Ogg, '=')) { Other.Add(otherTag.Key, otherTag.Value); } if (string.IsNullOrWhiteSpace(Encoder)) { var encoderPtr = Bass.ChannelGetTags(Channel, TagType.OggEncoder); if (encoderPtr != IntPtr.Zero) { Encoder = Extensions.PtrToStringUtf8(encoderPtr); } } return(true); }
public static byte[] GetMusicOrder(ITagsProvider ITA) { int n = (int)Bass.ChannelGetLength(ITA.Handle, PositionFlags.MusicOrders); byte[] b = new byte[n]; IntPtr ptr = Bass.ChannelGetTags(ITA.Handle, TagType.MusicOrders); Marshal.Copy(ptr, b, 0, n); return(b); }
/// <summary> /// Reads <see cref="TagType.MP4"/> tags from a <paramref name="Channel"/>. /// </summary> public bool ReadMp4(int Channel) { var ptr = Bass.ChannelGetTags(Channel, TagType.MP4); if (ptr == IntPtr.Zero) { return(false); } foreach (var otherTag in ReadUsingLookupTable(Extensions.ExtractMultiStringUtf8(ptr), LookupTables.Mp4, '=')) { Other.Add(otherTag.Key, otherTag.Value); } return(true); }
/// <summary> /// Reads <see cref="TagType.RiffBext"/> tags from a <paramref name="Channel"/>. /// </summary> public bool ReadBWF(int Channel) { var ptr = Bass.ChannelGetTags(Channel, TagType.RiffBext); if (ptr == IntPtr.Zero) { return(false); } var tag = (BextTag)Marshal.PtrToStructure(ptr, typeof(BextTag)); Title = tag.Description; Artist = tag.Originator; Encoder = tag.OriginatorReference; Year = tag.OriginationDate.Split('-')[0]; return(true); }
/// <summary> /// Reads <see cref="TagType.ID3"/> tags from a <paramref name="Channel"/>. /// </summary> public bool ReadID3v1(int Channel) { var ptr = Bass.ChannelGetTags(Channel, TagType.ID3); if (ptr == IntPtr.Zero) { return(false); } var id3v1 = (ID3v1Tag)Marshal.PtrToStructure(ptr, typeof(ID3v1Tag)); Title = id3v1.Title; Artist = id3v1.Artist; Album = id3v1.Album; Year = id3v1.Year; Genre = id3v1.Genre; Track = id3v1.TrackNo.ToString(); Comment = id3v1.Comment; return(true); }
/// <summary> /// Reads <see cref="TagType.ID3v2"/> tags from a <paramref name="Channel"/>. /// </summary> public bool ReadID3v2(int Channel) { var ptr = Bass.ChannelGetTags(Channel, TagType.ID3v2); if (ptr == IntPtr.Zero) { return(false); } var id3V2 = new ID3v2Tag(ptr); foreach (var frame in id3V2.TextFrames) { if (!SetTagUsingLookupTable(frame.Key, frame.Value, LookupTables.Id3v2)) { Other.Add(frame.Key, frame.Value); } } Pictures.AddRange(id3V2.PictureFrames); return(true); }
/// <summary> /// Read the tag from a Channel. /// </summary> public static CartTag Read(int Channel) { return((CartTag)Marshal.PtrToStructure(Bass.ChannelGetTags(Channel, TagType.RiffCart), typeof(CartTag))); }
/// <summary> /// Reads tags from a Channel. /// </summary> public ID3v2Tag(int Channel) : this(Bass.ChannelGetTags(Channel, TagType.ID3v2)) { }
/// <summary> /// Read the tag from a Channel. /// </summary> public static CartTag Read(int Channel) { return(Marshal.PtrToStructure <CartTag>(Bass.ChannelGetTags(Channel, TagType.RiffCart))); }
/// <summary> /// Reads an <see cref="ID3v1Tag"/>. /// </summary> /// <param name="Channel">The Channel to read from.</param> public static ID3v1Tag Read(int Channel) { return((ID3v1Tag)Marshal.PtrToStructure(Bass.ChannelGetTags(Channel, TagType.ID3), typeof(ID3v1Tag))); }
/// <summary> /// Reads tags from a <paramref name="Channel"/>. /// </summary> public static TagReader Read(int Channel) { var result = new TagReader(); var info = Bass.ChannelGetInfo(Channel); switch (info.ChannelType) { case ChannelType.MP1: case ChannelType.MP2: case ChannelType.MP3: if (result.ReadID3v2(Channel)) { } else if (result.ReadID3v1(Channel)) { } else if (result.ReadApe(Channel)) { } else if (result.ReadBWF(Channel)) { } break; case ChannelType.OGG: if (result.ReadOgg(Channel)) { } else if (result.ReadApe(Channel)) { } break; case ChannelType.MP4: case ChannelType.AAC: if (result.ReadMp4(Channel)) { } else if (result.ReadID3v2(Channel)) { } else if (result.ReadApe(Channel)) { } else if (result.ReadOgg(Channel)) { } break; case ChannelType.Wave: case ChannelType.WavePCM: case ChannelType.WaveFloat: if (result.ReadRiffInfo(Channel)) { } else if (result.ReadBWF(Channel)) { } else if (result.ReadID3v2(Channel)) { } break; case ChannelType.DSD: result.Title = Marshal.PtrToStringAnsi(Bass.ChannelGetTags(Channel, TagType.DSDTitle)); result.Artist = Marshal.PtrToStringAnsi(Bass.ChannelGetTags(Channel, TagType.DSDArtist)); break; case ChannelType.MOD: result.Title = Marshal.PtrToStringAnsi(Bass.ChannelGetTags(Channel, TagType.MusicName)); result.Artist = Marshal.PtrToStringAnsi(Bass.ChannelGetTags(Channel, TagType.MusicAuth)); result.Comment = Marshal.PtrToStringAnsi(Bass.ChannelGetTags(Channel, TagType.MusicMessage)); break; default: if (result.ReadApe(Channel)) { } else if (result.ReadOgg(Channel)) { } else if (result.ReadID3v2(Channel)) { } else if (result.ReadID3v1(Channel)) { } break; } if (string.IsNullOrWhiteSpace(result.Lyrics)) { var ptr = Bass.ChannelGetTags(Channel, TagType.Lyrics3v2); if (ptr != IntPtr.Zero) { result.Lyrics = Marshal.PtrToStringAnsi(ptr); } } return(result); }
public static string GetLyrics3v2(ITagsProvider ITA) { return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.Lyrics3v2))); }
/// <summary> /// Read the tag from a Channel. /// </summary> /// <param name="Channel">The Channel to read the tag from.</param> public static CACodecTag Read(int Channel) { return((CACodecTag)Marshal.PtrToStructure(Bass.ChannelGetTags(Channel, TagType.CoreAudioCodec), typeof(CACodecTag))); }
/// <summary> /// Read the tag from a Channel. /// </summary> /// <param name="Channel">The Channel to read the tag from.</param> public static CACodecTag Read(int Channel) { return(Marshal.PtrToStructure <CACodecTag>(Bass.ChannelGetTags(Channel, TagType.CoreAudioCodec))); }
/// <summary> /// Reads an <see cref="ID3v1Tag"/>. /// </summary> /// <param name="Channel">The Channel to read from.</param> public static ID3v1Tag Read(int Channel) { return(Marshal.PtrToStructure <ID3v1Tag>(Bass.ChannelGetTags(Channel, TagType.ID3))); }
public static string GetVendor(ITagsProvider ITA) { return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.Vendor))); }
public static string GetIcyShoutcastMeta(ITagsProvider ITA) { return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.META))); }
public static string GetMusicSampleName(ITagsProvider ITA, int index) { return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.MusicSample + index))); }
public static string GetRiffDisp(ITagsProvider ITA) { return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.RiffDISP))); }
public string Instrument(int Index) { return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(Handle, TagType.MusicInstrument + Index))); }
static Tags GetID3v2Tags(ITagsProvider ITA) { IntPtr ptr = Bass.ChannelGetTags(ITA.Handle, TagType.ID3v2); throw new NotImplementedException(); }