Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
 /// <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)));
 }
Exemplo n.º 9
0
 /// <summary>
 /// Reads tags from a Channel.
 /// </summary>
 public ID3v2Tag(int Channel) : this(Bass.ChannelGetTags(Channel, TagType.ID3v2))
 {
 }
Exemplo n.º 10
0
 /// <summary>
 /// Read the tag from a Channel.
 /// </summary>
 public static CartTag Read(int Channel)
 {
     return(Marshal.PtrToStructure <CartTag>(Bass.ChannelGetTags(Channel, TagType.RiffCart)));
 }
Exemplo n.º 11
0
 /// <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)));
 }
Exemplo n.º 12
0
        /// <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);
        }
Exemplo n.º 13
0
 public static string GetLyrics3v2(ITagsProvider ITA)
 {
     return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.Lyrics3v2)));
 }
Exemplo n.º 14
0
 /// <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)));
 }
Exemplo n.º 15
0
 /// <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)));
 }
Exemplo n.º 16
0
 /// <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)));
 }
Exemplo n.º 17
0
 public static string GetVendor(ITagsProvider ITA)
 {
     return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.Vendor)));
 }
Exemplo n.º 18
0
 public static string GetIcyShoutcastMeta(ITagsProvider ITA)
 {
     return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.META)));
 }
Exemplo n.º 19
0
 public static string GetMusicSampleName(ITagsProvider ITA, int index)
 {
     return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.MusicSample + index)));
 }
Exemplo n.º 20
0
 public static string GetRiffDisp(ITagsProvider ITA)
 {
     return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(ITA.Handle, TagType.RiffDISP)));
 }
Exemplo n.º 21
0
 public string Instrument(int Index)
 {
     return(Marshal.PtrToStringAnsi(Bass.ChannelGetTags(Handle, TagType.MusicInstrument + Index)));
 }
Exemplo n.º 22
0
        static Tags GetID3v2Tags(ITagsProvider ITA)
        {
            IntPtr ptr = Bass.ChannelGetTags(ITA.Handle, TagType.ID3v2);

            throw new NotImplementedException();
        }