Beispiel #1
0
 private static extern bool BASS_ChannelGetInfo(int handle, [In, Out] BASS_CHANNELINFO info);
Beispiel #2
0
        public static IntPtr BASS_TAG_GetIntPtr(int stream, BASS_CHANNELINFO info, out BASSTag tagType)
        {
            IntPtr zero = IntPtr.Zero;

            tagType = BASSTag.BASS_TAG_UNKNOWN;
            if ((stream == 0) || (info == null))
            {
                return(zero);
            }
            int ctype = info.ctype;

            if ((ctype & (int)BASSChannelType.BASS_CTYPE_STREAM_WAV) > 0)
            {
                ctype = (int)BASSChannelType.BASS_CTYPE_STREAM_WAV;
            }
            BASSChannelType type = (BASSChannelType)ctype;

            switch (type)
            {
            case BASSChannelType.BASS_CTYPE_STREAM_WMA:
            case BASSChannelType.BASS_CTYPE_STREAM_WMA_MP3:
                zero    = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_WMA);
                tagType = BASSTag.BASS_TAG_WMA;
                return(zero);

            case BASSChannelType.BASS_CTYPE_STREAM_WINAMP:
                zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ID3V2);
                if (!(zero == IntPtr.Zero))
                {
                    tagType = BASSTag.BASS_TAG_ID3V2;
                    return(zero);
                }
                zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_APE);
                if (!(zero == IntPtr.Zero))
                {
                    tagType = BASSTag.BASS_TAG_APE;
                    return(zero);
                }
                zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_OGG);
                if (zero == IntPtr.Zero)
                {
                    zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ID3);
                    if (zero != IntPtr.Zero)
                    {
                        tagType = BASSTag.BASS_TAG_ID3;
                    }
                    return(zero);
                }
                tagType = BASSTag.BASS_TAG_OGG;
                return(zero);

            case BASSChannelType.BASS_CTYPE_STREAM_OGG:
                zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_OGG);
                if (!(zero == IntPtr.Zero))
                {
                    tagType = BASSTag.BASS_TAG_OGG;
                    return(zero);
                }
                zero    = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_APE);
                tagType = BASSTag.BASS_TAG_APE;
                return(zero);

            case BASSChannelType.BASS_CTYPE_STREAM_MP1:
            case BASSChannelType.BASS_CTYPE_STREAM_MP2:
            case BASSChannelType.BASS_CTYPE_STREAM_MP3:
                zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ID3V2);
                if (!(zero == IntPtr.Zero))
                {
                    tagType = BASSTag.BASS_TAG_ID3V2;
                    return(zero);
                }
                zero    = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ID3);
                tagType = BASSTag.BASS_TAG_ID3;
                return(zero);

            case BASSChannelType.BASS_CTYPE_STREAM_AIFF:
            case BASSChannelType.BASS_CTYPE_STREAM_WAV_PCM:
            case BASSChannelType.BASS_CTYPE_STREAM_WAV_FLOAT:
            case BASSChannelType.BASS_CTYPE_STREAM_WAV:
                zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_RIFF_INFO);
                if (zero != IntPtr.Zero)
                {
                    tagType = BASSTag.BASS_TAG_RIFF_INFO;
                }
                return(zero);

            case BASSChannelType.BASS_CTYPE_MUSIC_MO3:
            case BASSChannelType.BASS_CTYPE_MUSIC_MOD:
            case BASSChannelType.BASS_CTYPE_MUSIC_MTM:
            case BASSChannelType.BASS_CTYPE_MUSIC_S3M:
            case BASSChannelType.BASS_CTYPE_MUSIC_XM:
            case BASSChannelType.BASS_CTYPE_MUSIC_IT:
                zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_MUSIC_NAME);
                if (zero != IntPtr.Zero)
                {
                    tagType = BASSTag.BASS_TAG_MUSIC_NAME;
                }
                return(zero);

            case BASSChannelType.BASS_CTYPE_STREAM_WV:
            case BASSChannelType.BASS_CTYPE_STREAM_WV_H:
            case BASSChannelType.BASS_CTYPE_STREAM_WV_L:
            case BASSChannelType.BASS_CTYPE_STREAM_WV_LH:
            case BASSChannelType.BASS_CTYPE_STREAM_OFR:
            case BASSChannelType.BASS_CTYPE_STREAM_APE:
            case BASSChannelType.BASS_CTYPE_STREAM_FLAC:
            case BASSChannelType.BASS_CTYPE_STREAM_SPX:
            case BASSChannelType.BASS_CTYPE_STREAM_MPC:
            case BASSChannelType.BASS_CTYPE_STREAM_TTA:
                zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_APE);
                if (zero == IntPtr.Zero)
                {
                    zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_OGG);
                    if (zero == IntPtr.Zero)
                    {
                        zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ID3V2);
                        if (zero == IntPtr.Zero)
                        {
                            zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ID3);
                            if (zero != IntPtr.Zero)
                            {
                                tagType = BASSTag.BASS_TAG_ID3;
                            }
                            return(zero);
                        }
                        tagType = BASSTag.BASS_TAG_ID3V2;
                        return(zero);
                    }
                    tagType = BASSTag.BASS_TAG_OGG;
                    return(zero);
                }
                tagType = BASSTag.BASS_TAG_APE;
                return(zero);

            case BASSChannelType.BASS_CTYPE_STREAM_ALAC:
            case BASSChannelType.BASS_CTYPE_STREAM_AAC:
            case BASSChannelType.BASS_CTYPE_STREAM_MP4:
                zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_MP4);
                if (zero == IntPtr.Zero)
                {
                    zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_ID3V2);
                    if (zero == IntPtr.Zero)
                    {
                        zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_APE);
                        if (zero == IntPtr.Zero)
                        {
                            zero = BASS_ChannelGetTags(stream, BASSTag.BASS_TAG_OGG);
                            if (zero != IntPtr.Zero)
                            {
                                tagType = BASSTag.BASS_TAG_OGG;
                            }
                            return(zero);
                        }
                        tagType = BASSTag.BASS_TAG_APE;
                        return(zero);
                    }
                    tagType = BASSTag.BASS_TAG_ID3V2;
                    return(zero);
                }
                tagType = BASSTag.BASS_TAG_MP4;
                return(zero);
            }
            return(IntPtr.Zero);
        }